← Resources

Drip sequence recipes (welcome, nurture, onboarding)

Three drips that cover the lifecycle: a 3-email welcome for new leads, a monthly value nurture for the not-yet-ready, and a day 0/3/7/14 onboarding for new customers. Each ships with auto-enroll triggers, exit conditions, and email skeletons - the JSON at the bottom deploys all three in three API calls.

Who this is for

Founders and small teams who want lifecycle email running without a marketing-automation suite - and builders wiring an AI agent that manages the CRM end to end. These three recipes are the minimum viable lifecycle: catch every new lead while interest is hot, keep the unready ones warm without pestering them, and walk every new customer to activation. They are for people who already know you; for cold lists use a proper multi-touch cadence instead, and for contacts that went quiet mid-conversation, the re-engagement sequence is the right tool. If what you need is single-step if-this-then-that rules rather than timed emails, start with the CRM automation recipes.

The three recipes

RecipeEnrolls whenCadenceExits when
New-lead welcomeContact created with lead_source = websiteDay 0, 2, 5email_status becomes unsubscribed, bounced, or converted
Long-term nurtureContact updated to lifecycle = nurtureDay 3, then monthly ×3lifecycle is anything other than nurture
Customer onboardingDeal moves to stage wonDay 0, 3, 7, 14Deal's onboarding_status becomes live or churned

Rules that make drips work

Recipe 1: new-lead welcome (3 emails, day 0/2/5)

Triggered the moment a contact is created with lead_source = website. Email 1 delivers whatever they came for plus the single action that predicts activation, and tells them exactly how many emails follow - stated scope is why welcome drips get read. Email 2 (day 2) hands over one quick win most users miss. Email 3 (day 5) makes one soft ask and explicitly ends the sequence. Exit fires on email_status - your agent sets it to converted when a deal opens, or to unsubscribed/bounced on the bad outcomes, and the remaining sends stop instantly.

Recipe 2: long-term nurture (monthly value)

Enrollment is a deliberate act: you or your agent sets lifecycle = nurture on a contact who is real but not ready, and the contact.updated trigger picks it up. enroll_existing: true backfills everyone already marked nurture (bounded to the first 500). The wave is four emails: a benchmark stat, a teardown, a stealable template, then a permission check. Zero pitches - the moment nurture starts selling, it stops being read. The exit is one elegant condition: lifecycle neq nurture. Promote the contact to an active deal, mark them a customer, or mark them out - anything that changes the field ends the drip immediately.

Recipe 3: customer onboarding (day 0/3/7/14)

Triggered by deal.stage_changed into won; the emails go to the deal's primary_contact_id, so set that field on every deal you intend to win. Day 0 sets expectations and gives the first activation step. Day 3 targets the setup step most accounts skip - the one that gates your product's core value. Day 7 is a checkpoint that invites a reply if value has not shown up, which is your churn early-warning system. Day 14 closes with the support map and one qualitative question. Exit conditions read the deal here: when your team or agent sets the deal's onboarding_status to live (activated early - stop emailing them setup tips) or churned, the drip ends. Pair it with stage-change playbooks to fire internal tasks off the same won event.

The artifact: three sequences, four fields

Register the custom fields the triggers and exits read, then create the sequences. {{merge_tags}} interpolate from the recipient contact; [bracketed placeholders] are yours to replace before shipping.

POST https://api.relmcrm.com/v1/fields   (one call per field)

{ "object": "contact", "key": "lead_source",       "data_type": "text" }
{ "object": "contact", "key": "email_status",      "data_type": "text" }
{ "object": "contact", "key": "lifecycle",         "data_type": "text" }
{ "object": "deal",    "key": "onboarding_status", "data_type": "text" }
POST https://api.relmcrm.com/v1/sequences

