Broadcast
Attach shared data to every item in a stream
The Broadcast node attaches shared data to every item in another stream. Use it when you have context data that should be available alongside each item being processed.
Overview
| Property | Value |
|---|---|
| Category | Control |
| Node ID | ds.broadcast.batch.in2.success1.error0 |
| Input Ports | 2 |
| Success Outputs | 1 |
| Error Outputs | 0 |
| Execution Mode | Batch |
Configuration
| Parameter | Type | Required | Description |
|---|---|---|---|
broadcast | Select | Yes | Which input has shared data: left or right |
leftLabel | String | Yes | Label for left input data |
rightLabel | String | Yes | Label for right input data |
Broadcast Parameter
Specifies which input contains the shared context:
left: Left input is broadcast to each right itemright: Right input is broadcast to each left item
Labels
Name each input for access in downstream nodes.
How It Works
Broadcast = "left" (common pattern)
Context (single) ────┐
├─→ [Broadcast] → Each item + context
Items (multiple) ────┘
Input:
- Left (context):
{ "meetingTitle": "Q1 Review" } - Right (items):
[{ "name": "John" }, { "name": "Jane" }]
Output:
[
{ "context": { "meetingTitle": "Q1 Review" }, "attendee": { "name": "John" } },
{ "context": { "meetingTitle": "Q1 Review" }, "attendee": { "name": "Jane" } }
]
The context is attached to each item in the other stream.
Broadcast = "right"
Same concept, but right input is the context:
Items (multiple) ────┐
├─→ [Broadcast] → Each item + context
Context (single) ────┘
Input Schema
- Left input: Any data (context or items depending on
broadcastsetting) - Right input: Any data (items or context depending on
broadcastsetting)
Output Schema
Array of combined objects, one per item:
[
{
"leftLabel": { /* left input data */ },
"rightLabel": { /* right input item */ }
},
// ... one per item in the items stream
]
Examples
Basic Example: Add Meeting Context
Attach meeting details to each attendee for personalized emails.
Workflow:
┌─→ (meeting data) ──────────┐
[Load Meeting] ───┤ ├─→ [Broadcast] → [Email]
└─→ [Select Many: attendees] ┘
Configuration:
- Broadcast:
left - Left Label:
meeting - Right Label:
attendee
Email Template:
Hi {{ json.attendee.name }},
Thank you for joining "{{ json.meeting.title }}" on {{ json.meeting.startTime | date: "%B %d" }}.
...
Example: Enrich Items with Analysis
Attach AI analysis to each action item.
Workflow:
[AI: Analyze Meeting] ───────────┐
├─→ [Broadcast] → [Create Tasks]
[AI: Extract Items] → [Select Many] ┘
Configuration:
- Broadcast:
left(analysis is context) - Left Label:
analysis - Right Label:
item
Create Task Description:
{{ json.item.task }}
Meeting Analysis:
{{ json.analysis.value }}
Example: Add Org Context to Reports
Attach organization info to each report item.
Workflow:
[Load Org Info] ──────────────┐
├─→ [Broadcast] → [Generate Reports]
[Query Deals] → [Select Many] ┘
Configuration:
- Broadcast:
left - Left Label:
org - Right Label:
deal
Access:
Company: {{ json.org.name }}
Deal: {{ json.deal.name }}
Example: Reverse Broadcast
When items are on the left:
Workflow:
[Get Items] ────────────┐
├─→ [Broadcast] → [Process]
[Get Context (right)] ──┘
Configuration:
- Broadcast:
right(right input is context) - Left Label:
item - Right Label:
context
Broadcast vs Zip
| Feature | Broadcast | Zip |
|---|---|---|
| Purpose | Attach context to items | Combine parallel results |
| Output count | One per item in non-broadcast stream | One combined object |
| Use case | Iteration with context | Aggregation |
When to use Broadcast:
- You have context + items to iterate
- Each item needs the same context
- You want to process items individually downstream
When to use Zip:
- You have parallel results to combine
- You want a single combined output
- Both streams represent different analyses of the same data
Best Practices
1. Choose Correct Broadcast Direction
Context should be the broadcast source:
✅ Correct:
- Left = meeting context (single)
- Right = attendees (multiple)
- Broadcast =
left
2. Use Clear Labels
Labels appear in downstream node access:
✅ Clear:
leftLabel: "meetingContext"
rightLabel: "attendee"
❌ Unclear:
leftLabel: "left"
rightLabel: "right"
3. Consider Data Size
Broadcast duplicates context for each item:
- 100 items = 100 copies of context in memory
- Keep context reasonably sized
- For very large context, consider alternatives
4. Order Matters for Labels
- Left input → accessed via
leftLabel - Right input → accessed via
rightLabel
Make sure you connect inputs to the correct ports.
Common Issues
Missing context data
Symptom: Context fields are undefined
Cause: Labels swapped or wrong broadcast direction
Solution:
- Verify which input has context vs items
- Set
broadcastto the context input - Check labels match input connections
Single item output instead of many
Symptom: Only one output item
Cause: Items stream wasn't expanded with Select Many
Solution:
[Load] → [Select Many] → [Broadcast (right input)]
Access errors in downstream nodes
Symptom: json.label is undefined
Cause: Using wrong label name
Solution: Use exact label strings from configuration:
{{ json.meetingContext.title }} // Use configured label
Related Nodes
- Zip - Combine parallel streams differently
- Select Many - Expand arrays before Broadcast
- If - Conditional routing after Broadcast
Technical Details
Execution
Broadcast operates in batch mode:
- Waits for both inputs
- Identifies broadcast source (context) and items
- Creates one output per item with context attached
- Outputs array of combined objects
Memory Consideration
Each output item contains a copy of the context:
- 10 items × 1KB context = ~10KB output
- 1000 items × 100KB context = ~100MB output
For large scale, consider structuring differently.
Output Structure
[
{ "[leftLabel]": leftData, "[rightLabel]": rightItem1 },
{ "[leftLabel]": leftData, "[rightLabel]": rightItem2 },
...
]
When broadcast = "left", leftData is the same for all items.
When broadcast = "right", rightData is the same for all items.