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.
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.
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).
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.
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.
@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.
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!
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
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
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)
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.
2. Use a “Stop If Contact Is Already in Workflow” Tag
Best practice setup:
At the start of the workflow → Add Tag
Example: in-main-workflow
Add an If/Else condition
If contact has this tag → END
Else → continue
At the very end → Remove Tag
This prevents re-entry during the wait period.
3. Remove Triggers from Sub-Workflow
Sub-workflows should:
NOT have triggers
Only be executed via “Execute Sub-Workflow” action
Think of sub-workflows as functions, not independent workflows.