{
  "name": "New-lead welcome - 3 emails / 5 days",
  "channel": "email",
  "trigger": {
    "event": "contact.created",
    "filter": [
      { "field": "lead_source", "op": "eq", "value": "website" }
    ]
  },
  "exit_when": [
    { "field": "email_status", "op": "in",
      "value": ["unsubscribed", "bounced", "converted"] }
  ],
  "steps": [
    {
      "wait_days": 0,
      "subject": "Welcome, {{first_name}} - here's what happens next",
      "body": "Thanks for signing up for [product], {{first_name}}.\n\nHere's the promised [lead magnet / resource]: [link].\n\nOne thing before anything else: [the single first action that predicts activation, e.g. 'connect your data source - it takes 4 minutes'].\n\nOver the next few days I'll send two short emails: one quick win most people miss, and one honest look at whether [product] fits your setup. Then this sequence stops.\n\n[signature]"
    },
    {
      "wait_days": 2,
      "subject": "The [quick win] most [ICP role]s skip",
      "body": "{{first_name}} - the fastest result new users get from [product] is [quick win], and half of them never find it.\n\nHow: [three-line, numbered walkthrough].\n\nIt takes [N] minutes and shows you [specific outcome]. If you hit a wall, reply - a human reads this.\n\n[signature]"
    },
    {
      "wait_days": 3,
      "subject": "Is [pain] worth 15 minutes?",
      "body": "Last one from me, {{first_name}}.\n\nIf [pain] is on this quarter's list, I'll walk you through how [peer company] handled it with [product] - [metric result].\n\nGrab a slot: [booking link]. If it's not the right time, no reply needed; this sequence ends here either way.\n\n[signature]"
    }
  ],
  "enabled": true,
  "enroll_existing": false
}
POST https://api.relmcrm.com/v1/sequences

{
  "name": "Long-term nurture - monthly value, Q3 wave",
  "channel": "email",
  "trigger": {
    "event": "contact.updated",
    "filter": [
      { "field": "lifecycle", "op": "eq", "value": "nurture" }
    ]
  },
  "exit_when": [
    { "field": "lifecycle", "op": "neq", "value": "nurture" }
  ],
  "steps": [
    {
      "wait_days": 3,
      "subject": "the [industry] number nobody publishes",
      "body": "{{first_name}} - one data point from the last quarter of [your work]:\n\n[Benchmark stat with a number, e.g. 'median reply rate across N campaigns was X%'].\n\nWhat it means for [ICP role]s: [two-sentence takeaway].\n\nNo pitch. More next month.\n\n[signature]"
    },
    {
      "wait_days": 30,
      "subject": "teardown: how [peer company] fixed [pain]",
      "body": "This month's teardown, {{first_name}}:\n\n[Peer company] had [pain]. [Three lines on what they changed, ending in a metric.]\n\nThe part most teams copy wrong: [one contrarian detail].\n\n[signature]"
    },
    {
      "wait_days": 30,
      "subject": "a [template / tool] you can steal",
      "body": "{{first_name}} - we cleaned up the [template / checklist / calculator] we use for [job-to-be-done] and made it public: [link].\n\nNo form, no gate. If you put it to work and something's off, reply and I'll fix it.\n\n[signature]"
    },
    {
      "wait_days": 30,
      "subject": "still useful? (30-second check)",
      "body": "Quarterly check, {{first_name}}: three emails, three [artifacts].\n\nIf they earned their place in your inbox, the next wave starts next month - [topic teaser].\n\nIf not, reply 'stop' and I'll mark you out - no hard feelings, no sneaky re-adds.\n\n[signature]"
    }
  ],
  "enabled": true,
  "enroll_existing": true
}
POST https://api.relmcrm.com/v1/sequences

{
  "name": "Customer onboarding - day 0/3/7/14",
  "channel": "email",
  "trigger": {
    "event": "deal.stage_changed",
    "filter": [
      { "field": "stage", "op": "eq", "value": "won" }
    ]
  },
  "exit_when": [
    { "field": "onboarding_status", "op": "in",
      "value": ["live", "churned"] }
  ],
  "steps": [
    {
      "wait_days": 0,
      "subject": "You're in, {{first_name}} - first step inside",
      "body": "Welcome aboard, {{first_name}}.\n\nOver the next 14 days you'll get four short emails that take you from signed to live. Nothing in them is filler; each has exactly one action.\n\nToday's: [the first activation step, e.g. 'invite your team / connect the integration']: [link].\n\nYour direct line for anything: [owner name], [email / Slack].\n\n[signature]"
    },
    {
      "wait_days": 3,
      "subject": "the setup step most teams skip",
      "body": "{{first_name}} - by day 3 most accounts have done [step 1] but not [step 2], and [step 2] is what makes [core value] show up.\n\nHow: [three-line walkthrough or link to a 2-minute video].\n\nStuck on anything? Reply with a screenshot and we'll sort it same day.\n\n[signature]"
    },
    {
      "wait_days": 4,
      "subject": "checkpoint: seeing [core value metric] yet?",
      "body": "One week in, {{first_name}}. By now you should be seeing [specific early result, e.g. 'your first synced records / first report'].\n\nIf yes - great, ignore me until day 14.\n\nIf no - something's misconfigured on our side or yours, and it's usually a 10-minute fix. Reply 'checkpoint' and I'll look at your account today.\n\n[signature]"
    },
    {
      "wait_days": 7,
      "subject": "you're live - your support map",
      "body": "{{first_name}} - that's onboarding done.\n\nWhere to get help from here: docs [link], support [email], your owner [name]. Feature requests: reply here, they're read weekly.\n\nOne ask: what nearly made you give up during setup? One sentence helps the next customer more than any survey.\n\n[signature]"
    }
  ],
  "enabled": true,
  "enroll_existing": false
}

