Skip to content

Merge

Combines data from two inputs into a single output. The Merge node accepts data on two input handles (data1 and data2) and joins them according to the selected merge mode.

When to use Merge

Any time two or more upstream nodes need to feed a single downstream node, put a Merge node in between. Wiring both upstream edges directly to the same input of the downstream node is not allowed — the workflow editor flags this on save and the publish action is blocked with the message "Two upstream nodes target the same input." (See Workflows → Fan-in for the underlying rule.)

What you wantWrongRight
Combine two API result sets before processingHTTP A → Filter and HTTP B → Filter into the same inputHTTP A → Merge.data1, HTTP B → Merge.data2, Merge → Filter
Join records from two database tablesTwo SQL nodes both wired into a single Transform inputTwo SQL nodes into Merge (mode: Merge by Key) → Transform
Run two pipelines in parallel then resume one downstream nodeTwo branches with edges into the same downstream node handleTwo branches → Merge (mode: Append) → downstream node

If you only need a downstream node to wait for two upstreams (no data join), still route them through Merge with mode Append — the four-mode picker covers every legitimate fan-in shape.

Configuration

FieldDescriptionNotes
Merge ModeHow to combine the two inputsAppend, Merge by Key, Zip by Position, or Combine (First Non-Empty). Defaults to Append.

Mode: Append

Concatenates all items from Input 1 followed by all items from Input 2 into a single list. No additional settings required.

Example: Input 1 has items [A, B] and Input 2 has items [C, D] -- output is [A, B, C, D].

Mode: Merge by Key

Performs a database-style join, matching items from both inputs on a shared field value.

FieldDescriptionNotes
Match Field (Input 1)The field to match on in Input 1Required. Supports nested paths (e.g., user.id).
Match Field (Input 2)The field to match on in Input 2Required. Supports nested paths.
Join TypeHow to handle unmatched itemsSee table below. Defaults to Inner Join.
When fields conflictHow to resolve fields that exist in both itemsSee collision strategies below. Defaults to Prefer Input 2.

Join Types

Join TypeBehavior
Inner JoinOnly include items where a match is found in both inputs
Left JoinInclude all items from Input 1; matched items are merged, unmatched items from Input 1 are kept as-is
Outer JoinInclude all items from both inputs; matched items are merged, unmatched items from either side are kept as-is

Mode: Zip by Position

Pairs items from Input 1 and Input 2 by their position (index 0 with index 0, index 1 with index 1, etc.) and merges each pair into a single item.

FieldDescriptionNotes
When inputs have different lengthsHow to handle length mismatchesStop at shortest (default) or Include all (pad missing).
When fields conflictHow to resolve fields that exist in both itemsSee collision strategies below. Defaults to Prefer Input 2.

Mode: Combine (First Non-Empty)

Returns the first input that contains data. If Input 1 has items, those are returned. If Input 1 is empty, Input 2 is returned instead. Similar to SQL COALESCE.

No additional settings required.

Collision Strategies

When merging two items that share the same field name, you can choose how to resolve the conflict:

StrategyBehavior
Prefer Input 2 (default)The value from Input 2 overwrites Input 1
Prefer Input 1The value from Input 1 is kept
Keep bothBoth values are kept with _1 and _2 suffixes added to the field name

INFO

Collision strategies apply to Merge by Key and Zip by Position modes. The Append mode does not merge individual items together, so collisions do not occur.

Output

The Merge node outputs the combined data on a single output handle.

TIP

Use Merge by Key to enrich data from one source with data from another -- for example, joining customer orders with customer profiles on a shared customer_id field.