Hi all - running into a stubborn issue with the Execute Workflow node’s dual-output behavior when “On Error: Continue (using error output)” is set. Hoping someone has hit this and found a clean pattern.
Setup
-
A parent workflow calls a sub-workflow via Execute Workflow.
-
Execute Workflow node settings:
-
Mode: Run once for each item
-
Wait for Sub-Workflow Completion: ON
-
On Error: Continue (using error output)
-
-
The sub-workflow’s terminal node is a Google Sheets update.
-
Parent has two downstream branches: success path (cleanup + Telegram alert + form completion page) and error path (Telegram error alert + error completion page).
The behavior I’m seeing
I have two failure modes depending on the Always Output Data setting on the parent’s Execute Workflow node:
Case A - Always Output Data OFF on the parent’s Execute Workflow node:
-
On sub-workflow success: terminal node (Sheets update) emits 1 item with full row data. The parent’s Execute Workflow node Success Branch tab clearly shows the item present. But downstream nodes wired to the success port don’t fire. The execution just stops at Execute Workflow with no error and no further routing.
-
On sub-workflow error: the error branch fires correctly with the error payload. Clean.
Case B - Always Output Data ON on the parent’s Execute Workflow node:
-
On sub-workflow success: both success and error branches fire (success with the real data, but also a phantom run somehow).
-
On sub-workflow error: both branches fire simultaneously: success branch fires with an empty placeholder item
{}, error branch fires with the actual error payload. Both downstream paths execute in parallel, which causes duplicate Telegram alerts and conflicting form completion pages.
What I’ve tried
-
Toggling
Always Output Dataon the sub-workflow’s terminal Sheets node ON, with the parent’s Execute WorkflowAlways Output DataOFF. Sub-workflow’s terminal node confirms it emits 1 item with full data when checked in the sub-execution log. Parent Execute Workflow’s Success Branch tab also shows that item. Downstream nodes still don’t fire. -
Verified
Wait for Sub-Workflow Completionis ON. -
Verified wiring on the canvas - success port to cleanup node, error port to alert node. No accidental swaps.
-
Tried both “Run once for each item” and “Run once with all items” modes. Same result.
-
Re-drew the connector lines from the success port. No change.
What I want
The standard dual-output pattern most people seem to use:
-
Sub-workflow succeeds → only the success branch fires downstream → cleanup + success alert run.
-
Sub-workflow throws → only the error branch fires downstream → error alert + recovery UI run.
-
Never both at once.
Questions
-
Is
Continue (using error output)known to misbehave when the sub-workflow’s terminal node returns items but the parent’s Execute Workflow port doesn’t propagate to downstream nodes? Is there a specific n8n Cloud version where this is patched? -
Is there a canonical pattern people use to get clean dual-routing - maybe with a Merge node, an IF check on
$json.error, or some structural workaround I’m missing?
Any pointers appreciated. Happy to share more details of what else would be needed (as JSON code, workflow screenshots and other).
Thanks.