Import contacts from a CSV
Bring a list over, and understand what the importer changes.
Import from Contacts → Import. Any CSV works — you map its columns to fields on the next screen, so headers don’t need to match anything.
How it works
Upload the file
We read the headers and guess the mapping. Check it — especially if your headers are unhelpful.
Map the columns
Email is the only one that matters. Everything else is optional, and anything you don’t map is ignored.
Choose a list (optional)
Add everyone to a list as they import, or let a Lists column in the file do it per row.
Import
Valid rows land immediately. Rejected rows come back as a CSV with a reason on each one.
What happens to contacts you already have
Contacts are matched on email. An address we already hold is updated rather than duplicated — but read this before re-importing a partial file:
- Standard fields are replaced. If your file has no phone column, existing phone numbers are cleared. The file is treated as the truth, not as a patch.
- Custom fields are merged. Fields your file doesn’t mention are left alone. A blank cell for a field you did map clears that one.
- Status only changes if the file says so. No status column means nobody’s status moves — so you can’t accidentally resubscribe people who opted out.
A file of just emails will wipe names
Importing a cut-down file over an existing audience is the usual way people lose data. If you only want to add people to a list, import the columns you want to keep — or use a segment and bulk actions instead.
Why fewer rows import than the file contains
Every address is checked twice before it lands:
- Is it a well-formed address? Typos, stray spaces, two addresses in one cell.
- Can that domain receive mail at all? We look the domain up.
gmial.comand long-dead company domains fail here.
Addresses that have already hard-bounced anywhere on the platform are refused too. That’s a fact about the address, not about you — and mailing it again would cost your delivery.
Nothing is silently dropped: the rejected rows come back as a CSV with your original columns plus a Reason column. Fix and re-import if the failures were typos.
Grouping people as they import
Map a column to Lists and each contact joins the lists named in their own row. Lists that don’t exist are created. Separate several with ;, , or |.
That’s what makes a migration arrive already grouped rather than as one flat pile — and our own export writes the same column, so export → edit → re-import keeps your grouping.
A cap on new lists
If a file would create more than a hundred lists, we import the contacts and ignore the list column. That’s almost always a column mapped to the wrong field — point it at “Notes” and every distinct value becomes a list. The wizard shows the count before you commit.
When a column looks wrong
We look at the data, not just the header, and warn if a column doesn’t look like what it’s mapped to — phone numbers in First name, dates in Email. Auto-matching goes by header, so it fails exactly where headers are unhelpful, and nothing downstream can catch it: every value is a valid string, so “Hi 555-0142,” would ship to thousands of inboxes.
The warning is advice, never a block. Real contact data is messy — companies in a name column, “N/A”, international phone formats — and a false alarm that stopped a legitimate import would cost more than the mistake it prevents.
Common issues
Far fewer contacts imported than expected
Download the rejected-rows CSV and read the Reason column. Dead domains are the usual cause on an old list.
Names disappeared from existing contacts
The file didn’t include them. Standard fields are replaced, not merged — re-import with the full columns to restore them.
Everyone imported as unsubscribed
Your file has a status column mapped, with values we read as not subscribed. Remove the mapping and re-import; without it, contacts default to subscribed.
Hundreds of junk lists appeared
A column was mapped to Lists that shouldn’t have been. Delete them from Lists — deleting a list never deletes contacts.
FAQs
Will importing send anyone an email?+
No, unless you deliberately tick the box that treats the import as new signups — and that asks you to type YES and shows how many people it would email. Off by default, because importing an old list and mailing everyone a welcome is unrecallable.
Can I import the same file twice?+
Yes. Matching is on email, so the second run updates rather than duplicates, and list memberships it already created are left alone.
What about people who unsubscribed?+
They stay unsubscribed. A file can’t resubscribe someone unless it explicitly carries a status column saying so — and doing that to people who opted out is both a delivery problem and a legal one.
Is there a size limit?+
Nothing you’re likely to hit. Large files take longer because every domain is checked, so give a big import a minute.

