This page is the deep dive on the Upload CSV step only. For the whole five-step wizard — Basics, Number Pool, Dialler Config, Upload CSV, and Review — see Create a campaign.
Before you start
Prepare the file first so the upload passes in one go:- a
phone_numbercolumn with one contact per row - a header row whose names exactly match the variables your bot’s prompt expects
- numbers in the format your carrier needs (include the country code when required)
- amount, date, and similar fields already written the way the bot should say them
- no stray hidden characters that spreadsheet tools sometimes add to headers
How to upload
Reach the Upload CSV step
In the campaign wizard, click Next through Basics, Number Pool, and Dialler Config until the step indicator highlights Upload CSV.
Add your file
Drag the CSV onto the dropzone, or click Browse inside the dropzone to open your computer’s file picker and choose the file.
Check the preview
A small preview table appears showing the header row and the first few rows. Confirm the columns and values look right.
The required column
Every campaign CSV must contain a column named exactly:phone_number is the number the dialler will call. A row whose phone_number is blank or invalid is skipped — see What gets skipped below.
Numbers may be written with a leading +, spaces, or hyphens for readability. The platform cleans those out before dialling, so all of these are read as the same number:
Extra columns become call variables
Every column other thanphone_number becomes a per-call variable. Whatever you put in a row’s cell is handed to the bot for that customer’s call, so the bot can greet them by name, quote their amount, reference their policy, and so on.
The column header is the variable name. Take this file:
Header names are matched against the variables in the bot’s prompt exactly, including upper- and lower-case. If the prompt expects
{{CUSTOMERNAME}} but your column is headed customername, the value will not fill in. Decide on names once and keep the CSV headers and the prompt in step.File and row limits
The platform enforces these limits when it validates the file:| Limit | Value |
|---|---|
| Maximum file size | 100 MB |
| Maximum rows | 500,000 |
| Minimum phone digits (after cleanup) | 8 |
What gets skipped
Not every row in your file necessarily becomes a call. The platform quietly drops rows it cannot use and ingests the rest. It does not fail the whole upload because of a few bad rows.| Situation | What happens |
|---|---|
phone_number is blank or, after cleanup, is not all digits / under 8 digits | That row is skipped. |
| The same number appears twice in the file | The duplicate rows are skipped; the number is dialled once. |
| A variable cell is empty | That cell is ignored; the rest of the row is kept. |
| The row is valid | It is added to the campaign as a pending contact, ready to dial. |
The preview table
As soon as a file is selected, the step shows a preview table so you can confirm you picked the right file and the columns landed where you expect. It displays the header row plus roughly the first four data rows — about five rows in total. It is a visual check only; it does not ingest or save anything. Use the preview to confirm:phone_numberis present as a column header- your variable columns line up under the headers you intend
- numbers and values are not shifted into the wrong columns (a sign of stray commas or quoting in the file)
Replacing or locking contacts
Whether you can upload at all, and what an upload does to existing contacts, depends on the campaign’s state.| Campaign state | Upload behavior |
|---|---|
| New campaign (creating) | The CSV is required (unless the campaign is always-on). Your file becomes the contact list. |
| Draft or paused, never run | The CSV is optional on edit. Uploading a new, valid file replaces the existing contact list. The old list is only swapped out after the new file validates and contains at least one valid row. |
| Always-on campaign | The CSV is optional. You can start with no file and add contacts later, over time. |
| Started, completed, or restarted campaign | The CSV is locked. You cannot replace the contact list. To run a different set of contacts, Clone the campaign and upload to the copy. |
Optional on a draft
Optional on a draft
“Optional. Uploading a CSV on a draft campaign replaces the existing contact list.” You may leave the file unchanged to keep the current contacts, or upload a new one to swap them all out.
Locked after a run
Locked after a run
“CSV contacts are locked for this campaign. Use Clone if you need a different contact set.” This appears once a campaign has run, alongside the wider lock on the campaign name and bot. These fields stay fixed so past and future attempts remain audit-safe.
Contact locking is part of the campaign’s identity lock, which switches on after the first run. From that point you can still rotate the outbound numbers and adjust dialler settings before pressing Start, but the name, bot, and contact list are frozen. To add more contacts to a campaign that is already running, use Add contacts (CSV) on the campaign monitor rather than the wizard — it appends rather than replaces.
Buttons on this step
| Button | What it does | When it shows |
|---|---|---|
| Browse | Opens your computer’s file picker so you can select a CSV. Sits inside the dropzone alongside the drag-and-drop area. | On the Upload CSV step. |
| Back | Returns you to the previous step (Dialler Config) without losing your file. | On steps 1 through 4, including this one. |
| Next | Advances to the Review step. It is disabled until the step’s requirements are met — for a non-always-on campaign that means a valid file must be present. | On steps 0 through 3. |
| Create Campaign | Submits the campaign. This is where contacts are actually validated and ingested. It appears on the Review step, not here. On success you land on the campaign detail page. | Review step only. |
| Back link (arrow at the top) | Leaves the wizard and returns to the campaign list or the campaign detail page. Work in the wizard is not saved. | Throughout the wizard. |
The Next button gives no error toast when it is disabled — it simply stays greyed out until the step is valid. If you cannot move forward from the Upload CSV step, the most common reason is that no valid file is attached (and the campaign is not always-on).
Quality checklist
Run through this before you upload:- the header row contains
phone_number, spelled exactly - every row has a non-blank
phone_number - numbers include the country code when the carrier requires it
- amount and date fields are already formatted the way the bot should speak them
- variable column headers match the bot prompt’s
{{...}}names exactly, including case - there are no hidden characters in the headers from a spreadsheet export
- you have spot-checked 5 to 10 rows by eye
Related pages
Create a campaign
The full five-step wizard, including Basics, Number Pool, Dialler Config, and Review.
Monitor a campaign
Watch a running campaign, read the contact count, and append more contacts with Add contacts (CSV).
Prompts and variables
How the bot uses your CSV columns as variables in the prompt and opening message.
Pacing and retries
How the dialler paces calls to your uploaded contacts and when it retries them.