> ## Documentation Index
> Fetch the complete documentation index at: https://docs.thunderphone.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Outbound campaigns

> Upload a contact list and let an agent work through it — with calling windows, retries, and live progress.

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](/guides/place-outbound-calls) 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](/guides/voip-providers).
* 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

<Steps>
  <Step title="Click New campaign">
    Name it, pick the **voice agent**, and choose the **from number**
    (one of your VoIP numbers).
  </Step>

  <Step title="Upload the contacts CSV">
    Rows with an invalid phone number are rejected individually and
    reported back with their row numbers — the rest import fine.
  </Step>

  <Step title="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.
  </Step>

  <Step title="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).
  </Step>

  <Step title="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.
  </Step>
</Steps>

## 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*.

<Note>
  Dialing pauses automatically while your account balance isn't in good
  standing, and resumes once it is. Keep
  [auto top-up](/guides/billing-and-topups) on for long campaigns.
</Note>

## 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

<CardGroup cols={2}>
  <Card title="Watch calls live" icon="tower-broadcast" href="/guides/monitor-live-calls">
    Listen in on campaign calls as they happen.
  </Card>

  <Card title="Outbound calls API" icon="phone-arrow-up-right" href="/guides/place-outbound-calls">
    Place individual calls programmatically.
  </Card>
</CardGroup>
