mailtanimailtani

Sequences

Sequences are linear drip campaigns — a fixed series of emails sent to contacts on a schedule, one after another. Every contact enrolled in a sequence gets the same emails in the same order, with the same delays between them.

How Sequences Work

When a contact is enrolled in a sequence, they start at step 1. After the configured delay, they receive step 2, and so on until they reach the end or are removed.

You can enroll contacts:

  • Automatically via segment live-sync — contacts who match a segment attached to an active sequence are enrolled as soon as they match (on create or update)
  • Automatically via date triggers — enroll on a fixed calendar date, or per-contact when a date custom field is reached (e.g. renewal_date)
  • Manually from the Contacts list
  • Via a Start Campaign node in a flow (e.g. after the trigger event fires, enroll in the nurture sequence)
  • Via the API (enroll directly via POST /contacts/{id}/campaigns/{campaign_id}/enroll)

Enrollment Triggers

By default, contacts are enrolled immediately when you activate a sequence (or when they're added to the audience). You can instead configure an enrollment trigger to control when enrollment happens.

Fixed Date

All audience contacts are enrolled on a specific date. The daily campaigns:enroll-scheduled command checks for campaigns whose trigger date has passed and enrolls anyone not already active. Re-running the command is safe — already-active contacts are skipped.

Use case: a product launch sequence that should start for everyone on the same day.

Contact Date Field

Each contact is enrolled when their value for a chosen date custom field is on or before today. Contacts without a value for that field are never enrolled. Like fixed date, the command is idempotent — contacts already actively enrolled are skipped.

Use case: a renewal reminder sequence that starts 0 days before each contact's renewal_date. Each contact enters at their own time.

To use the contact date field trigger, you must first create at least one custom field of type date in your project settings.

Segment Live-Sync

If your sequence has one or more segments attached as audience, contacts are automatically enrolled the moment they match the segment — without needing a date trigger. This happens synchronously whenever a contact is created or updated via the app or API.

Use case: enroll contacts in a nurture sequence the instant they're tagged as a hot lead or their plan field is updated.

Use Cases

Onboarding education series Teach users one concept per day for a week. Day 1: what the product does. Day 2: key feature. Day 3: advanced feature. Day 5: tip that makes them feel smart.

Product training course 6 emails over 2 weeks, each covering a different module. Fixed curriculum, same for everyone.

Nurture campaign for leads A contact downloads a guide. Enroll them in a 5-email sequence over 3 weeks that covers related topics and ends with a soft CTA to book a call.

Post-purchase education User buys a product. Enroll in a 4-email "getting started" series — confirm purchase, show how to get started, share a success story, request feedback.

Sequences vs Flows

SequencesFlows
Branching
Optional
Required
Conditions
Optional
Required
TriggerEnrollment (manual or from flow)Event from your app
ComplexitySimple, linearCan be complex
Best forSame content for everyoneReact to contact state

The main limitation of sequences: every contact gets the same content. If you want to branch based on what a contact has or hasn't done, you need a flow.

Common upgrade path: Start with a sequence for onboarding (simple, gets the job done). As you learn what your users need, rebuild it as a flow with branches (e.g. "if they haven't logged in by day 3, send a different email").

Step Configuration

Each step in a sequence has:

  • Email template — which email to send
  • Delay — how long to wait after the previous step before sending this one

The delay on step 1 is relative to enrollment time. The delay on step 2 is relative to when step 1 was sent. And so on.

Example: 5-day onboarding sequence

  • Step 1 — Welcome (delay: 0 days — sent immediately on enrollment)
  • Step 2 — Core feature (delay: 1 day)
  • Step 3 — Advanced feature (delay: 2 days)
  • Step 4 — Social proof / case study (delay: 2 days)
  • Step 5 — Trial reminder + CTA (delay: 1 day)

Tips

Use sequences for education, not sales pressure. Contacts who feel like they're being pushed to buy too quickly will unsubscribe. Sequences work best when each email genuinely adds value.

Keep steps short. In a sequence, contacts are reading email after email. Long walls of text don't work. Short, focused emails that teach one thing each do.

End with a clear CTA. The last email should have a single clear action: start a trial, book a call, upgrade. The sequence has been building to this moment.

Variables work in sequences. You can use {{firstName}}, {{custom.fieldName}}, and spintax in sequence emails just like any other email type. Personalise where it makes sense.

Removing contacts from a sequence. Use a Stop Campaign node in a flow (e.g. user.subscribed flow) to remove a contact from a nurture sequence when they convert. There's no point continuing to nurture a paying customer with trial-focused emails.

Segment live-sync only adds, never removes. When a contact no longer matches a segment, they stay enrolled. Live-sync is additive — use a flow with a Stop Campaign node if you need to remove contacts based on conditions.

Date triggers are idempotent. You can run php artisan campaigns:enroll-scheduled as many times as you like. Contacts who are already actively enrolled won't be re-enrolled. Contacts who complete or are stopped can be re-enrolled on the next matching run.