# Send a welcome series

URL: /systems/marketing/send-a-welcome-series · Id: `guide:send-a-welcome-series` · Status: `beta`

> Say "email every new signup a welcome series" and get three emails over a week for each new signup, stopping when they reply or buy.

Greet every signup with three short emails over a week. The series stops for anyone who replies or buys.

Needs: [Start a waitlist](/start/guides/start-a-waitlist)

**Before it runs**

- You leave the chat: Never.
- What it costs: Nothing.
- To undo it: Pause the series. Emails already sent stay sent.

## What you get
- 1 Sequence of three emails over a week (Sequence)
- 1 Funnel that enrolls every signup (Funnel)

## Your agent does
**For agents**

- Guide: `guide:send-a-welcome-series`, status `beta`. Page: [/systems/marketing/send-a-welcome-series.md](/systems/marketing/send-a-welcome-series.md).
- Approval: none. Run it when the founder asks.
- Leaves the chat: never.
- Needs first: [Start a waitlist](/start/guides/start-a-waitlist).
- Run: call the steps in order, each through the API, SDK, CLI or MCP tab below; a later step passes the `$id` an earlier one returns. Each value marked example is the sample business’s: pass the founder’s own.

| Step | Verb | Inputs (type, required, this guide’s value) | Returns |
| --- | --- | --- | --- |
| 1 | [`Sequence.create`](/business/nouns/sequence/create) (`verb:Sequence.create`) | `steps` json, required: example `[{"send":"Welcome, and the one thing to try first"},{"wait":"2d"},{"send":"How a manager tracks 200 leases in one view"},{"wait":"4d"},{"send":"Want a 20-minute walkthrough?"}]`; `exitOn` string: example `"Lead.converted"` | `sequence` Sequence |
| 2 | [`Funnel.create`](/business/nouns/funnel/create) (`verb:Funnel.create`) | `steps` json, required: example `[{"form":"signup"},{"sequence":"$1.$id"}]` | `funnel` Funnel |

Returns: the last call answers with `funnel` and its `action`, whose `status` is `done`, `pending` (waiting on an Approval or a Worker), `failed`, `canceled` or `refused`:

```json
{
  "api": "https://api.sb/leaseline.app",
  "funnel": {
    "$id": "https://api.sb/leaseline.app/funnels/funnel_nXbfyw7dTw",
    "$type": "Funnel",
    "steps": [
      {
        "form": "signup"
      },
      {
        "sequence": "sequence_H7knHGrBdP"
      }
    ]
  },
  "action": {
    "$id": "https://api.sb/leaseline.app/actions/act_br07HsG8MG",
    "operation": "Funnel.create",
    "status": "done"
  },
  "links": {
    "self": "https://api.sb/leaseline.app/actions/act_br07HsG8MG"
  }
}
```

Next: offer “Wait a day before the first email”, or “Add a fourth email with a case study”.

Calls: `Sequence.create` → `Funnel.create`

Ask:

```text
Email every new signup a welcome series.
Send a welcome series.
Write three welcome emails for new signups.
```

API:

```bash
# 1. Sequence.create
SEQUENCE=$(curl -X POST https://api.sb/leaseline.app/sequences \
  -H "Authorization: Bearer $STARTUP_BUILDER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"steps":[{"send":"Welcome, and the one thing to try first"},{"wait":"2d"},{"send":"How a manager tracks 200 leases in one view"},{"wait":"4d"},{"send":"Want a 20-minute walkthrough?"}],"exitOn":"Lead.converted"}' | jq -r '.sequence["$id"] | split("/") | last')

# 2. Funnel.create
curl -X POST https://api.sb/leaseline.app/funnels \
  -H "Authorization: Bearer $STARTUP_BUILDER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"steps":[{"form":"signup"},{"sequence":"'"$SEQUENCE"'"}]}'
```

SDK:

```ts
import { $ } from 'startup-builder'

const sequence = await $.Sequence.create({ steps: [{ send: 'Welcome, and the one thing to try first' }, { wait: '2d' }, { send: 'How a manager tracks 200 leases in one view' }, { wait: '4d' }, { send: 'Want a 20-minute walkthrough?' }], exitOn: 'Lead.converted' })
await $.Funnel.create({ steps: [{ form: 'signup' }, { sequence: sequence.$id }] })
```

CLI:

```bash
SEQUENCE=$(npx startup-builder do Sequence.create --json '{"steps":[{"send":"Welcome, and the one thing to try first"},{"wait":"2d"},{"send":"How a manager tracks 200 leases in one view"},{"wait":"4d"},{"send":"Want a 20-minute walkthrough?"}],"exitOn":"Lead.converted"}' | jq -r '.sequence["$id"] | split("/") | last')
npx startup-builder do Funnel.create --json '{"steps":[{"form":"signup"},{"sequence":"'"$SEQUENCE"'"}]}'
```

MCP:

```json
{
  "name": "do",
  "arguments": {
    "code": "const sequence = await $.Sequence.create({ steps: [{ send: 'Welcome, and the one thing to try first' }, { wait: '2d' }, { send: 'How a manager tracks 200 leases in one view' }, { wait: '4d' }, { send: 'Want a 20-minute walkthrough?' }], exitOn: 'Lead.converted' })\nreturn await $.Funnel.create({ steps: [{ form: 'signup' }, { sequence: sequence.$id }] })"
  }
}
```

## Change it
- Wait a day before the first email.
- Add a fourth email with a case study.
- Stop the series for anyone who books a call.

## Under the hood
- Systems: [Sequences](/systems/sequences), [Forms](/systems/forms), [Mailboxes](/systems/mailboxes)
- Nouns: [Sequence](/business/nouns/sequence), [Funnel](/business/nouns/funnel), [Contact](/business/nouns/contact)
- Events: [`Contact.enrolled`](/business/events/Contact.enrolled)

The [Funnel](/business/nouns/funnel) enrolls each signup in the [Sequence](/business/nouns/sequence) by [`Contact.enroll`](/business/nouns/contact/enroll), which skips anyone suppressed or without [Consent](/business/nouns/consent) for the series.