Flow Builder
The flow builder is a visual node editor for designing advanced automation logic. Instead of configuring sub-actions as a flat list, the flow builder lets you create branching, looping, and conditional workflows using a drag-and-drop interface.
The flow builder is available on Plus plans and above. Free-tier actions use the sub-action list.
How It Works
A flow is a directed graph made up of nodes (the steps) and edges (the connections between them). Execution starts at the trigger node and follows the edges through each subsequent node.
- Nodes perform an action (send a message, check a condition, update data)
- Edges connect one node’s output to another node’s input
- Branching happens when a node has multiple outputs (e.g., a conditional with “Yes” and “No” paths)
Action Flow Nodes
Action flows use a different set of entry nodes than command flows, since they’re triggered by events rather than chat messages.
Triggers
| Node | Description | Outputs |
|---|---|---|
| Event Trigger | Entry point for the flow. Listens for a specific stream event. Configure the event type and optional filters. | Next |
The Event Trigger node supports all 15 trigger events with event-specific configuration:
- Chat Message — filter by message pattern
- Subscription — filter by tier (Any, Tier 1, 2, or 3)
- Cheer — minimum bits threshold
- Raid — minimum viewer count
- Channel Point Redemption — specific reward name
- Timer Tick — specific timer name
- Custom Webhook — webhook path
Chat Nodes
| Node | Description |
|---|---|
| Send Message | Post a message in chat. Supports variables. |
| Send Reply | Reply directly to the triggering message. |
Automation Nodes
| Node | Description | Outputs |
|---|---|---|
| Run Command | Execute an existing chat command by name, with optional arguments. | Next |
| Trigger Action | Chain to another action by name. Useful for composing complex workflows from reusable pieces. | Next |
| Delay | Pause for 1–300 seconds. | Next |
| Conditional | Branch based on a condition (message content, user role, variable, counter, random chance, stream status). | Yes / No |
| Random | Randomly pick between two paths. | A / B |
Data Nodes
| Node | Description |
|---|---|
| Get Variable | Read a global variable into the flow. |
| Set Variable | Write a value to a global variable. |
| Get Counter | Read a counter’s current value. |
| Update Counter | Increment, decrement, or set a counter. |
| Random Quote | Fetch a random quote from your collection. |
| Math | Arithmetic operations with counter/variable support. Store the result in a variable. |
| HTTP Request | Call an external API. Configure method, URL, headers, body, and store the response in a variable. |
Formatting Nodes
| Node | Description |
|---|---|
| Format Text | Build dynamic strings using a template with variables: {user} has {counter:deaths} deaths! |
Moderation Nodes
| Node | Description |
|---|---|
| Timeout User | Timeout the triggering user (1 second to 14 days). |
| Purge Messages | Delete 1–100 of the user’s recent messages. |
Building a Flow
1. Add a Trigger
Every action flow starts with an Event Trigger node. Drag it onto the canvas and configure which event to listen for.
2. Add Processing Nodes
Connect nodes from the trigger to build your logic. Common patterns:
- Linear: Trigger → Send Message → Delay → Send Message
- Branching: Trigger → Conditional → (Yes) Send Message / (No) nothing
- Data-driven: Trigger → Get Counter → Math → Format Text → Send Message
3. Connect Nodes
Click and drag from an output port to an input port to create a connection. Each node can connect to multiple downstream nodes if it has multiple outputs.
4. Save
The flow auto-saves as you edit. Changes take effect immediately for future trigger events.
Shared Nodes
Several node types are shared between command flows and action flows:
| Category | Shared Nodes |
|---|---|
| Chat | Send Message, Send Reply |
| Flow Control | Delay, Conditional, Random |
| Data | Get/Set Variable, Get/Update Counter, Random Quote, Math |
| Formatting | Format Text |
| Moderation | Timeout User, Purge Messages |
Command-Only Nodes
These nodes are exclusive to command flows:
| Node | Why Command-Only |
|---|---|
| Start | Commands use a “Start” entry point; actions use “Event Trigger” |
| Cooldown | Command-specific rate limiting with global and per-user timers |
| Permission Gate | Chat role checks specific to command triggers |
| Whisper | Send private messages to the command sender |
| Regex Match | Pattern matching on the triggering chat message |
Action-Only Nodes
These nodes are exclusive to action flows:
| Node | Why Action-Only |
|---|---|
| Event Trigger | Actions are event-driven, not chat-triggered |
| Run Command | Execute a chat command from within an automation |
| Trigger Action | Chain to another action |
| HTTP Request | External API integration for automations |
Example: Raid Welcome Flow
Event Trigger (Raid, min 10 viewers)
│
├─→ Send Message ("Welcome raiders from {raidingBroadcasterDisplayName}!")
│
├─→ Delay (3 seconds)
│
└─→ Run Command ("!shoutout {raidingBroadcasterName}")Example: Smart Follow Alert
Event Trigger (Follow)
│
├─→ Get Counter ("followCount")
│
├─→ Update Counter ("followCount", increment by 1)
│
├─→ Conditional (Counter "followCount" equals 100)
│ │
│ ├─ Yes → Send Message ("We just hit 100 followers! Thank you {user}!")
│ │
│ └─ No → Send Message ("Welcome {user}! You're follower #{counter:followCount}!")
│
└─→ Set Variable ("lastFollower", "{user}")