Mailerflow Start free
Blog › Email List Growth & Segmentation › Subscriber Management

How to Import Contacts Into an Email Platform (Without Wrecking Your List)

Published October 28, 2026 · 9 min read

Illustration for How to Import Contacts Into an Email Platform (Without Wrecking Your List)

Importing contacts into an email platform means turning a flat file into structured, mailable records: contacts, custom fields, tags and a consent status you can prove. The mechanics take ten minutes; the decisions around field types, duplicates and consent are what determine whether your first campaign lands in inboxes or gets you a deliverability problem. This guide walks through the whole process with the exact settings, a worked example, and the checks that tell you it actually worked.

What you'll set up and what you need before you start

Before you touch an upload button, get these in place:

  • A source file. A CSV export from your CRM, a spreadsheet, an event or webinar tool, or your previous email platform. One contact per row.
  • One column per attribute. No merged cells, no formulas, no multi-value cells like newsletter; webinar; product. If a cell holds three values, split it into three columns or three tags.
  • A stable unique identifier. In practice, the email address. Everything else can change; that one shouldn't.
  • A consent column or a documented lawful basis. A column like consent_checkbox, opt_in_date, or signup_source is ideal. If you don't have one, write down why you're allowed to email these people before you import them.
  • A clean file format. UTF-8 encoding, comma delimiter, a header row, dates in ISO format (2026-03-14). Excel's default export can mangle both encoding and dates, so check the file in a plain text editor before uploading.

An import does three separate things, and it helps to think of them separately: it creates contacts, it creates or updates custom fields, and it applies tags. Tags are the part that carries your consent and source information forward, so plan them before you start rather than retrofitting them later.

Consent is the step people skip and later regret. If some contacts came through a signup form with double opt-in and others are being imported from a spreadsheet, those are different consent bases and they should be tagged differently. Mailerflow's signup forms store double opt-in consent records, so form-collected contacts already carry evidence; imported contacts need their own trail. Keep the two groups distinguishable rather than blending them into one undifferentiated list.

Suppression lists deserve their own treatment. Hard bounces, spam complaints and unsubscribes should be imported into your suppression list, not as ordinary contacts — or excluded from the import entirely. Mailerflow automatically suppresses bounces and complaints going forward, but historical suppressions from your previous platform need to come across deliberately.

Step-by-step: importing your CSV

  1. Export and clean the source file. Open the CSV in a spreadsheet and remove blank rows, trailing empty columns and any test records. Convert dates to ISO format and strip leading/trailing spaces from email addresses — " alice@example.com" will fail validation or create a contact you can never match again.

  2. Write your field map before uploading. On paper or in a scratch file, list every source column and its destination: email → Email, first_name → First name, company → custom field company. Deciding this in advance stops you from mapping columns on instinct at 6pm.

  3. Create custom fields first. If your file has plan_type, signup_source or last_purchase_date, create those fields before the import. Choose the type carefully — text, number, date or boolean — because a date column mapped to a text field, or TRUE/FALSE mapped to text, will import without error and quietly break every segment that relies on it.

  4. Upload the CSV and check the preview. The platform reads your header row and shows a preview of the first rows. Confirm the delimiter was detected correctly and that no column has shifted by one — a classic symptom of a stray comma inside an unquoted field.

  5. Map each column. Assign every column to a field, or explicitly set it to ignore. Map the email column yourself even if it looks obvious; auto-detection is a convenience, not a guarantee. Columns you ignore are simply dropped.

  6. Choose duplicate handling. You'll usually get three options: skip existing, update existing, or create anyway. Skip is right when the file is a pure acquisition list and existing contacts already have better data. Update existing is right when the file carries new information — a tag, an attendance flag, a purchase date. Create anyway is almost never right for email contacts.

  7. Apply tags. At minimum, tag the source and the consent basis: import-2026-newsletter, consent-webinar-optin, source-crm-export. Tags are how you'll build segments later without re-reading the original file.

  8. Decide whether to send anything. Most imports should be silent. If you do want a confirmation or welcome email, make sure it only goes to contacts whose consent covers it — not to the whole file.

  9. Run the import and read the results summary. You should see counts for rows processed, contacts created, contacts updated, duplicates handled and rows rejected. Save that summary; it's your audit trail.

Mailerflow's CSV import runs duplicate and validity checks and supports custom fields and tags, and eligible paid plans include free migration help covering contacts, suppression lists, templates and core automations if you'd rather have someone walk the first import with you.

A worked example: 4,200 webinar registrants

This is an illustrative scenario, not a customer story. A marketer exports 4,200 webinar registrants from a webinar platform. The raw CSV looks like this:

email,first_name,last_name,company,registered_at,attended,consent_checkbox,utm_source
alice@example.com,Alice,Nguyen,Northwind,2026-02-11,TRUE,TRUE,linkedin
ben@example.com,Ben,Okafor,Contoso,2026-02-11,FALSE,FALSE,newsletter
...

The field map:

Source column Destination Type
email Email (required) email
first_name First name text
last_name Last name text
company company text (custom)
registered_at webinar_registered_at date (custom)
attended webinar_attended boolean (custom)
consent_checkbox used to decide tag, not stored as a field —
utm_source acquisition_source text (custom)

