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

# Import contacts

> Bring your subscribers into Retainful with the CSV import wizard.

Moving from another email platform? Export your contacts there as a CSV file and bring them into Retainful with the import wizard.

## Prepare your file

* Format: **CSV** with a header row (the first row names each column).
* Required column: **email**. Everything else — first name, last name, phone, custom fields — is optional.
* One contact per row.

A minimal file looks like this:

```csv contacts.csv theme={null}
email,first_name,last_name
jane@example.com,Jane,Smith
raj@example.com,Raj,Patel
```

<Warning>
  Only import people who gave you permission to email them. Purchased or scraped lists cause spam complaints, damage your sender reputation, and can violate anti-spam laws like CAN-SPAM and GDPR.
</Warning>

## Run the import

<Steps>
  <Step title="Upload your file">
    Go to **Audience → Imports** and click **Import contacts**, then upload your CSV.
  </Step>

  <Step title="Map your columns">
    Match each column in your file to a Retainful contact field. Unrecognized columns can be mapped to [custom fields](/audience/custom-fields) so no data is lost.
  </Step>

  <Step title="Choose lists">
    Pick which [list](/audience/lists) the imported contacts should join. Creating a dedicated list per import (like "Mailchimp import – June 2026") makes cleanup easy later.
  </Step>

  <Step title="Set subscription status">
    Tell Retainful whether these contacts are subscribed. If they were confirmed subscribers in your previous tool, import them as **Subscribed**. If you're unsure, import as non-subscribed and run a re-permission campaign.
  </Step>
</Steps>

The import runs in the background. **Audience → Imports** shows progress and a summary when it finishes — how many contacts were created, updated, or skipped.

## How duplicates are handled

Contacts are matched by email address. If an imported email already exists in Retainful, the existing contact is **updated** with the new information rather than duplicated.

## Common issues

<AccordionGroup>
  <Accordion title="Rows were skipped">
    Rows with missing or invalid email addresses are skipped. Check the import summary for the count, fix your file, and re-import — already-imported contacts are simply updated.
  </Accordion>

  <Accordion title="Names ended up in the wrong field">
    This is a column-mapping issue. Re-run the import and double-check the mapping step — the wizard previews your data so you can verify before confirming.
  </Accordion>

  <Accordion title="Unsubscribed contacts from my old tool">
    Import them too — but as **Unsubscribed**. That preserves their opt-out so they never accidentally receive marketing from you again.
  </Accordion>
</AccordionGroup>
