Merge
The Merge node combines data from multiple workflow branches into a single output. Use it after parallel branches (from If-Else, For Each, or explicit splits) need to converge and continue as one path.
When to use Merge
| Scenario | Why Merge |
|---|---|
| After If-Else branches | Both branches should continue to the same next step |
| After parallel API calls | Combine results from multiple HTTP requests |
| After For Each | Aggregate all iteration results into one array |
| Data joining | Combine data from different sources into one record |
Configuration
| Field | Type | Required | Description |
|---|---|---|---|
| Merge mode | Select | Yes | How to combine the incoming data (see modes below) |
| Wait for all | Toggle | No | Wait for all incoming branches to complete before proceeding |
Merge modes
Append
Combines all inputs into a single array. Each branch's output becomes an element.
Input:
- Branch A output:
{ name: "Alice", source: "LinkedIn" } - Branch B output:
{ name: "Bob", source: "Twitter" }
Result:
[
{ "name": "Alice", "source": "LinkedIn" },
{ "name": "Bob", "source": "Twitter" }
]
Merge by field
Combines objects by matching a shared key field.
Input:
- Branch A:
{ email: "alice@co.com", name: "Alice" } - Branch B:
{ email: "alice@co.com", company: "Acme" }
Merge on: email
Result:
{ "email": "alice@co.com", "name": "Alice", "company": "Acme" }
First completed
Takes the output of whichever branch finishes first. Useful for race conditions or fallback patterns.
All
Passes all branch outputs as separate variables: {{merge.branch_1}}, {{merge.branch_2}}, etc.
Output variables
| Variable | Description |
|---|---|
{{merge.result}} | The merged output (format depends on mode) |
{{merge.branch_count}} | Number of branches that completed |
{{merge.result[0]}} | First item (Append mode) |
{{merge.result.field}} | Merged field (Merge by field mode) |
Common patterns
Combine If-Else outputs
Trigger → If-Else (check type) →
Type A: HTTP Request (API 1) → Transformer (format A)
Type B: HTTP Request (API 2) → Transformer (format B)
→ Merge (first completed) → Send Email (with unified data)
Parallel enrichment
Trigger → [parallel branches]:
Branch 1: Company Enrichment
Branch 2: Person Enrichment
Branch 3: HTTP Request (custom API)
→ Merge (merge by field: email) → Create Record (enriched contact)
Aggregate For Each results
After a For Each loop, the Merge node collects all iteration outputs:
Find All (leads) → For Each → TinyGPT (classify) → Merge (append) →
Transformer (calculate stats: 40% enterprise, 35% mid-market, 25% SMB) →
Send Email (classification report)
When using "Wait for all" mode, the workflow pauses at the Merge until every incoming branch has completed. Disable this if you want to proceed as soon as any branch finishes (useful for timeout fallbacks).
In most cases after an If-Else, only one branch executes. The Merge node handles this gracefully: it receives output from the branch that ran and proceeds.