# Form node never ends running

**URL:** <https://community.n8n.io/t/form-node-never-ends-running/257601>\
**Category:** Questions\
**Tags:** node\
**Created:** [January 29, 2026, 8:30am UTC](https://community.n8n.io/t/form-node-never-ends-running/257601 "2026-01-29T08:30:44Z")\
**Posts on this page:** 20\
**Page:** 1

<div class="post-metadata">

**Author:** ![inservo](https://dub1.discourse-cdn.com/n8n/user_avatar/community.n8n.io/inservo/32/116635_2.png) [@inservo](https://community.n8n.io/u/inservo)\
**Post date:** [January 29, 2026, 8:30am UTC](https://community.n8n.io/t/form-node-never-ends-running/257601/1 "2026-01-29T08:30:44Z")

</div>

Hey,

I have a workflow that contains an input form, where I simply capture some text, which then gets processed and formatted through an AI Agent node. I have a form ending node that should simply display the structured and formatted html content from prior nodes.

It seemed to be working until last week, now all of a sudden, the form node runs forever (spinning) and never fnishes. The workflow itself finishes (because I Have set the “limit execution time” to 0.50 minutes). But the form ending node keeps spinning and spinning and spinning.

 ![image](https://europe1.discourse-cdn.com/n8n/original/3X/f/5/f56793878a980d6cf95d9b2b2bc63f30ec394ff0.png)

## Information on your n8n setup

- **n8n version:** 2.4.6
- **Database (default: SQLite):** no clue
- **n8n EXECUTIONS\_PROCESS setting (default: own, main):** no clue
- **Running n8n via (Docker, npm, n8n cloud, desktop app):** no clue
- **Operating system:** no clue (runs in the cloud on an enterprise level but I don’t know what infrastructure it runs on)

---

<div class="post-metadata">

**Author:** ![Anshul\_Namdev](https://dub1.discourse-cdn.com/n8n/user_avatar/community.n8n.io/anshul_namdev/32/178229_2.png) [@Anshul\_Namdev](https://community.n8n.io/u/Anshul_Namdev)\
**Post date:** [January 29, 2026, 11:07am UTC](https://community.n8n.io/t/form-node-never-ends-running/257601/2 "2026-01-29T11:07:27Z")

</div>

Hey @inservo Can you share your workflow JSON with us that would really help us to look at your configurations and narrow down the issue.

---

<div class="post-metadata">

**Author:** ![tamy.santos](https://dub1.discourse-cdn.com/n8n/user_avatar/community.n8n.io/tamy.santos/32/153776_2.png) [@tamy.santos](https://community.n8n.io/u/tamy.santos)\
**Post date:** [January 29, 2026, 1:05pm UTC](https://community.n8n.io/t/form-node-never-ends-running/257601/3 "2026-01-29T13:05:04Z")

</div>

Hi @inservo

This behavior is expected based on how **n8n Forms work**.

Per the docs, a **Form Trigger keeps the HTTP request open** until a **Form Ending node sends the response**. If the workflow finishes (timeout, error, or early exit) before that happens, the form UI will keep spinning.

**Common causes in this setup**

- The AI Agent takes too long
- Execution hits the time limit before Form Ending runs
- A branch does not reach the Form Ending node

**How to fix**

- Make sure **every execution path reaches exactly one Form Ending node**
- Keep Form workflows **short and synchronous**
- Move slow AI processing to a **separate workflow** and return the form response immediately
- Ensure the Form Ending node is the **last step executed**

This matches the documented pattern:  
**Form Trigger → processing → Form Ending** , without long-running or async steps.

Once the response is sent, the spinner will stop.

---

<div class="post-metadata">

**Author:** ![inservo](https://dub1.discourse-cdn.com/n8n/user_avatar/community.n8n.io/inservo/32/116635_2.png) [@inservo](https://community.n8n.io/u/inservo)\
**Post date:** [January 29, 2026, 1:09pm UTC](https://community.n8n.io/t/form-node-never-ends-running/257601/4 "2026-01-29T13:09:25Z")

</div>

Thanks, but looking at your feedback, none of those occur. The AI agent processes it pretty decently. Form ending node is exactly the last node.

I though immediately that the additional branch (code node \> Outlook node) are causing the problem, but even without them, the form ending node keeps spinning.

Your statement in regards to long-running async steps does not make sense to me, tbh. Isn’t that the overall purpose of tools like n8n? Taking some kind of input through a form \> process through AI \> show the result?

Plus it has been working before so why does it all of a sudden stop.

---

<div class="post-metadata">

**Author:** ![inservo](https://dub1.discourse-cdn.com/n8n/user_avatar/community.n8n.io/inservo/32/116635_2.png) [@inservo](https://community.n8n.io/u/inservo)\
**Post date:** [January 29, 2026, 1:09pm UTC](https://community.n8n.io/t/form-node-never-ends-running/257601/5 "2026-01-29T13:09:53Z")

</div>

Yes, I have created a very simple example workflow, uploaded to this post.  
[My workflow 779.json](https://community.n8n.io/uploads/short-url/8QRMH16SgDpvcoQuDvDE8J6IUG2.json) (3.7 KB)

---

<div class="post-metadata">

**Author:** ![Anshul\_Namdev](https://dub1.discourse-cdn.com/n8n/user_avatar/community.n8n.io/anshul_namdev/32/178229_2.png) [@Anshul\_Namdev](https://community.n8n.io/u/Anshul_Namdev)\
**Post date:** [January 29, 2026, 1:39pm UTC](https://community.n8n.io/t/form-node-never-ends-running/257601/7 "2026-01-29T13:39:37Z")

</div>

Hey @inservo I have tested the workflow with my credentials and it works really well as i have expected it to, it asks the user about the idea evaluates it and then shares the output in the ending and shows the MarkDown→HTML output in the ending, what is causing you the problem exactly in your main workflow?

---

<div class="post-metadata">

**Author:** ![inservo](https://dub1.discourse-cdn.com/n8n/user_avatar/community.n8n.io/inservo/32/116635_2.png) [@inservo](https://community.n8n.io/u/inservo)\
**Post date:** [January 29, 2026, 1:43pm UTC](https://community.n8n.io/t/form-node-never-ends-running/257601/8 "2026-01-29T13:43:33Z")

</div>

> [@tamy.santos](#):
>
> The recommended pattern is to return the form response immediately and move AI processing to a separate async workflow.

Thank you for your very quick response.

I basically found one difference I had, however, it is still not working.

I exchanged the form ending node for a “next form page” node because what i basically want to do is to go through some iterations and with the help of AI improve the response until is good enough to be submitted.

Not in the workflow I shared (very simple one) but in general, that is the idea.

However, no matter if I choose form ending page or next form page, it never renders and never stops spinning. Does that basically mean you cannot use AI thinking models inbetween form pages as they have dynamic thinking times (that would be quite disappointing and unlogical from my point of view)?

---

<div class="post-metadata">

**Author:** ![inservo](https://dub1.discourse-cdn.com/n8n/user_avatar/community.n8n.io/inservo/32/116635_2.png) [@inservo](https://community.n8n.io/u/inservo)\
**Post date:** [January 29, 2026, 1:44pm UTC](https://community.n8n.io/t/form-node-never-ends-running/257601/9 "2026-01-29T13:44:34Z")

</div>

My problem is that it never shows the HTML output and keeps the Form Ending node spinning, never rendering anything. It stays “stuck” on the submission page.

---

<div class="post-metadata">

**Author:** ![Anshul\_Namdev](https://dub1.discourse-cdn.com/n8n/user_avatar/community.n8n.io/anshul_namdev/32/178229_2.png) [@Anshul\_Namdev](https://community.n8n.io/u/Anshul_Namdev)\
**Post date:** [January 29, 2026, 1:46pm UTC](https://community.n8n.io/t/form-node-never-ends-running/257601/10 "2026-01-29T13:46:43Z")

</div>

When i have tried it without changing anything in the flow it shows me the HTML as is when the AI finishes generating the output, and works just fine as you want it to be, have you tried switching to a different mode? or using Webhooks instead of forms?

---

<div class="post-metadata">

**Author:** ![tamy.santos](https://dub1.discourse-cdn.com/n8n/user_avatar/community.n8n.io/tamy.santos/32/153776_2.png) [@tamy.santos](https://community.n8n.io/u/tamy.santos)\
**Post date:** [January 29, 2026, 2:09pm UTC](https://community.n8n.io/t/form-node-never-ends-running/257601/11 "2026-01-29T14:09:11Z")

</div>

@inservo

## Correct architecture

### Workflow A — Form (always fast, never blocks)

Purpose: UI only

1. **Form Trigger**
2. **Set / Validate input**
3. **Store submission**  
(Database, Notion, Google Sheet, Redis — any persistent store)
4. **Next Form Page / Form Ending**

- Show a “Processing…” or “We’re improving your answer” message

1. **Execute Workflow (fire-and-forget)**

- Do **not** wait for response

> This workflow must never include AI Agents.

* * *

### Workflow B — AI Processing (async, no UI)

Purpose: heavy AI logic

1. **Trigger**

- Execute Workflow
- Webhook

1. **AI Agent (thinking model allowed)**
2. **Iterative refinement logic**
3. **Store final result**

- Same record created in Workflow A

1. **Optional notification**

- Email, Slack, etc.

* * *

### Workflow C — Result Display (optional)

Purpose: fetch result when ready

1. **Form Trigger or Webhook**
2. **Fetch stored AI output**
3. **Render HTML safely**

* * *

## How to handle “iterations” between form pages

You **do not** run AI between pages.

Instead:

- Each page submission updates the same record (submission\_id)
- AI workflow reads latest version
- User reloads or advances pages that **only read stored data**

This gives you:

- Unlimited AI time
- No spinners
- No execution limits
- No race conditions

* * *

## What is NOT supported (and never will be stable)

- AI Agent inside a Form-triggered workflow
- Thinking models between Form pages
- Relying on execution timeout to “eventually return”
- Synchronous AI → Form response

If you try, it may work temporarily and then fail again.

* * *

## Minimal confirmation checklist

If all below are true, the spinner issue is solved permanently:

- Form workflow has **no AI nodes**
- Form workflow always responds in \< 1s
- AI runs in a separate workflow
- Results are read from storage, not generated live  
This is the **only production-safe solution** according to how Forms and HTTP requests work in n8n.

---

<div class="post-metadata">

**Author:** ![inservo](https://dub1.discourse-cdn.com/n8n/user_avatar/community.n8n.io/inservo/32/116635_2.png) [@inservo](https://community.n8n.io/u/inservo)\
**Post date:** [January 29, 2026, 4:18pm UTC](https://community.n8n.io/t/form-node-never-ends-running/257601/12 "2026-01-29T16:18:27Z")

</div>

ok, this is interesting info.

But this let’s me question n8n completely. What’s the purpose of having a tool like n8n that has AI in its DNA if I can’t basically use these AI capabilities together with a simple user interface like forms.

You seem to say: only use forms if you don’t want to use AI.

Makes absolutelty no sense to me because what would I do with the form submission? For pure data handling there are much more convenient tools than n8n. Where n8n for me really shines is the use of AI

Hmmm…

---

<div class="post-metadata">

**Author:** ![tamy.santos](https://dub1.discourse-cdn.com/n8n/user_avatar/community.n8n.io/tamy.santos/32/153776_2.png) [@tamy.santos](https://community.n8n.io/u/tamy.santos)\
**Post date:** [January 29, 2026, 4:47pm UTC](https://community.n8n.io/t/form-node-never-ends-running/257601/13 "2026-01-29T16:47:00Z")

</div>

I completely understand why you feel this way. Your frustration is entirely valid. When you have a powerful AI tool like n8n, the expectation is that you can use it seamlessly with a simple UI like a form. The current technical limitation forces a design pattern that feels overly complex for what should be a straightforward task.  
The issue isn’t a lack of capability in n8n, but a conflict between the **synchronous nature of web requests** and the **asynchronous nature of deep AI processing**.

### 1. The Technical Reality (Why the Spinner)

As confirmed by the community and our internal teams, the core problem is that the `AI Agent` node, especially when using complex models like `qwen3 thinking`, takes too long.

| Component | Requirement | Result of Conflict |
| --- | --- | --- |
| **Form Trigger** | Must respond in **\< 1 second** (Synchronous) | Times out and displays the infinite spinner. |
| **AI Agent** | Needs **\> 1 second** (Asynchronous) | Cannot complete before the form times out. |

The technical solution is the **Asynchronous Architecture** (Workflow A + Workflow B), which is the most stable and scalable method for production environments.

### 2. The Trade-Off: Why the Asynchronous Method is Recommended

The recommended **Fire-and-Forget** method solves the stability issue but introduces a trade-off: **you lose the ability to show the AI result on the immediate “Thank You” page.**

| Method | Pros | Cons |
| --- | --- | --- |
| **Current (Synchronous)** | Simple, single workflow. | **Unstable** , prone to timeouts, poor user experience. |
| **Recommended (Asynchronous)** | **Stable** , scalable, no timeouts. | Requires two workflows, result must be delivered via email or a separate page. |

### 3. The “Third Way”: Trying to Keep the Result on the Page (Polling)

If your primary goal is to keep the result visible on the form’s final page, you can attempt a “Third Way,” but be aware that it is **less stable** and relies on the n8n Forms feature being able to handle a slight delay.

This method involves **Polling** or **Waiting** for a short period, hoping the AI finishes before the browser times out.

1. **Insert a `Wait` Node:** After the `AI Agent` node, insert a `Wait` node set to a very short duration (e.g., 5-10 seconds). This forces the workflow to pause, allowing the AI to finish.
2. **Immediate Form Ending:** The final node remains the `Show results` (Form Ending) node.

**Why this is risky:**

- **Unreliable:** If the AI takes 11 seconds, the form will still time out.
- **Scalability:** If you get many submissions at once, the waiting workflows will consume resources and potentially slow down your entire n8n instance.

**Our honest advice remains the Asynchronous Architecture (Fire-and-Forget)**, as it is the only way to guarantee a stable and reliable experience for your users, especially when dealing with the unpredictable latency of AI models.

Feel free to reach out if you have any follow-up questions.

---

<div class="post-metadata">

**Author:** ![inservo](https://dub1.discourse-cdn.com/n8n/user_avatar/community.n8n.io/inservo/32/116635_2.png) [@inservo](https://community.n8n.io/u/inservo)\
**Post date:** [January 29, 2026, 5:44pm UTC](https://community.n8n.io/t/form-node-never-ends-running/257601/14 "2026-01-29T17:44:14Z")

</div>

with all due respect, this seems like a major gap in the product.

Let me rethink this.

So I do have an email node, that sends the AI response. Is it somehow possible to include a deep link or something to that mail?

So a flow like this

User submits idea \> AI processes it \> form simply says “thank you submitted” \> waits for email \> clicks on link in email \> continues to work on idea based on AI feedback

This would decouple the AI response from the original form submission.

---

<div class="post-metadata">

**Author:** ![tamy.santos](https://dub1.discourse-cdn.com/n8n/user_avatar/community.n8n.io/tamy.santos/32/153776_2.png) [@tamy.santos](https://community.n8n.io/u/tamy.santos)\
**Post date:** [January 29, 2026, 6:02pm UTC](https://community.n8n.io/t/form-node-never-ends-running/257601/15 "2026-01-29T18:02:57Z")

</div>

I understand…

To make this work seamlessly, you should use a **Unique ID** to link the submission to the final result.

| Step | Action | Best Practice |
| --- | --- | --- |
| **1. Submission** | User submits the form. | Generate a `$uuid` (Unique ID) immediately. |
| **2. Acknowledgement** | Form shows: “Success! We’re processing your idea.” | Redirect or inform the user to check their email. |
| **3. AI Processing** | AI Agent runs in a separate workflow. | Store the result in a DB (Notion/Airtable) indexed by that **Unique ID**. |
| **4. Deep Link** | Send email with a link: `https://your-n8n-webhook/results?id=UUID`. | This link points to a **Webhook Node** or a **Wait for Webhook** event. |

### How to handle the “Deep Link” in n8n

The most robust way to do this is:

- **Workflow C (The Result Page ):** Create a small workflow starting with a **Webhook Node** (GET method).
- It takes the `id` from the URL, fetches the AI result from your database, and uses the **Respond to Webhook** node with “HTML” to render a clean page showing the feedback.

This completely decouples the “Wait” from the “Action,” giving your AI all the time it needs without ever locking the user’s browser.

best regards!

---

<div class="post-metadata">

**Author:** ![inservo](https://dub1.discourse-cdn.com/n8n/user_avatar/community.n8n.io/inservo/32/116635_2.png) [@inservo](https://community.n8n.io/u/inservo)\
**Post date:** [January 29, 2026, 6:33pm UTC](https://community.n8n.io/t/form-node-never-ends-running/257601/16 "2026-01-29T18:33:00Z")

</div>

this is a pretty awesome. Thanks a lot. Looks like a much more stable approach as well.

Yes, it does have a media break (browser vs email) but I think this might be the best we can get, right?

The one question I have difficulties to understand how the workflow C (the one with the webhook) would display a webpage? Is that the HTML node?

---

<div class="post-metadata">

**Author:** ![tamy.santos](https://dub1.discourse-cdn.com/n8n/user_avatar/community.n8n.io/tamy.santos/32/153776_2.png) [@tamy.santos](https://community.n8n.io/u/tamy.santos)\
**Post date:** [January 29, 2026, 6:43pm UTC](https://community.n8n.io/t/form-node-never-ends-running/257601/17 "2026-01-29T18:43:03Z")

</div>

@inservo

Yes, that break between browser and email is normal and actually makes things more stable. You let the AI run in the background and only show the result when it’s ready, instead of making the user wait on an open page.

To display the page you just use the Respond to Webhook node. After the Webhook node reads the id from the URL and you load the result from your database, the Respond to Webhook returns HTML as the response.

That HTML you return is the webpage itself. The browser receives it and renders it like any normal page, no special HTML node needed.

---

<div class="post-metadata">

**Author:** ![inservo](https://dub1.discourse-cdn.com/n8n/user_avatar/community.n8n.io/inservo/32/116635_2.png) [@inservo](https://community.n8n.io/u/inservo)\
**Post date:** [February 6, 2026, 6:29am UTC](https://community.n8n.io/t/form-node-never-ends-running/257601/18 "2026-02-06T06:29:55Z")

</div>

I really appreciate the big help in this thread, and it is very insightful to learn about certain limitations in a good way before providing production-ready solutions or things that I think are production-ready.

One thing I noticed is when I’m using a public chat, I don’t seem to have that problem. Could that be the solution eventually?

---

<div class="post-metadata">

**Author:** ![tamy.santos](https://dub1.discourse-cdn.com/n8n/user_avatar/community.n8n.io/tamy.santos/32/153776_2.png) [@tamy.santos](https://community.n8n.io/u/tamy.santos)\
**Post date:** [February 11, 2026, 2:20pm UTC](https://community.n8n.io/t/form-node-never-ends-running/257601/19 "2026-02-11T14:20:53Z")

</div>

Could be.  
It work?

---

<div class="post-metadata">

**Author:** ![McShaggle](https://dub1.discourse-cdn.com/n8n/user_avatar/community.n8n.io/mcshaggle/32/166280_2.png) [@McShaggle](https://community.n8n.io/u/McShaggle)\
**Post date:** [March 23, 2026, 11:51pm UTC](https://community.n8n.io/t/form-node-never-ends-running/257601/20 "2026-03-23T23:51:27Z")

</div>

I was having the exact same problem with my workflow, and found my way to this forum. I ended up finding that it was actually a problem with the way my applications were set up on Cloudflare. Zero Trust in Cloudflare was set up to bypass url’s with paths ending in “form”. But the Form Ending module redirects to a url ending with “form-ending”, so Cloudflare was blocking it. Once I opened that up in Zero Trust, the workflow works as intended.

---

<div class="post-metadata">

**Author:** ![system](https://dub1.discourse-cdn.com/n8n/user_avatar/community.n8n.io/system/32/195824_2.png) [@system](https://community.n8n.io/u/system)\
**Post date:** [June 21, 2026, 11:51pm UTC](https://community.n8n.io/t/form-node-never-ends-running/257601/21 "2026-06-21T23:51:29Z")

</div>

Closed on June 21, 2026, 11:51pm UTC

This topic was automatically closed 90 days after the last reply. New replies are no longer allowed.
