Automations

Last updated on 2026-08-27

The automation system lets you build complex email workflows visually using a node-graph canvas. Automations trigger based on subscriber actions and execute a sequence of steps including emails, delays, conditions, and splits.

Automation List (/automations)

The automation list shows all automations with key metrics.

Features

  • Status filtering -- filter by active, paused, or draft
  • Status badges -- color-coded badges for each automation state
  • Trigger display -- shows the trigger type for each automation
  • Performance metrics -- enrolled count, completed count, and revenue attribution
  • Last triggered -- timestamp of the most recent trigger execution
  • Quick actions -- activate, pause, edit, duplicate, or delete

Automation Statuses

Status Description Behavior
active Currently running New subscribers matching the trigger are enrolled
paused Temporarily stopped No new enrollments; in-progress subscribers continue
draft Not yet activated Being built in the canvas; not visible to subscribers

Data Model

interface Automation {
  id: string;
  name: string;
  description?: string;
  status: 'active' | 'paused' | 'draft';
  trigger: string | FlowTrigger;
  enrolled?: number;
  enrolledCount?: number;
  completed?: number;
  completedCount?: number;
  revenue: number;
  lastTriggered?: string | null;
  createdAt: string;
  activatedAt?: string;
}

Visual Flow Builder Canvas (/automations/[id])

The flow builder is the centerpiece of the automation system. It provides a visual node-graph canvas where you connect trigger nodes, action nodes, and conditional branches into a complete workflow.

Canvas Features

  • Zoom controls -- zoom in, zoom out, and fit-to-view buttons
  • Pan navigation -- drag the canvas background to pan around the flow
  • Node positioning -- each node has x/y coordinates on the canvas
  • SVG path connections -- curved SVG paths connect parent nodes to child nodes
  • Node selection -- click a node to open its configuration panel
  • Save and activate -- toolbar actions to save the current flow or activate the automation

Node Types

The flow builder supports 7 node types:

Node Type Icon Description Configurable Properties
trigger Zap Entry point that starts the automation Trigger type, conditions
email Mail Send an email to the subscriber Email template, subject line
wait Clock Delay for a specified duration Wait duration (hours, days, weeks)
split GitBranch Split subscribers into branches Split criteria, branch labels
webhook Globe Send data to an external URL Webhook URL, payload
tag Tag Add or remove a tag from the subscriber Tag name, action (add/remove)
condition Filter Conditional branch based on criteria Field, operator, value

Trigger Types

Automations can be triggered by various subscriber actions:

Trigger Type Description
list-join Subscriber joins a specific mailing list
tag-added A tag is applied to a subscriber
date-based A specific date field matches (birthday, anniversary)
purchase Subscriber completes a purchase
api-event Custom event sent via API
form-submission Subscriber submits a growth form
page-visit Subscriber visits a tracked page
interface FlowTrigger {
  type: 'list-join' | 'tag-added' | 'date-based' | 'purchase'
       | 'api-event' | 'form-submission' | 'page-visit';
  conditions: Record<string, unknown>;
}

Node Data Model

interface FlowNode {
  id: string;
  automationId?: string;
  type: 'trigger' | 'email' | 'wait' | 'split'
       | 'webhook' | 'tag' | 'move-to-list' | 'condition';
  title?: string;
  position?: FlowNodePosition;
  x?: number;
  y?: number;
  data?: Record<string, unknown>;
  config?: Record<string, unknown>;
  connectedTo?: string[];
  parentId?: string;
  pathLabel?: string;
}

How the Canvas Works

  1. Node rendering -- each FlowNode is rendered at its (x, y) position on the canvas
  2. Connection drawing -- SVG <path> elements are drawn between parent and child nodes using curved bezier paths
  3. Node configuration -- clicking a node opens a Sheet drawer with fields specific to that node type
  4. Adding nodes -- click the + button between nodes to insert a new node in the flow
  5. Branch paths -- split and condition nodes create multiple outgoing paths, each labeled (e.g., "Yes" / "No")
  6. Zoom/pan -- zoom controls adjust the canvas scale; dragging the background pans the viewport

Automation Analytics (/automations/[id]/analytics)

Each automation has its own analytics page showing performance metrics.

Metrics

  • Enrollment count -- total subscribers who entered the automation
  • Completion count -- subscribers who reached the end
  • Completion rate -- percentage of enrolled subscribers who completed
  • Revenue attribution -- total revenue attributed to the automation
  • Step-by-step funnel -- conversion rates at each step in the flow
  • Time-series data -- enrollment and completion trends over time

Automation Templates (/automations/templates)

Pre-built automation templates provide starting points for common workflows.

Features

  • Category organization -- templates grouped by use case
  • Template details -- name, description, email count, and estimated revenue
  • One-click creation -- select a template to pre-populate the flow builder with nodes

Data Model

interface AutomationTemplate {
  id: string;
  name: string;
  category: string;
  description: string;
  emailCount?: number;
  estimatedRevenue?: number;
  nodes?: FlowNode[];
  previewUrl?: string;
}

Common Template Categories

Category Examples
Welcome Welcome series, onboarding sequence
Cart Abandonment Abandoned cart recovery, browse abandonment
Re-engagement Win-back campaign, inactive subscriber nudge
Post-Purchase Order confirmation, review request, cross-sell
Date-Based Birthday email, anniversary, renewal reminder

Activity Log (/automations/activity)

The activity log provides a real-time feed of automation executions.

Columns

Column Description
Type The action type (email sent, tag added, wait started, etc.)
Subscriber Email The subscriber who triggered the action
Automation Name The automation that executed
Details Step-specific information
Timestamp When the action occurred

Data Model

interface ActivityLog {
  id: string;
  type: string;
  subscriberEmail: string;
  automationName: string;
  timestamp: string;
  details: string;
}