> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.vapi.ai/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.vapi.ai/_mcp/server.

# Campaign contact data

> Format campaign CSV files, understand contact limits, add contacts manually, and pass dynamic variables to an assistant or squad.

Use a CSV to upload your contacts with their phone number, name, and any dynamic variables you want to use in the campaign. You can also add contacts manually.

## Format contact CSV files

A campaign CSV can contain up to 10,000 contact rows. The header must include a lowercase `number` column. A lowercase `name` column is optional. Every other populated column becomes a dynamic variable for that contact.

```csv
number,name,account_tier,renewal_date,account_owner
+14155550100,Ada,premium,September 1,Jordan
+14155550101,Sam,standard,September 8,Casey
```

Use these fields in the assistant or squad configuration with double braces:

```text
Tell {{name}} that their {{account_tier}} plan renews on {{renewal_date}}.
If they ask for help, say that their account owner is {{account_owner}}.
```

### CSV behavior and limits

| Item                    | Details                                                                |
| ----------------------- | ---------------------------------------------------------------------- |
| Required column         | `number`, in lowercase                                                 |
| Optional contact column | `name`, in lowercase                                                   |
| Additional columns      | Passed as dynamic variables using the header text as the variable name |
| Empty cells             | Omitted from the variables for that contact                            |
| Contact limit           | 10,000 rows per campaign                                               |
| CSV file size           | Up to 5 MB in the Dashboard                                            |
| Phone number length     | 3–40 characters after upload validation and normalization              |
| Contact name length     | Up to 40 characters                                                    |

The Dashboard normalizes common phone-number formatting by removing parentheses, spaces, dashes, and single quotation marks. Use E.164 numbers, such as `+14155550100`, to keep the source data unambiguous.

> **Note**
>
> Column headers are not renamed or normalized. Variable references are case-sensitive and must match the CSV header exactly. Prefer lowercase `snake_case` headers such as `renewal_date`.

### Reference headers that contain spaces

Use Liquid bracket notation when a column header contains a space or other characters that cannot be used in a simple variable name. For this CSV:

```csv
number,name,appointment date
+14155550100,Ada,August 21
```

Reference the value as:

```text
Remind {{name}} about their appointment on {{ ["appointment date"] }}.
```

Do not use `{{appointment date}}`. Liquid interprets that expression as the variable `appointment`, not the `appointment date` column. When you control the CSV format, use a header such as `appointment_date` so you can reference it as `{{appointment_date}}`.

The contact preview intentionally displays only **Name** and **Phone number**. Additional columns are still passed to the assistant or squad as variables.

### Variable-value size

The API validates the serialized variable values for a contact as one object. Keep the combined variable data below 100,000 characters per contact. The Dashboard does not otherwise impose a separate character limit on each additional CSV cell.

## Add contacts manually

On the **Contacts** step, select **Manual add** instead of **CSV upload** to enter contacts without preparing a file. Manual contacts support a phone number and name. Use a CSV when you need additional per-contact variables or have a larger list.

## Next steps

#### [Set dynamic variables](/assistants/dynamic-variables)

Use contact values throughout assistant messages, prompts, and tools.

#### [Schedule the campaign](/outbound-campaigns/scheduling-and-lifecycle)

Control when contacts are dispatched and how campaign capacity is shared.