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

# AI Batch Calling Campaigns: Schedule and Launch at Scale

> Run AI calling campaigns to hundreds of contacts from a CSV upload. Schedule calls, inject per-contact variables, and track outcomes from the dashboard.

Batch campaigns let you launch AI-powered outbound calling campaigns to a list of contacts without placing a single call manually. Upload your contacts as a CSV, configure your AI agent, set a schedule, and VoiceInfra dials each number in turn — giving every contact a personalised, natural-sounding conversation powered by the variables you provide. Whether you're running appointment reminders, lead follow-ups, or B2B outreach, batch campaigns put scale within reach of any team.

## Key capabilities

<CardGroup cols={2}>
  <Card title="CSV bulk import" icon="file-csv">
    Upload up to 100 contacts at once with a pre-formatted template. All CSV columns become injectable variables for your AI agent.
  </Card>

  <Card title="Per-call variable injection" icon="code">
    Personalise every conversation by injecting contact-specific data — name, company, appointment time, and any custom field — directly into your agent's prompt.
  </Card>

  <Card title="Flexible scheduling" icon="calendar">
    Start a campaign immediately or schedule it for a specific date, time, and timezone. Target contacts during their local business hours for maximum answer rates.
  </Card>

  <Card title="Campaign tracking" icon="chart-bar">
    Monitor every call in the dashboard. See answered, voicemail, and failed statuses alongside duration, transcript, and AI summary for each contact.
  </Card>
</CardGroup>

## Creating a campaign

The campaign wizard walks you through three steps. You can revisit any step using the **Back** button without losing data.

<Steps>
  <Step title="Campaign details">
    Give your campaign a name and select the AI agent you want to use. The agent you choose determines the conversation flow, knowledge base, and transfer rules applied to every call in the campaign.
  </Step>

  <Step title="Schedule">
    Choose when your campaign runs:

    * **Start Immediately** — calls are queued and begin dialling within seconds of submission.
    * **Schedule for Later** — pick a specific date, time, and timezone. The timezone dropdown is searchable and defaults to your browser's detected timezone.

    <Tip>
      Schedule campaigns during local business hours (9 am–5 pm) for the highest answer rates. Use timezone scheduling to target contacts across different regions at the right time for each of them.
    </Tip>
  </Step>

  <Step title="Phone numbers">
    Add your contact list using one of two methods:

    **Option A — CSV upload**

    Download the pre-formatted template from the dashboard, fill in your contacts, and upload the file. The template includes columns for `phone_number`, `name`, and `company`, plus space for any custom columns you need. Maximum **100 numbers per batch**.

    **Option B — Manual entry**

    Type numbers one by one in E.164 format (for example, `+14155550100`). Manual entry is useful for quick tests or small lists.
  </Step>
</Steps>

## Per-call variable injection

Every column in your CSV becomes a variable that your AI agent can use mid-conversation. This means a single agent configuration can deliver a genuinely personalised call to every contact on your list — no scripting per contact required.

**Example CSV:**

```csv contacts.csv theme={null}
phone_number,name,company,appointment_time
+14155550100,Sarah Chen,Acme Corp,January 15 at 2pm
+15551234567,James Wilson,TechStart,January 16 at 10am
```

**Agent prompt using variables:**

```text theme={null}
Hello {{name}}, this is calling from VoiceInfra to confirm your appointment
with {{company}} on {{appointment_time}}. Can you confirm you'll be available?
```

When VoiceInfra calls Sarah Chen, `{{name}}` resolves to `Sarah Chen`, `{{company}}` to `Acme Corp`, and `{{appointment_time}}` to `January 15 at 2pm`. James Wilson's call uses his own values automatically.

<Note>
  Variable names in your prompt must exactly match the column headers in your CSV. Column names are case-sensitive.
</Note>

## Campaign limits

| Limit                     | Value                 |
| ------------------------- | --------------------- |
| Maximum numbers per batch | 100                   |
| Batch calling cost        | \$0.008 per dial      |
| Per-minute rate           | Standard rate applies |

Need to reach more than 100 contacts? Split your list into multiple campaigns, or [contact support](mailto:hello@voiceinfra.ai) to discuss higher limits.

## Tracking outcomes

Every call in your campaign is logged in the dashboard with the following information:

* **Status** — Answered, Voicemail, or Failed
* **Duration** — total connected time
* **Transcript** — full verbatim conversation
* **AI summary** — a concise summary generated by your agent after the call

Use the **Filter** controls to narrow results by status or date range, and export the full log as CSV for CRM imports or compliance records.

## Frequently asked questions

<AccordionGroup>
  <Accordion title="What's the maximum number of contacts per batch?">
    Each batch supports a maximum of 100 phone numbers. If you need to reach more contacts, create additional campaigns. Contact [hello@voiceinfra.ai](mailto:hello@voiceinfra.ai) if you need higher per-batch limits for your use case.
  </Accordion>

  <Accordion title="Can I add numbers to a running campaign?">
    No. Once a campaign is submitted, you cannot add contacts to it. To reach additional numbers, create a new campaign with those contacts.
  </Accordion>

  <Accordion title="What format should phone numbers be in?">
    All numbers must be in E.164 format: a `+` sign followed by the country code and subscriber number, with no spaces or dashes. Examples: `+14155550100` (US), `+441234567890` (UK), `+911234567890` (India).
  </Accordion>

  <Accordion title="What happens to failed calls?">
    Failed calls are logged in the campaign dashboard with a `Failed` status and a reason code. You can export the list, correct any issues, and create a new campaign to retry those numbers.
  </Accordion>

  <Accordion title="Can I pause or cancel a running campaign?">
    Check the campaign dashboard for pause and cancel controls. Calls already in progress will complete before a pause takes effect.
  </Accordion>

  <Accordion title="Do I need a phone number configured before creating a campaign?">
    Yes. You must have at least one phone number configured in the **Phone Numbers** section of your account. That number is used as the Caller ID for all outbound calls in the campaign.
  </Accordion>
</AccordionGroup>
