All guides
Campaigns: multi-channel drips and mass email

Campaigns: multi-channel drips and mass email

~5 min read

A campaign is a sequence of steps sent to a group of contacts. Each step is a channel (email, SMS, voice script) and a delay (now, +1 day, +3 days, etc). One step = a blast. Many steps with delays = a nurture. Both run on the same engine, both report opens / clicks / bounces / replies the same way.

Sequences (the old name for the same idea, on a separate engine) are deprecated. The settings page is still there with a banner pointing at Campaigns; the 22 legacy Sequences that exist keep running for now, but no new features land on that surface. If you see a chat suggestion or doc that mentions Sequences, that's stale and worth flagging.

Building a campaign in chat

The fastest path is to describe it. In any chat thread, say something like:

"Build a 5-step nurture for cold leads. Start with an email today, follow up by SMS in 2 days, another email in 5 days, voicemail in 9, email in 14. Tone: my normal voice, no marketing speak."

Closr drafts the steps in your voice (trained on writing samples you've shared), shows them to you as a draft campaign card, and waits for confirmation. You can ask for edits inline: "make step 2 shorter", "swap step 4 to a text", "add a step 6 asking for a referral". No contact gets a message until you confirm and pick an audience.

Building from the page

Same engine, list-first interface:

  1. 1Outreach (the page formerly called Campaigns) → "New campaign".
  2. 2Name + goal ("Reach out after 30 days of no contact").
  3. 3Add steps. Per step: channel (Email / SMS / Call script), delay (in days from enrollment), subject + body. For email steps, the WYSIWYG handles links and you'll see the open + click tracking pixel inject automatically.
  4. 4Save as draft. Test-send to yourself (the preview shows merge tags resolved against your own contact record).
  5. 5When you're ready, switch the status to Active and enroll an audience.

Picking an audience

Three ways to enroll contacts:

  • **From a saved view.** Outreach → your campaign → "Enroll from view" → pick one of your saved views from the Contacts page. Everyone matching the filter at that moment enrolls.
  • **From a tag.** Same enrollment dialog. Pick a tag. New contacts who get the tag later don't auto-enroll unless you wire that up via an automation.
  • **Explicit contact list.** Paste names or pick from search. Useful for "the 8 people I met at the open house Saturday".

You can also have an automation auto-enroll contacts based on a trigger. "When a new Facebook lead lands, enroll them in the FB Nurture campaign" is a one-line rule in the Automations surface; see that guide for the syntax.

Mass email (one-shot blast)

A blast is just a one-step campaign with no delay. Closr has a dedicated 3-step composer for this case because the one-step-now path is common enough to deserve its own surface:

  1. 1Outreach → "Mass Email" (top-right).
  2. 2Pick a saved view as your audience. The preview shows how many contacts you'll send to.
  3. 3Compose subject + body. Personalization tokens like `{{firstName}}` resolve per recipient.
  4. 4Preview against a real recipient (it picks one at random from the audience), then send.

The blast page reports the same metrics as a multi-step campaign: delivered, opened, clicked, bounced, unsubscribed.

Channels

  • **Email.** Sends through your Closr-connected Resend infrastructure. Tracked opens (1×1 pixel) + tracked clicks (link rewriting). Web-tracker integration: if you've installed the tracker on your website, links to your tracked domains get a tracking parameter injected so post-click browsing attributes back to the contact.
  • **SMS.** Sends through your Closr Twilio number. Two-way: replies land in the contact's thread and fire the `SMS_RECEIVED` trigger.
  • **Voice.** A call script step. Closr won't auto-dial yet (that's the dialer's job); the step surfaces the script as a "next action" for you in the contact's brief.
  • **WhatsApp.** Pending Meta approval. You'll see WhatsApp as an option in some places; messages don't actually send until Meta clears the app. Pick another channel for now.

Bounce handling

Hard bounces (the address doesn't exist, the domain is dead, the recipient explicitly complained) auto-unsubscribe the contact. The contact card shows an `emailBouncedAt` timestamp + a reason, and every subsequent outbound email to that contact is blocked at the send endpoint with a 409 telling you why. Soft bounces (temporary issues like a full mailbox or server timeout) retry once on the next campaign run.

Resend's webhook signs every bounce event with Svix; Closr verifies before writing. You'll see the bounce in the contact's activity timeline as a `BOUNCE` row with the provider's verbatim reason. Unsubscribes from one-click headers + List-Unsubscribe also flow through.

Tracking and reporting

Per campaign:

  • Enrollments (how many contacts entered)
  • Per-step delivered / opened / clicked / replied / bounced
  • Per-step unsubscribes
  • Campaign-completion count (everyone who finished all steps)

Open and click data shows up on the contact card too, so when you're looking at a single lead you can see which of your last 12 emails they actually engaged with.

If you want the campaign to *also* fire an automation when it finishes (e.g. "after the nurture, tag them 'nurtured' and notify me"), use the `CAMPAIGN_COMPLETED` trigger in an automation. See the Automations guide.

Where to go next

  • `automations`: auto-enroll into a campaign on `LEAD_CREATED` or any other trigger
  • `lead-scoring-views`: build the saved view you'll enroll from
  • `voice-profile`: train Closr on your voice so chat-built campaigns sound like you