Campaigns

Send one message to many people - by email or WhatsApp - personalised per recipient, with follow-ups that branch on what each person did. Outreach → Email or WhatsApp.

Overview#

A campaign is a four-step wizard: Audience, Content, Sequence, Review & Send. It stays a draft until you send or schedule it, so you can leave and come back at any point. Every campaign belongs to one agent, which determines who it sends as.

Audience#

Build the list from your leads, a CSV, or both:

ControlWhat it does
CSV importAdds contacts and their extra columns, which become merge tags.
Status filterOnly leads at a given status.
Tag filterOnly leads carrying a tag.
Exclude inbound leadsDrops leads captured automatically from the inbox - useful when you only want to reach a list you built deliberately.
Individual exclusionsTick anyone out by hand. Included and excluded contacts live in one table, so you can always see who you removed.

Custom columns are first-class

Any column beyond name and email is kept per recipient and exposed as {{col:ColumnName}}. They show up in the audience table too, so you can check the data before it's merged into a message.

Content & templates#

Write the subject and body in the editor, or start from a saved template - Campaigns and Templates are two views of the same page. Content is sanitised before it's stored and again before it's rendered, so pasted HTML can't carry anything unsafe into an inbox.

Turning on personalisation generates a per-recipient opening line from what Splice knows about that contact, available as {{personalizedLine}}.

Merge tags#

TokenResolves to
{{name}}The contact's full name. Prefer this one.
{{firstName}}First word of the name, falling back to there.
{{email}}Their email address.
{{col:ColumnName}}Any custom CSV column, by exact header name.
{{personalizedLine}}The AI-written opener, when personalisation is on.
{{unsubscribeUrl}}That contact's one-click unsubscribe link.

Test send validates your tags

A test send requires a value for every contact-level tag your content uses and refuses with a clear error if one is missing - so a literal {{col:Company}} never reaches a real inbox. Merged values are HTML-escaped, so a name like "Smith & Sons" survives intact.

Follow-up sequences#

The sequence step is a flow: each follow-up has a delay in days and a condition deciding who receives it.

ConditionSent to recipients who
No openNever opened the previous message.
Opened, no clickOpened it but clicked nothing.
ClickedClicked a link.
RepliedWrote back.
AnyEveryone, regardless.

Steps are laid out on a canvas you can rearrange. The original subject and body are step zero.

Who it sends from#

  • A campaign sends via the dedicated campaign sender when one is connected, otherwise via the agent's own mailbox (Gmail, Microsoft or SMTP).
  • With the campaign sender you can set a per-campaign from-address, as long as it sits on the verified sending domain.
  • Keeping bulk sending off your day-to-day mailbox is the safer default - a campaign that lands in spam shouldn't damage the address your team replies from.
  • The agent's integrations are resolved per agent, not per user - a mismatch here was a real cause of campaigns failing to send.

Tracking & unsubscribes#

  • Every link in the body is wrapped for click tracking automatically - there's no 'add tracked link' control to remember.
  • Clicks redirect through Splice, get recorded, then forward to the real destination. Bot and crawler clicks are filtered out.
  • Opens are tracked too, and both feed the sequence conditions above.
  • Unsubscribe is one click and per contact. If your content doesn't place {{unsubscribeUrl}} yourself, a footer is added so every campaign stays compliant.

Never hardcode an unsubscribe link

A placeholder URL in a starter layout is not an unsubscribe link. Use {{unsubscribeUrl}} - it's the only form that resolves to the contact's own token.

WhatsApp campaigns#

The WhatsApp tab runs the same wizard with one difference: content is a Meta-approved template, not free text. You pick the template and its language, then map its numbered placeholders to merge tags. Meta's rules apply - outside a customer's 24-hour window, a template is the only thing that can be sent at all.

Public archive#

A campaign can be published to a public URL so it can be shared or linked without forwarding the email. Access is either open to anyone with the link, or restricted to a list of invited addresses. The archive render deliberately mints no unsubscribe link and no tracking links - it's a copy to read, not another send.

Statuses & credits#

StatusMeaning
DraftStill being built. Nothing has gone out.
ScheduledWaiting for its send time.
SendingIn progress.
SentEverything went out.
PartialSome recipients failed - open it to see which.
FailedThe send couldn't proceed.

Sends are metered per message. Failed sends aren't charged. Campaigns are blocked when the workspace has no credits, and old campaigns can be archived to keep the list clean without deleting their history.

Known limits#

  • Spam-complaint feedback only exists on the dedicated campaign sender. Sending via SMTP, Gmail or Outlook gives no complaint signal back, so those contacts won't auto-unsubscribe on a spam report.
  • Bounce handling isn't wired for any provider yet - a hard bounce won't mark the lead automatically.
  • Don't treat a spam figure as complete until your provider's feedback loop is connected.

Sending a campaign that works

  1. 1Import the CSV and check the custom columns rendered correctly in the audience table.
  2. 2Write content using {{name}} and one or two custom columns - not a wall of merge tags.
  3. 3Test-send to yourself and read it on a phone.
  4. 4Add at most two follow-ups, conditioned on no-open and no-click rather than blasting everyone again.
  5. 5Schedule rather than sending at 2am, and watch the first hundred before the rest go out.