Theme

CSV import

Bring in a list from anywhere. Mimeo takes any CSV with a header row — there's no required column order and no required template, because you do the mapping.

Mapping columns

After you upload, Mimeo shows every column in your file and asks what each one is. Your choices per column:

Map to Behavior
A core field Email, first name, or last name. Email is the match key — it's lowercased, and an existing person with that address is updated rather than duplicated.
A custom field Any field you've declared under Settings → Fields. If the field doesn't exist yet, you can create it right here during mapping instead of backing out to Settings first.
Tags The cell's value becomes one or more tags. Multi-value cells are split on |, ,, and ;, so customer, pro; beta becomes three tags.
Unsubscribed Marks the person as suppressed. A truthy value works, and so does a timestamp — if you give a timestamp, it's preserved as the unsubscribe date rather than being reset to today.
Skip Ignore this column entirely.

Import posture: fill or overwrite

For people who already exist, you choose how the incoming data is applied:

The posture applies to field values. Tags are additive either way — an import never strips tags a person already has.

Static tags

Separate from any tag column, you can apply a set of tags to every row in the import. This is how you keep provenance: tagging an import from-mailchimp-2026-07 means you can always find, filter, and if necessary undo that batch later.

Importing as already unsubscribed

There's a single switch that marks the entire import as already-unsubscribed, regardless of any column mapping.

This is the one to reach for when migrating off another platform. Export your old tool's suppression list, import it with this on, and those addresses arrive in Mimeo already opted out. Do this before importing your active list, and nobody who unsubscribed from your old tool gets mail from your new one.

Preview before you commit

Mimeo shows you a preview of how your mapping resolves against real rows from your file before anything is written. Check that names landed in name columns, that your tag delimiter split the way you expected, and that the unsubscribe column was read correctly. Then commit.

The import report

After the import runs you get a report with:

Row errors are per-row, not fatal: a handful of bad addresses doesn't stop the rest of the file from importing. Fix those rows in a small follow-up CSV rather than re-running the whole thing.