Sequences
Automate multi-step email follow-up campaigns that send the right message at the right time -- without manual effort.
What are sequences?
A sequence is an ordered list of email steps and time delays. Once a contact is enrolled, Mailmark sends each email step automatically, waiting the configured delay before moving on to the next one.
Common use cases include:
- Cold outreach with automatic follow-ups if there is no reply
- Onboarding drips that guide new users through your product
- Re-engagement campaigns for inactive contacts
- Post-purchase follow-up and upsell flows
Unlike a one-off campaign, sequences are contact-centric: each enrolled contact progresses through the steps at their own pace. If a contact replies, the sequence can be marked as replied and no further steps are sent.
Creating a sequence
Sequences are created from the Mailbox view. Open any mailbox, navigate to the Sequences tab, and click New Sequence.
Step types
A sequence is built from two types of steps:
| Type | Purpose | Required fields |
|---|---|---|
| send_email | Send an email to the enrolled contact | subject, html body |
| delay | Wait before running the next step | delayMs (milliseconds) |
send_email step. You cannot start a sequence with a delay.Example sequence structure
Step 1: send_email -- Initial outreach (sent immediately on enrollment)
Step 2: delay -- Wait 3 days (3 * 24 * 60 * 60 * 1000 ms)
Step 3: send_email -- First follow-up
Step 4: delay -- Wait 5 days
Step 5: send_email -- Second follow-up (final)You can add as many alternating send/delay steps as needed. There is no hard limit on sequence length.
Enrolling contacts
After creating a sequence, enroll contacts one at a time or in bulk via CSV import from the Sequences tab.
Enrollment rules
- A contact can only be enrolled in the same sequence once at a time. Attempting to enroll a contact already in
activestatus returns an error. - A contact who previously completed or was cancelled from a sequence can be re-enrolled.
- Enrollment starts immediately -- the first
send_emailstep is scheduled as soon as the contact is enrolled.
Enrollment statuses
| Status | Meaning |
|---|---|
| active | Contact is progressing through the sequence |
| completed | All steps have been sent successfully |
| replied | Contact replied to one of the sequence emails |
| cancelled | Manually removed from the sequence |
| bounced | An email step bounced; sequence stopped for this contact |
Merge fields
Personalise sequence emails with contact-specific data by passing merge fields at enrollment time. Merge fields are arbitrary key-value pairs that get interpolated into the email subject and body when each step runs.
Syntax
Use double curly braces in your email subject or HTML body:
Subject: Hey {{firstName}}, quick question
Body:
<p>Hi {{firstName}},</p>
<p>I noticed {{company}} recently expanded into {{market}}.</p>
<p>We help companies like yours with email deliverability...</p>Providing merge field values
Supply the values when enrolling the contact. Any key used in the template must be present in the merge fields object, otherwise the placeholder is left as-is.
// Example enrollment with merge fields
{
"contactEmail": "alice@acme.com",
"mergeFields": {
"firstName": "Alice",
"company": "Acme Corp",
"market": "Southeast Asia"
}
}Managing sequences
Sequence statuses
| Status | Effect |
|---|---|
| active | New contacts can be enrolled; scheduled steps continue to send. |
| paused | No new steps are sent. Existing scheduled jobs are held until resumed. |
| completed | Sequence is archived. No new enrollments allowed. |
Pausing and resuming
Pausing a sequence prevents any pending steps from firing. When you resume, scheduled steps continue from where they left off -- contacts do not restart from the beginning.
Completing a sequence
Marking a sequence as completed immediately cancels all active enrollments. Use this when a campaign is permanently finished. This action cannot be undone.
Editing steps
Step content (subject, body) can be edited while a sequence is active. Changes apply to future step runs only -- emails that have already been sent are not affected. Pausing the sequence first is recommended before making significant edits.