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

# Recipients

> Target your campaign audience using users and groups or CSV uploads

Every campaign needs a defined set of recipients. When you create a campaign, you choose a resolution mode that determines how Serval builds the recipient list.

***

## Resolution Modes

### Users & Groups

Pick individual users and/or existing Serval user groups. All members of the selected groups receive the campaign message.

* You can combine individual users and groups in the same campaign. Serval deduplicates recipients who appear in more than one group or are also selected individually.
* Recipients are resolved at the time you run the campaign, so any group membership changes between creation and execution are reflected.
* Template variables like `{{Recipient.FirstName}}`, `{{Recipient.LastName}}`, and `{{Recipient.Email}}` are populated from each user's Serval profile.

### CSV Upload

Upload a CSV file to define a custom recipient list. Use this when your audience doesn't map to existing users and groups, or when you need to include custom data fields in your message.

#### Required columns

| Column  | Description                                          |
| ------- | ---------------------------------------------------- |
| `email` | Recipient's email address (must match a Serval user) |

#### Optional columns

| Column           | Description                                                                                                                                          |
| ---------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- |
| `timezone`       | Recipient's IANA timezone (e.g., `America/New_York`). Required for [local-time scheduling](/sections/documentation/campaigns/scheduling#local-time). |
| Any other column | Becomes a custom template variable in the message editor                                                                                             |

#### How it works

1. Upload your CSV file in the recipients step of the campaign wizard.
2. Serval validates the file and displays a preview with any row-level errors (missing emails, invalid timezones, unrecognized formats).
3. Fix any errors and re-upload, or proceed if validation passes.
4. Recipients are stored when you save the campaign. They don't change if you update the CSV file externally.

#### Custom template variables

All columns become template variables with a `CSV.` prefix. For example, a CSV with columns `email`, `timezone`, `department`, and `office_location` makes `{{CSV.department}}` and `{{CSV.office_location}}` available for personalization in the message editor.

<Note>
  Custom variable names are derived from your CSV column headers exactly as written. Use clear, descriptive headers like `department` or `start_date` so they're easy to identify in the message editor.
</Note>

#### Example CSV

```csv theme={null}
email,timezone,department,manager_name
alice@company.com,America/New_York,Engineering,Jordan Lee
bob@company.com,America/Los_Angeles,Design,Sam Park
carol@company.com,Europe/London,Engineering,Jordan Lee
```

This CSV makes the following template variables available: `{{CSV.department}}` and `{{CSV.manager_name}}`, in addition to the standard variables (`{{Recipient.FirstName}}`, `{{Recipient.LastName}}`, `{{Recipient.FullName}}`, `{{Recipient.Email}}`).
