Skip to main content
Campaigns dial a list of contacts on your behalf: pick an agent, upload a CSV, set when calling is allowed, and ThunderPhone works through the list — retrying no-answers and voicemails on the schedule you choose. Find them under Engagement → Campaigns (/dashboard/campaigns). For one-off programmatic calls, use the outbound calls API instead.

Prerequisites

  • A deployed voice agent.
  • A VoIP phone number connected to your organization to call from — demo numbers are inbound-only and cannot place campaign calls. See Connect a VoIP provider.
  • Contacts as a CSV file (or pasted JSON) with a phone or phone_number column. Up to 5,000 rows per upload, UTF-8 encoded. Any extra columns are kept as per-contact variables on the campaign’s contact records.

Create a campaign

1

Click New campaign

Name it, pick the voice agent, and choose the from number (one of your VoIP numbers).
2

Upload the contacts CSV

Rows with an invalid phone number are rejected individually and reported back with their row numbers — the rest import fine.
3

Set the calling window

Choose a timezone and a daily start/end window; the campaign only dials inside it. Windows may span midnight (e.g. 22:00 → 02:00). Optionally set a start at to schedule the launch and an end at after which the campaign completes automatically.
4

Tune pacing and retries

  • Concurrent calls — how many calls this campaign runs at once (1–10, default 3). Your organization is also capped at 10 concurrent outbound calls across everything, so parallel campaigns share that budget.
  • Maximum attempts — how many times each contact may be dialed (default 2).
  • Retry backoff (minutes) — the wait before a retry (default 60).
  • Retry on — which outcomes trigger a retry: no answer, voicemail, failed (all on by default).
5

Create draft, then start

Campaigns are created as drafts — contacts can only be added while a campaign is a draft. Starting a campaign requires an explicit consent to the call charges. With a future start at it becomes scheduled; otherwise it starts running immediately.

How outcomes and retries work

After each call, the contact gets an outcome — successful calls are marked completed; a call graded as no-answer, detected as voicemail, or failed is retried if that outcome is in your retry on list and the contact has attempts left. Contacts that run out of attempts are marked exhausted; non-retryable failures are marked failed.
Dialing pauses automatically while your account balance isn’t in good standing, and resumes once it is. Keep auto top-up on for long campaigns.

Monitor and control

Each campaign card shows its status and progress (e.g. “173 of 248 finished”). Open a campaign for the status breakdown, per-contact results, and recent calls — each links to the full transcript and recording in call history.
  • Pause / resume — pausing stops new dials; calls already in progress finish naturally. Paused campaigns can be edited and resumed.
  • Cancel — permanently stops the campaign.
  • A campaign completes on its own when every contact reaches a final state or the end at time passes.
Campaign statuses: draft, scheduled, running, paused, completed, cancelled. Contact statuses: pending, scheduled, calling, completed, failed, exhausted.

Next steps

Watch calls live

Listen in on campaign calls as they happen.

Outbound calls API

Place individual calls programmatically.