Duplicates. 380 of the 4,200 already exist as contacts, collected earlier through a newsletter form. The right choice here is update existing: those contacts get the new fields and the new tag, and you avoid a duplicate record that splits engagement history across two profiles.

Consent split. Rows where consent_checkbox is TRUE get the tag consent-webinar-optin and are mailable. Rows where it's FALSE get no-marketing-consent — they're still imported, because the relationship is real and you may need the record, but they're excluded from campaigns. In plain language, the segment you'd mail is: contacts tagged consent-webinar-optin and not tagged no-marketing-consent. Mailerflow's dynamic segments can be built on fields, tags, engagement, events and website behavior, and if you'd rather describe the audience in a sentence than click through conditions, AI segmentation turns a plain-language description into a segment.

How to verify the import actually worked

A green success message is not verification. Run these five checks:

  1. Reconcile the counts. Source rows, minus duplicates skipped, minus invalid rows, should equal contacts created plus contacts updated. If the numbers don't add up, find out why before you send anything.

  2. Spot-check specific contacts. Search three to five email addresses from the file and open each profile. Confirm every field landed in the right place — especially dates and booleans, which fail silently rather than throwing an error.

  3. Check field types, not just values. A date that displays as text still looks like a date until you try to segment on "registered in the last 30 days" and get nothing.

  4. Build the segment you intend to mail. If you expected 3,400 mailable contacts and the segment returns 4,200, your consent filter isn't working. This is the single most valuable check in the whole process.

  5. Send a test campaign to an internal seed list. Confirm merge tags render — that first_name shows a name, not a blank or the word undefined.

Keep the original CSV and the import summary. Consent disputes are almost always about evidence rather than intent, and a dated file plus a row count is evidence.

Common mistakes and how to fix them

Importing a purchased or scraped list. Don't. It damages sender reputation and you have no consent record to fall back on. There is no fix after the fact — only a rebuild.

Mixing consent bases under one tag. If webinar opt-ins and CRM imports share a tag, you can't mail one without the other. Use one tag per source and per basis, and combine them in segments instead.

Letting the platform guess field types. Set types before the import. A boolean stored as text will break every conditional in your automations.

Importing unsubscribes and bounces as normal contacts. They belong in the suppression list. Mailerflow suppresses bounces and complaints automatically going forward, but historical suppressions need to be loaded deliberately.

Leaving the email column unmapped or using it as a display name. The email field is the identity of the record. Map it explicitly and never overwrite it with a label.

Re-importing the same file twice with no duplicate handling. You'll double your list and split engagement history. Use update existing plus a dated source tag like import-2026-03-webinar so you can spot a repeat run.

Assuming a clean import means a clean send. Newly imported addresses are unfamiliar to inbox providers. Mailerflow supports own-domain sending with guided DKIM, SPF and DMARC setup, automatic verification and warm-up limits — use them rather than blasting 4,200 cold addresses on day one.

Forgetting your GDPR obligations for EU contacts. You need a lawful basis, a way to export and erase data, and a retention policy. Mailerflow provides data export, erasure, consent logs and configurable retention, with data hosted in Europe. This is operational support, not legal advice — check your own obligations with a qualified advisor.

Next steps after your first import

Three things worth doing in the week after a successful import:

Build one segment per consent basis, so "mailable" is a property of the segment rather than something you remember to filter manually. Set up a welcome automation for newly imported contacts who are mailable — Mailerflow automations can trigger on signups, events, dates, inactivity and website behavior, so an imported webinar_registered_at date can drive a follow-up sequence without any manual sending. And add a signup form so future contacts arrive with consent records attached instead of needing another import; Mailerflow's embeddable forms support double opt-in and consent records.

This article is the pillar of the Imports and Data cluster. Supporting pieces on deduplicating contacts, cleaning a messy CSV, migrating from another platform and managing suppression lists will be linked here as they publish. If you want the full picture of what the platform does with the data once it's in, the feature overview is the place to start.

The practical takeaway: treat consent and field types as part of the import, not as cleanup afterwards.

FAQ

Can I import contacts without consent? It depends on your jurisdiction and your relationship with those people. Some regimes allow legitimate interest for existing customers under conditions; others require opt-in. The safest approach is to import contacts without marketing consent but tag them as non-mailable, then run a re-permission campaign only where the rules allow it. This isn't legal advice — confirm your position with a qualified advisor.

What happens if I import the same file twice? With update existing selected, the second run updates the same records and re-applies the tags, so you get no duplicates. With create anyway, you get two records per person and split engagement history. A dated source tag makes a repeat run obvious in your results summary.

How do I import unsubscribes and bounces? Load them into your suppression list rather than as ordinary contacts. If your platform supports a dedicated suppression import, use it; otherwise import them as contacts tagged suppressed and exclude that tag from every segment. Mailerflow handles bounces and complaints automatically from the point of import onward.

What file formats work besides CSV? CSV is the documented path and the one worth standardising on. Some platforms accept XLSX or JSON, but support varies and changes — check the official documentation for your platform before building a workflow around another format.

Will imported contacts receive a welcome email automatically? No. An import creates records; it doesn't trigger sends unless you configure an automation or a confirmation email as part of the import. That's usually the right default, because it forces you to decide who is genuinely mailable before anything goes out.


Add an embeddable signup form with double opt-in and build dynamic segments in Mailerflow — start free.