Journey Builder
The journey builder is a visual editor for designing the structure of a journey. It uses a drag-and-drop canvas where each node represents a step and connections define the execution order.
Builder Interface
The builder consists of three areas:
- Node palette (left) — Drag step types onto the canvas.
- Visual canvas (center) — Arrange and connect steps. Supports zoom, pan, and auto-layout.
- Properties panel (right) — Configure the selected step's settings.
Node Types
Each node in a journey graph serves a specific role:
| Node Type | Description |
|---|---|
| Trigger | Entry point of the journey. Defines when and how users enter (URL match, custom event, element click, or manual). See "Configuring Triggers". |
| Content | Renders a content item — a tooltip, beacon, announcement, survey, task list, or an existing flow. The journey advances when the user finishes it. |
| Wait | Pauses the journey for a fixed duration or until a specific calendar date. |
| Wait for Event | Pauses until the user performs a specific action, with an optional timeout for users who never do. |
| Condition | Branches into two or more paths based on user traits or past actions. |
| Split | Distributes users across two or more branches by percentage for A/B experimentation within a journey. |
| Goal Check | Evaluates whether the user has achieved a goal. Routes to a success or fallback path accordingly. |
| Exit | Ends the journey. Every path must terminate at an Exit node. Multiple Exit nodes represent different outcomes. |
Configuring Triggers
A Trigger node defines when and how users enter the journey. Select the trigger type and configure its matching criteria in the node's properties panel.
| Trigger Type | Fires when | Additional config |
|---|---|---|
| URL Match | The user visits a URL matching the pattern. | URL pattern (e.g. /onboarding), match type (Contains / Exact / Starts With / Regex) |
| Custom Event | A custom tracking event fires with the given name. | Event name (e.g. user_signed_up) |
| Element Click | The user clicks an element matching a CSS selector. | CSS selector (e.g. button.get-started) |
| Manual | The journey is enrolled programmatically via the SDK. | — |
Configuring Content Nodes
A Content node displays a specific piece of content and advances the journey when the user finishes it. In the properties panel, select the content type (flow, tooltip, announcement, survey, or task list) and then pick the specific item from your content library.
The journey pauses at the Content node until the user completes or dismisses the content, then continues to the next connected node.
Configuring Waits
Wait nodes accept the following delay options:
- Fixed duration — Pause for a set number of hours or days (e.g., wait 3 days before the next step).
- Until date — Pause until a specific calendar date and time.
Configuring Wait for Event
Wait for Event nodes pause the journey until the user performs a specific action:
- Event name — The name of the custom event to wait for (e.g.,
user:feature_used). - Timeout — The maximum time to wait. If the user does not trigger the event within the timeout window, they continue down the timeout branch instead.
Every Wait for Event node has two outgoing connections: event received and timed out.
Configuring Splits
Split nodes distribute users across branches by percentage:
- Define two or more outgoing connections from the Split node.
- Assign a percentage weight to each connection (weights must sum to 100).
- Assignment is deterministic — a user always takes the same branch across sessions.
Use splits to run A/B tests within a journey — for example, showing different onboarding flows to 50% of new users each.
Configuring Goal Checks
Goal Check nodes evaluate whether a user has achieved a defined goal and route them to a success or fallback path based on the result.
| Goal Type | Succeeds when |
|---|---|
| Custom event | The user has triggered a specific custom event. |
| Page visit | The user has visited a URL matching a specified pattern. |
| Attribute match | A user trait matches a condition (e.g., plan is Enterprise). |
| Flow completed | The user has completed a specific flow. |
You can also set an optional deadline — a number of days from enrollment. Users who have not met the goal by the deadline are routed down the fallback branch.
Condition Branching
Condition nodes evaluate a rule and route the user down one of two or more paths:
- User trait conditions — Branch based on attributes like role, plan, signup date, or custom properties (e.g., if a user's role is Admin, take path A; otherwise take path B).
- Action conditions — Branch based on whether the user has performed a specific action (e.g., completed a flow, visited a page, clicked a button).
- Default branch — Every condition node requires a default (else) branch for users who do not match any defined rule.
Connecting Nodes
- Hover over a node to reveal its connection handle.
- Drag from the handle to another node to create a connection.
- Label connections to describe the transition (e.g., "Flow Completed", "Score 8 or above").
- Rearrange nodes by dragging them on the canvas. The builder validates that no nodes are orphaned and that no infinite loops exist.