How to remove duplicate emails from an excel mailing list before sending
- Step 1Export your list — Export the audience from your platform as
.xlsxor.csv— Mailchimp's ZIP of four status CSVs, a Klaviyo list export, a Kit export, or a CRM dump. - Step 2Drop it onto the deduplicator — The Excel deduplicator opens the CSV/Excel deduplicator workspace. Drop the file; the header row is parsed locally so emails never leave your browser.
- Step 3Pick the Email column — Select the column holding email addresses as the unique key. If your export has both
EmailandEmail Address, choose the one your ESP imports on. - Step 4Leave case-insensitive on — Keep
Case-sensitive keysunchecked — email addresses are case-insensitive on the domain side, and this matches what Mailchimp does on re-import. - Step 5Remove duplicates — Run it. The summary shows how many duplicate addresses were removed and how many blank-email rows were kept — cross-check against your platform's contact count.
- Step 6Import the clean file — Download and import directly into Mailchimp, Klaviyo, Brevo, or Constant Contact. The row count now matches the unique-contact count.
Deduplicator controls for an email list
Only two controls exist; for email lists the defaults are exactly what you want. No dedup-mode dropdown or multi-column key exists — those are not part of this tool.
| Control / behaviour | Type | Default | Effect on email lists |
|---|---|---|---|
| Unique key column | Dropdown of the header row; you pick exactly one column | First column | Two rows are duplicates when this one column matches |
| Case-sensitive keys | Checkbox | Off (case-insensitive) | Off folds ABC = abc; on keeps them distinct |
| Whitespace handling | Always on (not a toggle) | Always trims the key before compare | x matches x`; output keeps the original spacing |
| Which row survives | Fixed behaviour | First occurrence kept | Later duplicates are dropped; order is preserved |
| Empty / blank keys | Fixed behaviour | Always kept | Blank-key rows are never collapsed into one |
How each ESP treats the duplicates you remove here
Information current as of mid-2026. Deduping before import keeps your row count predictable and avoids surprise merges.
| Platform | Native duplicate handling | Why pre-dedup helps |
|---|---|---|
| Mailchimp | Silently merges case-different duplicates on import (reports 'updated' not 'added') | Your uploaded count matches the contacts-added count |
| Klaviyo | Skips rows with whitespace in the email as 'invalid format' | Trim-before-compare removes the trailing-space duplicate first |
| Brevo | Treats unique emails as one contact; duplicates overwrite | Avoids overwriting a good row with a stale duplicate |
| Constant Contact | Writes one row per (contact, list) — multi-list contacts repeat | Dedup on Email yields one row per person |
| Kit (ConvertKit) | Merges on email, last write wins on conflicts | Keeps the first (intended) record instead of last |
Tier limits for Excel deduplication
Real per-file limits applied when you drop an .xlsx onto the Excel hub. Row count is the parsed first-sheet body, not bytes.
| Tier | Max file size | Max rows | Files at once |
|---|---|---|---|
| Free | 5 MB | 10,000 | 1 |
| Pro | 50 MB | 100,000 | 5 |
| Pro-media | 200 MB | 500,000 | 20 |
| Developer | 500 MB | unlimited | unlimited |
Cookbook
Real before/after rows from subscriber exports. Emails anonymised; the dedup behaviour is exactly what the tool does.
Case-different signups collapse to one subscriber
The same person signed up on desktop (Chrome capitalised the address) and on mobile (lowercase). Two rows, one inbox — they'd get every campaign twice. Default case-insensitive keying fixes it.
Input (key column = Email): Email,First Name John.Smith@Gmail.com,John john.smith@gmail.com,John lee@x.com,Lee Output (first kept): Email,First Name John.Smith@Gmail.com,John lee@x.com,Lee -> 1 duplicate removed
Trailing space from mobile autocomplete
Klaviyo's docs skip any email with whitespace as invalid. The trailing space is invisible in the grid but fatal on import — and it also hides a duplicate. The always-on trim collapses it before you import.
Input (key column = Email): Email,Source sue@x.com ,Mobile form sue@x.com,Desktop form Output: Email,Source sue@x.com ,Mobile form -> trim-before-compare matched them; first row kept verbatim
Constant Contact multi-list rows reduced to unique people
Constant Contact writes one row per (contact, list). A subscriber on three lists is three rows. Deduping on Email gives one row per person — their first list is kept.
Input (key column = Email): Email,First Name,List sue@x.com,Sue,Newsletter sue@x.com,Sue,Product sue@x.com,Sue,Beta Output: Email,First Name,List sue@x.com,Sue,Newsletter -> 2 duplicates removed (note: only the first list is kept)
Concatenated Mailchimp ZIP, one clean list
Mailchimp's export ZIP has four status CSVs. After combining them you may have someone listed as both subscribed and unsubscribed (they re-subscribed). Deduping on Email keeps the first occurrence.
Combined input (key column = Email): Email,Status sue@x.com,subscribed jon@x.com,subscribed sue@x.com,unsubscribed Output: Email,Status sue@x.com,subscribed jon@x.com,subscribed -> ordering of the combined file decides which status wins
Blank-email rows kept for review
Some CRM rows have no email (phone-only leads). The tool keeps every blank-email row rather than merging them, so you can decide whether to drop or enrich them.
Input (key column = Email): Email,Name sue@x.com,Sue ,Phone lead sue@x.com,Sue dup ,Phone lead 2 Output: Email,Name sue@x.com,Sue ,Phone lead ,Phone lead 2 -> dup sue removed; both blank-email rows kept
Edge cases and what actually happens
Mailchimp would merge these anyway, silently
Silent mergeMailchimp treats Sue@x.com and sue@x.com as one contact on import and reports '1 contact added' with no warning. Deduping first (default case-insensitive) makes the collision explicit so your uploaded count matches the contacts-added count.
Klaviyo skips whitespace emails as invalid
Klaviyo silent skipKlaviyo's docs skip any email containing whitespace. The always-on trim in this tool removes the trailing space before comparison, collapsing the duplicate; clean the cell content too (the trim affects only the comparison key, not the stored value) before importing to Klaviyo.
The trimmed comparison doesn't rewrite the cell
By designTrim happens on the comparison key only. If your surviving row's email cell still has a trailing space, Klaviyo will still skip it. Run the whitespace trimmer on the column to actually rewrite the cell content before import.
Blank-email rows are not removed
PreservedPhone-only or incomplete rows with no email are kept individually. They appear under empty keys in the summary. Strip them with the empty-row remover if you only want contactable subscribers.
First list / first status wins on multi-row contacts
Order mattersConstant Contact and concatenated Mailchimp exports repeat a contact per list/status. The first occurrence is kept, so sort the file so the row you want to survive is first before deduping.
Two email columns in the export
Pick by positionKlaviyo and some CRMs export both Email and Email Address. The dropdown shows both; pick the one your ESP imports on. The tool keys on the one column you choose, not both.
Only the first worksheet is processed
First sheet onlyIf your .xlsx has separate sheets per segment, only the first is deduplicated. Export a single combined sheet, or merge sheets with the sheet joiner first.
List exceeds the Free row cap
RejectedFree is limited to 10,000 rows / 5 MB. A larger list is blocked; upgrade to Pro (100,000 rows) or Pro-media (500,000) for big audiences.
Output loses XLSX formatting
Values onlyAn XLSX list comes back as a fresh single-sheet, values-only workbook. Conditional formatting, colours, and formulas are dropped — fine for an import file, but keep your styled master copy separately.
Suppression / consent columns are not interpreted
Manual stepThe tool dedups on the key column only; it doesn't read consent_status, opt-in dates, or suppression flags. Handle suppression-list logic in your migration after deduplicating.
Frequently asked questions
Does it deduplicate across multiple email columns?
No — it keys on the single column you pick. If you have both a personal and work email column, run the tool once per column, or merge them into one column first.
Will it remove rows where the email field is empty?
No. Blank-email rows are kept, one each — they are never merged. They appear under empty keys in the summary. Use the empty-row remover to strip them separately.
Does case matter for email matching?
Not by default. User@Domain.com and user@domain.com are treated as duplicates because case-insensitive is the default. Tick Case-sensitive keys only if you have a reason to keep casing distinct.
Does it trim trailing spaces on emails?
It trims the comparison key, so a trailing-space email collapses with its clean twin. But it does not rewrite the surviving cell — if that cell keeps the space, run the whitespace trimmer before importing to Klaviyo.
Which row survives when an email repeats?
The first occurrence in the file. So sort your list so the record you want to keep (newest status, correct name) is on top before deduping.
Can I import the result straight into Mailchimp or Klaviyo?
Yes. Download the deduplicated file and import it. Because case-insensitive dedup matches what Mailchimp does on re-import, your uploaded count will match the contacts-added count.
Is my subscriber list uploaded to a server?
No. Parsing and deduplication run entirely in your browser. Email addresses and names never leave your device — only an anonymous run counter if you're signed in.
How big a list can I clean on the free tier?
Up to 10,000 rows / 5 MB / 1 file. Pro lifts that to 100,000 rows / 50 MB / 5 files; Pro-media to 500,000 rows / 200 MB.
I combined Mailchimp's four status CSVs — will dedup pick the right status?
It keeps the first occurrence, so whichever status row comes first in the combined file wins. Put the status you want (usually 'subscribed') first before deduping.
What about near-duplicate names like 'Acme Inc' vs 'Acme, Inc.'?
This tool needs an exact key match (after trim/case-fold), so those won't collapse. For approximate company-name matching use the fuzzy deduplicator (Pro).
Does it handle the XLSX export or only CSV?
Both. .xlsx, .xls, .ods, and .csv all work. An XLSX gives you a deduplicated .xlsx back; a CSV gives a .csv.
Will it reduce my ESP bill?
Indirectly — removing duplicate addresses lowers your unique subscriber count, and most ESPs bill on that. It also cuts double-sends that drive unsubscribes.
Privacy first
Every JAD Excel tool runs entirely in your browser using SheetJS and ExcelJS. Your spreadsheets, formulas, and data never leave your device — verified by zero outbound network requests during processing.