Dry-run each one with GET /v1/sequences/{id}/preview - it returns the resolved send schedule and how many contacts would enroll right now, with no side effects - or enroll a single contact manually via POST /v1/sequences/{id}/enroll {"contact_id": "con_..."}. Build against a relm_test_ key first (sends are simulated, never delivered); live delivery uses your own Resend key, connected once via POST /v1/connections {"channel": "email", "provider": "resend", "api_key": "re_...", "from": "You <[email protected]>"}. One plan note: sequences are capped per plan (one on Free, ten on Pro, unlimited on Scale), counted separately in test and live mode - on Free, start with the recipe your funnel needs most. Full API reference in the docs.

Apply it with your agent

If your agent speaks MCP, point it at https://api.relmcrm.com/mcp (setup in how to give your AI agent a CRM) and paste:

Set up my lifecycle drips in Relm:
1. relm_create_field x4: contact lead_source, email_status,
   lifecycle (text); deal onboarding_status (text).
2. relm_create_sequence x3 with the JSON from
   relmcrm.com/resources/drip-sequence-recipes, replacing every
   [bracketed placeholder] with my product's specifics - ask me
   for the quick win, activation step, and core value metric first.
3. relm_preview_sequence on each and show me the three schedules.
4. Ongoing: set lead_source="website" on inbound signups,
   lifecycle="nurture" on stalled leads, email_status="converted"
   when you open a deal, and the deal's onboarding_status="live"
   once the customer activates - those writes drive every
   enrollment and exit.

Or create a sequence directly with curl:

curl https://api.relmcrm.com/v1/sequences \
  -H "Authorization: Bearer relm_test_..." \
  -H "Content-Type: application/json" \
  -d @welcome.json

FAQ

How does auto-enrollment into a drip sequence work?

Each sequence carries a trigger: an event (contact.created, contact.updated, deal.created, deal.updated, or deal.stage_changed) plus a filter of {field, op, value} conditions. Any record that fires the event and matches the filter is enrolled automatically. Setting enroll_existing to true also backfills records that already match at creation time, bounded to the first 500.

Can a contact go through the same sequence twice?

No. Enrollment is idempotent per sequence and contact - a second trigger for the same person is a no-op. That is deliberate: it prevents double-sends from repeated events. For recurring programs like nurture, ship a fresh wave (a new sequence with new copy) each quarter instead of looping one sequence forever.

What stops a drip sequence mid-flight?

The exit_when conditions. They are re-checked at two moments: the instant the source record changes, and again immediately before every send. So a contact marked converted at 9:00 never gets the 9:05 email. Enrollments also exit if the source record is deleted or the sequence is disabled or deleted.

How do step waits work - are they relative or absolute?

Each step's wait (wait_days, wait_hours, or wait_seconds) is relative to the previous step, and the first step's wait runs before the first send. A day 0/3/7/14 calendar therefore becomes waits of 0, 3, 4, and 7 days. GET /v1/sequences/{id}/preview returns the resolved cumulative schedule so you can verify before enabling.

Do test-mode sequences send real email?

No. Sends under a relm_test_ key are simulated and never delivered, so you can build and dry-run each recipe for free. Live delivery uses your own Resend key, connected once via POST /v1/connections. Test-mode requests are unlimited and invisible to live data; note that your plan caps how many sequences you can keep (one on Free, ten on Pro, unlimited on Scale), counted separately in test and live mode.

Ship all three drips in three API calls

1,000 requests a month and your first sequence on the Free plan, no card; Pro ($29) runs all three. See pricing.

Start free →