Engagement
Reach customers across channels

Journeys

Journeys are visual, multi-step flows that react to customer behaviour in near-real-time. Each journey is a directed graph of nodes connected by edges; customers enter at the top and traverse nodes until they hit an exit.

Node types

NodePurpose
EntryHow customers enter: on event, on segment entry, on schedule, or manual list enrollment.
SendSend a template on a chosen channel.
WaitDelay for a fixed duration, until a specific time, or until an event.
ConditionBranch based on attribute or event properties.
A/B splitProbabilistic split into variants for experimentation.
WebhookFire an outbound webhook (e.g. to Slack, HubSpot, or your backend).
Update attributeSet or increment a customer attribute inline.
ExitEnd the run.

Canvas UX

  • Drag nodes from the palette; snap to an 8px grid.
  • Click an edge to toggle condition (yes / no).
  • Hold Space + drag to pan; scroll to zoom.
  • Toggle Show stats to overlay per-node entered / completed / drop% numbers and A/B variant breakdowns.

Example: abandoned cart

  1. Entry: event item_added_to_cart.
  2. Wait: 1 hour.
  3. Condition: did the customer fire purchase_completed? If yes โ†’ exit.
  4. Send: email โ€” "Still thinking about it?"
  5. Wait: 24 hours, with exit condition purchase_completed.
  6. A/B split: 50% get an SMS reminder, 50% skip.

Safety rails

  • One active run per customer per journey unless you explicitly enable re-entry.
  • Frequency cap (see Safeguards) applies across all journeys and campaigns.
  • Sending paused flag immediately halts all journey sends.

Analytics

The per-node stats overlay reads from journey_node_stats (entered / completed / exited) and journey_variant_stats (per-variant conversions). These tables are updated as runs progress, so the canvas reflects live performance, not a snapshot.