Search documentation

Search for pages in the documentation

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

PropertyValue
CategoryControl
Node IDds.broadcast.batch.in2.success1.error0
Input Ports2
Success Outputs1
Error Outputs0
Execution ModeBatch

Configuration

ParameterTypeRequiredDescription
broadcastSelectYesWhich input has shared data: left or right
leftLabelStringYesLabel for left input data
rightLabelStringYesLabel for right input data

Broadcast Parameter

Specifies which input contains the shared context:

  • left: Left input is broadcast to each right item
  • right: Right input is broadcast to each left item

Labels

Name each input for access in downstream nodes.

How It Works

Broadcast = "left" (common pattern)

text
Context (single) ────┐
                     ├─→ [Broadcast] → Each item + context
Items (multiple) ────┘

Input:

  • Left (context): { "meetingTitle": "Q1 Review" }
  • Right (items): [{ "name": "John" }, { "name": "Jane" }]

Output:

json
[
  { "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:

text
Items (multiple) ────┐
                     ├─→ [Broadcast] → Each item + context
Context (single) ────┘

Input Schema

  • Left input: Any data (context or items depending on broadcast setting)
  • Right input: Any data (items or context depending on broadcast setting)

Output Schema

Array of combined objects, one per item:

json
[
  {
    "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:

text
                  ┌─→ (meeting data) ──────────┐
[Load Meeting] ───┤                            ├─→ [Broadcast] → [Email]
                  └─→ [Select Many: attendees] ┘

Configuration:

  • Broadcast: left
  • Left Label: meeting
  • Right Label: attendee

Email Template:

liquid
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:

text
[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:

liquid
{{ json.item.task }}

Meeting Analysis:
{{ json.analysis.value }}

Example: Add Org Context to Reports

Attach organization info to each report item.

Workflow:

text
[Load Org Info] ──────────────┐
                              ├─→ [Broadcast] → [Generate Reports]
[Query Deals] → [Select Many] ┘

Configuration:

  • Broadcast: left
  • Left Label: org
  • Right Label: deal

Access:

liquid
Company: {{ json.org.name }}
Deal: {{ json.deal.name }}

Example: Reverse Broadcast

When items are on the left:

Workflow:

text
[Get Items] ────────────┐
                        ├─→ [Broadcast] → [Process]
[Get Context (right)] ──┘

Configuration:

  • Broadcast: right (right input is context)
  • Left Label: item
  • Right Label: context

Broadcast vs Zip

FeatureBroadcastZip
PurposeAttach context to itemsCombine parallel results
Output countOne per item in non-broadcast streamOne combined object
Use caseIteration with contextAggregation

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:

text
leftLabel: "meetingContext"
rightLabel: "attendee"

Unclear:

text
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:

  1. Verify which input has context vs items
  2. Set broadcast to the context input
  3. 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:

text
[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:

liquid
{{ json.meetingContext.title }}  // Use configured label
  • Zip - Combine parallel streams differently
  • Select Many - Expand arrays before Broadcast
  • If - Conditional routing after Broadcast

Technical Details

Execution

Broadcast operates in batch mode:

  1. Waits for both inputs
  2. Identifies broadcast source (context) and items
  3. Creates one output per item with context attached
  4. 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

json
[
  { "[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.