Skip to main content
Outbound campaigns let you dial a list of leads automatically, using your AI assistant to handle live conversations. The system manages scheduling, pacing, answering machine detection, and consent — so you can focus on the leads and the conversation.

How It Works

A campaign connects three things together: an assistant (the AI that talks), a caller ID (the phone number calls come from), and a lead list (who to call).
1

Create a campaign

Choose your assistant, caller ID, timezone, and calling window. Configure pacing to control how many calls happen simultaneously.
2

Add leads

Add leads one at a time, or bulk-import via CSV. Each lead needs a phone number and optionally a name, timezone, and custom variables.
3

Start the campaign

The scheduler picks up pending leads and dials them within your configured daily window. You can pause, resume, or stop at any time.
4

Monitor results

Track lead states, call outcomes, and conversion metrics in real time from the Stats tab or via the API.

Campaign Lifecycle

Every campaign follows a status lifecycle. You control transitions through the dashboard or API.

Scheduling & Pacing

The campaign scheduler runs continuously and respects two constraints: Daily window — Calls are only placed between the configured start and end times, interpreted in the campaign’s timezone. For example, a window of 09:00–17:00 in America/New_York means no calls before 9 AM or after 5 PM Eastern, regardless of your server’s timezone. Pacing — Two settings control call volume:
  • Max concurrent — The maximum number of simultaneous active calls. The scheduler won’t dial a new lead if this limit is reached.
  • Min interval — The minimum number of seconds between initiating consecutive calls. Prevents burst-dialing.
If a lead has its own lead_timezone set, the scheduler checks the daily window against the lead’s local time — not the campaign’s timezone. This lets you respect local calling hours for leads across different regions.

Call Flow

When the scheduler dials a lead, the call goes through several stages depending on your configuration:
When amd_enabled is true, the system listens to the initial pickup to determine whether a human or machine answered.
  • Human detected → Proceed to the consent step (or connect directly to the AI assistant).
  • Machine detected → Either drop a voicemail (if voicemail_drop_enabled is true) or hang up immediately.
AMD results are recorded on each attempt as amd_status (HUMAN or MACHINE) and amd_cause (e.g., LONGGREETING, INITIALSILENCE).
Once a human is confirmed and consent is granted (or skipped), the call is connected to your AI assistant. The assistant handles the conversation exactly as it would for an inbound call — using the same system prompt, tools, and voice configuration.Custom variables from the lead’s custom_vars field are available to the assistant during the call, enabling personalized conversations.

Lead States

Each lead moves through states as the campaign processes it:

Lead Actions

  • Cancel — Prevents a pending or leased lead from being dialed. The lead and its history are preserved.
  • Recycle — Resets a completed, failed, or canceled lead back to pending so it will be dialed again. Optionally resets the attempt counter.
  • Delete — Permanently removes a lead and all its attempt records.

Importing Leads via CSV

You can bulk-import leads using a CSV file. The file should have a header row with at least a phone_number column. Optional columns include name and lead_timezone. Any additional columns are automatically stored in the lead’s custom_vars.
Duplicate phone numbers within the same campaign are automatically skipped during import.

Monitoring & Stats

The Stats view provides real-time visibility into campaign performance:
  • Conversion funnel — Tracks leads from total → dialed → answered → completed, with conversion rates at each stage.
  • Call duration metrics — Average, shortest, longest, and total talk time across all calls.
  • Lead state breakdown — How many leads are in each state.
  • Attempt outcome breakdown — Distribution of call outcomes (answered, no answer, busy, voicemail dropped, etc.).
Stats auto-refresh every 10 seconds while a campaign is running.

Best Practices

Start small

Test with 5–10 leads before scaling up. Verify your assistant handles the conversation well and AMD is working correctly for your caller ID.

Respect calling hours

Set your daily window to match local business hours. Use lead_timezone for multi-region campaigns to avoid calling at inappropriate times.

Tune your pacing

Start with max_concurrent: 3 and increase gradually. High concurrency with a short interval can overwhelm your telephony infrastructure.

Use voicemail drop

Enable voicemail_drop_enabled with a well-crafted message. It turns machine-detected calls from wasted attempts into touchpoints.