Email Sequences with Customer.io and Calendly
Complete guide to running email sequences triggered by Surface form submissions, with automatic exit when leads book a meeting
This guide shows you how to run customizable email sequences with Customer.io and Calendly when leads submit your Surface form—whether they complete it or drop off partway through. The sequence automatically exits when a lead books a meeting, so you never over-email someone who has already scheduled a call.
How It Works
A lead submits your Surface form (partial or completed). Surface sends a webhook to the appropriate Customer.io URL based on the trigger.
Two webhook-triggered campaigns in Customer.io (one for partial, one for completed) create or update the person and add the appropriate event.
An event-triggered campaign starts a customizable follow-up email sequence with delays between each email.
Before each follow-up (after the first), a webhook checks the Calendly API. If the lead has booked a meeting, the campaign exits. Otherwise, it continues.
Prerequisites
Before you begin, make sure you have:
- A Surface account with a form that supports partial submissions (e.g., multi-step form with email capture)
- A Customer.io account with Campaigns and Journeys access
- A Calendly account with API access (Personal Access Token or OAuth)
- Your Calendly event type URI for the meeting type you want to check
Setup Steps
Step 1: Webhook Trigger Campaigns
Create two webhook-triggered campaigns in Customer.io—one for partial and one for completed—each with its own URL
Step 2: Configure Surface Workflow
Set up the Surface Workflow Builder to send form data to the correct Customer.io webhook URL based on trigger path (Dropped Off or Form Submission)
Step 3: Event-Based Email Campaigns
Create two event-triggered campaigns—one for partial submissions and one for completed—with your follow-up emails and delays
Step 4: Calendly Meeting Check
Add a webhook node before each follow-up (after the first) to check if the lead booked a meeting and exit the campaign if so
Campaign Flow Diagram
flowchart LR
%% Participants & Subgraphs
subgraph S [Surface]
direction TB
Lead([Lead])
Form[Form Submission]
end
subgraph C [Customer.io]
direction TB
Webhook[Webhook Trigger]
Campaign[Start Campaign]
Email1[Send Email 1]
Delay[Wait X Days]
Check[Check Meeting]
Decision{Booked?}
Exit[Exit Campaign]
Next[Send Follow-up]
end
subgraph K [Calendly]
direction TB
API[Calendly API]
end
%% Connections
Lead -->|Submits| Form
Form -->|Webhook Data| Webhook
Webhook --> Campaign
Campaign --> Email1
Email1 --> Delay
Delay --> Check
Check -.->|Query| API
API -.->|Status| Check
Check --> Decision
Decision -->|Yes| Exit
Decision -->|No| Next
Next --> Delay
%% Styling
classDef plain fill:#fff,stroke:#333,stroke-width:1px;
classDef check fill:#e6f7ff,stroke:#1890ff,stroke-width:2px;
class Lead,Form,Webhook,Campaign,Email1,Delay,Exit,Next plain;
class Check,Decision,API check;