Skip to content

Ad leads — with the API

You run an ad, people sign up asking for information, and you want each person to get your answer at the moment they signed up — not whenever you remember to send the next email.

This guide builds that flow from three pieces that already exist: a list, its public sign-up form, and a sequence that fires on its own.

A campaign freezes its recipients when it starts: it takes a snapshot of the list at that instant and sends to those people. Anyone who signs up later won’t get it, even if they join the same list.

That’s fine for a newsletter, where everyone reads the same thing on the same day. It doesn’t work for leads: your sign-ups trickle in over weeks, and each person needs their answer right away.

What you want is a sequence: you define the steps once and every contact walks through them from their own entry date. Someone who signs up today at 3pm gets step 1 today; someone who joins tomorrow gets it tomorrow.

Create the list where sign-ups will land:

POST /v1/bulk/lists
{ "name": "Interested — August ad" }

One list per ad campaign, not a single list for everything. When you want to know which ad brought you better customers, the answer will live in the separation you set up today.

Turn on the list’s sign-up form:

PUT /v1/bulk/lists/{id}/signup-form
{ "tags": ["august-ad"], "redirect_url": "https://your-site.com/thanks" }

The response carries what you need:

FieldWhat it’s for
urlPage hosted by us. This is what you point the ad at.
snippetReady-to-paste HTML for your own site, if you’d rather use your design.
doble_optinTells you whether this list requires confirmation (see the note above).

The tags get applied to everyone who comes in through that form. Use them to know which ad each person came from.

redirect_url is where the person lands after signing up. Leave it empty and they go to our thank-you page, which works but isn’t yours — if you have your own, use it.

Step 3 — The sequence that fires on its own

Section titled “Step 3 — The sequence that fires on its own”

Create the sequence with a list_join trigger pointing at your list:

POST /v1/bulk/sequences
{
"name": "August ad follow-up",
"trigger_type": "list_join",
"trigger_value": "<your-list-id>"
}

Add the steps. offset_seconds is the time since the person signed up:

POST /v1/bulk/sequences/{id}/steps
{ "position": 1, "offset_seconds": 0, "subject": "The information you asked for", "html": "..." }
POST /v1/bulk/sequences/{id}/steps
{ "position": 2, "offset_seconds": 172800, "subject": "Some work we've done", "html": "..." }
POST /v1/bulk/sequences/{id}/steps
{ "position": 3, "offset_seconds": 432000, "subject": "Want to set up a call?", "html": "..." }

Then activate it — a sequence in draft sends nothing:

PATCH /v1/bulk/sequences/{id}
{ "status": "active" }

That’s it. From here on, everyone who signs up joins the sequence by themselves and gets the three emails on their own schedule. You don’t touch anything per lead.

  • Day 0 — what the ad promised. This is the email with the highest open rate, because the person just handed you their details and is expecting you. Don’t waste it on a generic welcome: send the information they asked for.
  • Day 2 — proof. Work you’ve done, cases, results. This is where they decide whether you’re a serious option.
  • Day 5 — the concrete invitation to talk. A booking link, not a “we’re at your service”.

Three steps are enough to start. Adding more later is easy; recovering a lead that went cold is not.

The trigger does not fire on CSV import. Only on individual sign-ups: the form, a confirmation, or creating a contact through the API. This is deliberate — importing 5,000 contacts into a list with a welcome sequence would send 5,000 welcome emails to people who’ve been with you for years, and that can’t be undone. If you want to reach people who were already there, use the explicit “subscribe whole list” action, where you see how many people you’ll reach before confirming.

With double opt-in, the trigger waits for the confirmation. The person enters the sequence when they confirm, not when they submit the form. That’s correct, but it means anyone who never confirms never gets your follow-up.

Signing up twice doesn’t send everything twice. Enrollment is idempotent per (sequence, email), so someone who submits the form twice gets a single series.

What if you’d rather have a person reach out?

Section titled “What if you’d rather have a person reach out?”

Nobody buys an expensive service off an automated email chain. If a human on your team closes the sale, what you need is to hear about the sign-up instantly: point a webhook at contact creation and notify your team wherever they work.

The most effective setup is both. The sequence replies immediately, while the person is still interested; the internal alert lets your team chase the lead without waiting. Replying three days after someone asked for information is the same as not replying.