Campaigns

Campaigns make outbound calls at scale. You upload a list of leads, pick a voice agent, set the schedule and retry policy, then start — the system dials each lead, has the AI conversation, captures the disposition, and moves on.

Creating a campaign

Dashboard → Campaigns → Create Campaign.

Fields:

  • Name — internal.
  • Voice agent — the AI that will talk on each call.
  • From number — which phone number to dial from (must be voice-capable and owned by you).
  • Enforce calling hours — toggle on to dial only between a Start Time and End Time. Calls outside the window wait until it reopens. See Compliance for TCPA rules.
  • Retry settings — Retry Interval (min) and Max Retries / Phone. See Retry behaviour below.
  • On voicemail — Hang up & try next number (no message is left) or Retry same number later.
  • Schedule start (optional) — pick a date and time and the campaign starts by itself then; leave blank to start it manually.
  • Calling mode — One-by-one (the next lead is dialled when the current call ends) or Everyone at once (2–20 leads on a call at the same time; as each call ends the next lead is dialled). Calls in parallel mode use plan minutes faster, so keep an eye on your balance or minutes.

If a lead asks to speak to a person during a campaign call and nobody on your team is on duty, the AI tells them no one is available right now and carries on the conversation itself.

Adding leads

Open the campaign and use Add Leads. You can import a CSV (below) or add one lead at a time with Name, Phone 1 (required), Phone 2/3, Email, and any extra key/value variables. Use phone numbers in international format (+14155551234).

Each row in the lead table shows name, variables, status, email and attempts. Filter by status, edit a lead with its edit action (including its variables), or delete it. Use the CSV button above the table to export the leads as a CSV.

Leads can be added or edited while the campaign is Draft, Paused or Completed; stop the campaign first if it is Active.

Uploading leads — the CSV format

Required columns: name, phone1. Optional structured columns: phone2 … phone10, email. Every other column becomes a variable the agent can reference as {{COLUMN_NAME}} in its greeting or system prompt.

Example CSV:

name,phone1,phone2,email,amount,address,case_number
Alex Chen,+14155551200,,[email protected],5000,123 Market St,CASE-7741
Jamie Lee,+12025550133,+12025550144,jamie@…,12000,…,CASE-7742

Header normalization: columns are uppercased and non-alphanumerics become underscores. case number → {{CASE_NUMBER}}. Tax-ID → {{TAX_ID}}.

Use the Download Sample button in Add Leads for a starter CSV that already has good column names.

Using variables in the agent

In the agent's Greeting or System Prompt, reference variables with {{TOKEN}}. Always available: {{NAME}}, {{EMAIL}}. Anything in the CSV becomes a token too.

Greeting example:

Hi {{NAME}}, this is Zara from Acme. I'm calling about case {{CASE_NUMBER}}
where you have a balance of ${{AMOUNT}}. Do you have a minute?

Missing values fall back gracefully — {{NAME}} defaults to there and others default to empty string, so a partial CSV won't produce sentences like "Hi , this is…"

Retry behaviour

Calls don't always reach a human. The dialer cycles through phone numbers breadth-first:

  1. Pass 1: call every lead on phone1. If that's NO_ANSWER / FAILED / VOICEMAIL / WRONG_NUMBER, move on to phone2 for that lead.
  2. After everyone has been tried once on each phone, wait retryIntervalMinutes before pass 2.
  3. Up to maxRetryAttemptsPerPhone total passes.

Short COMPLETED calls (≤1 conversation turn) are treated as NO_ANSWER for retry purposes — a 3-second pickup-then-hangup doesn't count as a successful reach.

Starting, pausing, restarting

A campaign is Draft until started, then Active, Paused, or Completed once every lead has been worked. Start is disabled until the campaign has at least one lead. Edit (settings) and Delete are available whenever the campaign is not Active; deleting removes all its leads and cannot be undone.

  • Start — dispatches the first batch of calls immediately.
  • Pause — finishes calls already in progress; doesn't dispatch new ones.
  • Resume — picks up where Pause left off.
  • Restart — resets every lead back to PENDING and zeroes the counters. Use this if you fixed an issue (wrong agent, bad prompt) and want to re-run the whole list.

Watching results

Open the campaign detail page:

  • KPI cards — total leads, calls made, interested, and success rate, plus a count of leads in each status.
  • Lead table — each row shows status, variables, email and attempts. Lead statuses: PENDING, IN_CALL, REACHED, INTERESTED, NOT_INTERESTED, VOICEMAIL, FAILED.
  • Cost section — daily call minutes × your tier rate, with a 30-day trend.
  • Webhooks — if you subscribed to campaign.lead.updated, your endpoint receives a payload every time a lead's status changes. See Webhooks.

Disposition outcomes

The AI labels each call with one of:

  • INTERESTED — caller engaged, qualified.
  • NOT_INTERESTED — explicit decline.
  • CALLBACK — caller asked to be called later; appointment created.
  • VOICEMAIL — hit a voicemail system, hung up.
  • WRONG_NUMBER — caller said wrong number.
  • NO_ANSWER — nobody picked up / silence.
  • OPT_OUT — caller asked to be removed.
  • COMPLETED — generic happy outcome that didn't fit above.

Opted-out numbers are stored per-org and won't be dialled by future campaigns.

Common stumbles

  • "Phone number limit reached." Free trial + Traveller plans cap campaigns indirectly via the available phone numbers. Upgrade or use PAYG.
  • All calls hit voicemail. Outbound greeting fires when the AI detects a real person; check the recipient timezone vs your TCPA window — they may all be asleep.
  • Campaign keeps redialing one lead. Check the lead has at least phone1 populated and that the number is in E.164 format (+1XXXXXXXXXX, no spaces or dashes).
  • "Can't delete this voice agent." The agent is still attached to this campaign. Reassign the campaign's agent or delete the campaign first.