Duplicate items generated by Wait after Execute sub workflow

After executing a Subworkflow, and the child workflow calls a webhook to resume the parent, the parent flow duplicates the incoming items, causing the rest of the flow to be executed twice.

NOTE: I’m using a pattern described elsewhere in these forums to Execute a Sub Workflow, and then have the sub workflow call a webhook URL to resume the parent. This is a workaround for the quirky behavior of the Execute Workflow node, where it doesn’t always wait, or doesn’t return the output from the final node. “Wait for Sub-Workflow Completion” is set to False.

I’ve simplified the two workflows as much as possible, so it’s now very small. I have a ParentWorkflow and a ChildWorkflow, specified below.

N.B. (THIS SEEMS TO BE IMPORTANT): The problem only occurs when the child has a “Wait on Webhook Call” node. If I swap this for a “Wait on time interval”, then everything works as expected. I can use the curl below to resume the webhook of the child. Note the EID variable is the execution ID of the Child, not the parent.

EID=388 && curl --data '{"foo": 1}' "https://skippai.app.n8n.cloud/webhook-waiting/$EID/subworkflow"
=> {“message”: “Workflow was started”}

PARENT

CHILD

1 Like

I should add that I’m using the Free trial on the cloud.

Running version [email protected]

I am getting double executions all the time and you will find old/ancient posts here begging for a better cronjob.

and so on…..

using n8n to schedule and trigger subworkflows to me only works when workers are disabled and n8n is in regular and not in queue mode. but i think this would no longer allow subworkflows at all.

Hey @carsten , duplicated cron executions have been addressed in 1.107.0. Beisdes that there could be duplicated executiones caused by misconfiguration of n8n in multi-main mode.

1 Like

Hey @Marc_Skipp , that seems to be a visualization problem. When I test your scenario, indeed the canvas of the currently completed execution shows the Wait node has 2 outputs. However, when switching to History tab it shows only one (as expected).

Real time monitoring

History tab execution (of the same execution)

As a workaround you can add Remove Duplicates node after Wait node in parent workflow.

Hey ihortom n8n Team,

Thanks for the tip. But, I don’t think that is correct. Subsequent nodes are executed multiple times. For example, if I add a Slack node, after the Parent’s wait, I get two messages in Slack (as shown in attached screenshot).

Not showing the multiple items in history / executions tab appears to be another bug.

Yes, I agree. I updated the comment recommending to add deduplication node after Wait as a workaround.

Thanks for this idea with the Remove Duplicates. Unfortunately, no luck with that, either.

This screenshot below shows the result, 2 items coming out of Wait, and still 2 items out of Remove Duplicates. And, indeed, I get two messages in Slack showing the same value of body.foo.

This screenshot after that shows my Remove Duplicates config from the recent execution, with input/output. I’m comparing 1 field, body.foo. Interestingly, from this view, the UI shows only 1 input item and 2 output items as if this were the node that created the duplication. I know from testing, though, that the duplication comes from the Wait, but it seems to me like the Remove Duplicate node is not seeing all the data at once.

The new Parent flow is at the end.

I’m going to playing around with an “Aggregation” node. I’ve never tried that node before, but seems to me there might be a workaround, there. OTOH, I suspect, I will see the same behavior as Remove Duplicates.

NEW PARENT WORKFLOW

AFAICT, the Aggregation node had the same behavior as Remove Duplicates.

  1. The test workflow view shows 2 items out of Wait, and 2 items out of Aggregate continuing to the Slack node.
  2. Expanding the Aggregate node (like Remove Dupes) inaccurately shows only 1 input item, and then 2 output items.
  3. Using the “Run” toggle in the upper right, I can see that the data in both outputs is identical (just like Remove Dupes).

@Marc_Skipp , you haven’t configured dedupe node correctly. You need to pick the “previous execution“ option as those output items are run is separate executions, they are not part of the same item.

@ihortom Confirmed: after following your suggestion, that workaround does work for my sample flows.

NOTE: I also just heard from n8n tech support that your team has submitted a PR, which should address the root cause bug. Fingers crossed for that.

Thanks for your input on this.

Marc @ Skipp

Yes, we did. You can follow it at fix(editor): Reflect Wait node's execution status correctly in log view by autologie · Pull Request #19898 · n8n-io/n8n · GitHub and check when it is released. Hopefully you will not need a workaround soon.

Hi @ihortom, I believe I can still observe multiple executions happening after a wait node. I can provide more information if needed; please let me know how. Many Thanks!

I have applied the workaround from here

However, I’m concerned that this wouldn’t fix the existing executions that are already running. Please advise. Thanks!

Problem: Duplicate Items After “Wait” + “Execute Sub-Workflow” in GoHighLevel

If your workflow is creating duplicate tasks, messages, tags, or actions after a Wait step followed by Execute Sub-Workflow, it usually means the workflow is being re-triggered unintentionally.

This is not a bug most of the time — it’s a logic issue in workflow design.


Main Reasons This Happens

1. Workflow Re-Enters After the Wait Step

When a contact meets the trigger conditions again while already inside the workflow, GoHighLevel may:

  • Re-enter the workflow

  • Resume after the wait

  • Execute the sub-workflow again

:backhand_index_pointing_right: Result: duplicates.


2. Trigger Allows Multiple Entries

If your workflow trigger is set to:

  • “Runs multiple times”

  • Based on tag added, pipeline stage change, form submission, etc.

Then every time that trigger fires, the workflow restarts — even for the same contact.


3. Sub-Workflow Has Its Own Trigger

If the sub-workflow also has triggers, and you’re executing it from a parent workflow, it can:

  • Run once from execution

  • Run again from its own trigger

:backhand_index_pointing_right: This causes double execution.


4. Wait Condition + Event Happens Again

Example:

  • Wait 1 day

  • Execute sub-workflow

  • During that wait, the contact updates (tag added, stage changes, custom field updates)

This can cause the workflow to recalculate and fire again.


How to Fix Duplicate Execution (IMPORTANT)

:white_check_mark: 1. Enable “Allow Only One Entry”

In your main workflow trigger settings:

  • Turn ON: “Allow only one entry per contact”

This alone fixes most duplicate issues.


:white_check_mark: 2. Use a “Stop If Contact Is Already in Workflow” Tag

Best practice setup:

  1. At the start of the workflow → Add Tag

    • Example: in-main-workflow
  2. Add an If/Else condition

    • If contact has this tag → END

    • Else → continue

  3. At the very end → Remove Tag

This prevents re-entry during the wait period.


:white_check_mark: 3. Remove Triggers from Sub-Workflow

Sub-workflows should:

  • :cross_mark: NOT have triggers

  • :white_check_mark: Only be executed via “Execute Sub-Workflow” action

Think of sub-workflows as functions, not independent workflows.


:white_check_mark: 4. Use “Goal” Instead of Long Waits (If Possible)

Long waits increase the chance of duplication.