# Import contacts from a CSV

> Upload a spreadsheet and let the importer match its columns to contact fields.

_Source: https://hexafloww.com/docs/contacts/import-contacts-csv_

---

The fastest way to bring in a lot of contacts is a spreadsheet upload at `/admin/clients/import`. `.csv`, `.xlsx`, and `.xls` all work. Large files import in the background, so you can keep working.

> [!TIP]
> **Before you start**
> - You need the **Admin** or **Marketing Manager** role.
> - The first row must be a header row — the importer matches columns by name, so the headers have to match the names below.
> - Download the sample template from the import page if you want a starting point.

## Prepare your file

Standard columns the importer recognizes:

- `email` — used to match and de-duplicate contacts. Required if there's no `phone`.
- `phone` — required if there's no `email`.
- `name`, `company`, `location`, `occupation`, `gender` (`Male` / `Female` / `Other`), `dob` (`YYYY-MM-DD`).
- `segments` — comma-separated segment names, e.g. `Newsletter, VIP, Tech`. Missing segments are created.
- `wa_opt_in` — a truthy value (`yes` / `true` / `1`) turns on the contact's WhatsApp consent.
- Any other column is stored as a custom field you can use in templates and segment rules.

## Import

1. **Open Contacts → Import.** Go to `/admin/clients/import`.
2. **Add the file.** Drag it onto the drop zone or click to browse.

   ![Import page with the drag-and-drop upload zone](https://hexafloww.com/docs/contacts/import.webp)
3. **Click Import Clients.** The upload starts a background job right away — there's no separate column-mapping step, so it's the header names that matter. A live progress bar shows the count. You can leave the page; the clients list shows an "Importing clients…" banner that links back here.

## After import

- The summary shows contacts **created** and **updated**, segments **created** and **assigned**, and any skipped rows grouped by reason.
- A contact that already exists (matched by email or phone) is updated, not duplicated.
- Check [Find & merge duplicates](https://hexafloww.com/docs/contacts/duplicates.md) if you imported from more than one source.

> [!WARNING]
> Only import contacts who have agreed to hear from you. A bad list hurts email deliverability and WhatsApp quality — see [Consent, opt-in & the suppression list](https://hexafloww.com/docs/contacts/consent-suppression.md).

## Common problems

- **Rows skipped for no identifier** — those rows had neither a valid `email` nor a valid `phone`. Check the header names match.
- **Everything skipped** — the header row doesn't match the expected names, so no `email` / `phone` column was found.
- **Segment not applied** — the `segments` cell must contain segment names, separated by commas.
