Remove repeated rows, and name the ones that only looked repeated.
What it's for
Take the repeated rows out of a list — a mailing list, a sign-up sheet, a customer export — and see exactly which rows were treated as the same.
Before you start
Have the spreadsheet open, or the .csv file in a text editor, and know which column makes two rows the same person, such as the email. You paste the rows in; nothing is uploaded.
Set up how the rows are read
In Delimiter, pick Tab if you will copy from Excel or Google Sheets, or Comma for most .csv files. Leave First row is a header ticked if the first row holds the column names.
Choose which copy stays
In Which one to keep, The first keeps the earliest row of each set of repeats and The last keeps the latest — usually the newest, if new rows go at the bottom.
Decide how strict to be
Ignore case treats capitals and small letters alike, and Trim the ends ignores spaces around a value; both start ticked. Tick Collapse runs of spaces too if names may hold a double space.
Paste the rows and pick the column to match on
Paste into the CSV box, replacing the sample. Under Compare on, tick the column that makes two rows the same, such as the email; with none ticked, rows must match in every column.
Remove the duplicates and copy
Press Remove duplicates to bring the result into view — it also updates as you change things. Check the list under it, then press Copy.
Reading the result
If it goes wrong
“Duplicate” is not a fact, it is a decision. Juan Cruz, juan cruz and Juan Cruz are three strings, one person, and possibly three customers, depending on where the file came from.
A tool that compares raw text finds none of them. One that normalises hard merges people who are genuinely different. Neither is right in general, so both are reachable here and the page says which one produced the number.
But the more useful thing is not the count, it is the conflict.
When two rows match on the key and differ outside it — one email, two phone numbers — that is not a duplicate. It is two records about one thing, and keeping the first is a coin toss dressed up as a rule. Every such group is listed by row number, so a person makes the choice.
Nothing is silently dropped. Every removed row is listed under the group it belonged to.
No. There is no upload and no file picker — you paste the rows in and the work happens in your browser, in this site’s own calculation engine. Nothing is transmitted, logged or stored.
Almost always because of how it compared. A trailing space, a capital letter or a second space inside a name makes two rows different text, and by default only the first two of those are ignored. The three switches decide it, and the count changes with them — which is the honest version, because there is no setting that is right for every file.
It declares that two rows with the same email — or the same id, or the same name and city together — are the same row, whatever else differs. That is the powerful setting and the dangerous one: everything outside the key stops being looked at, so a row carrying a phone number nothing else has can be dropped for matching on a column nobody read.
A group of rows that matched on the key and differ somewhere else. Those are not duplicates at all — they are two records about one thing, holding different values, and keeping the first is a coin toss dressed up as a rule. They are listed by row number so you can reconcile them by hand, which is the one job this tool deliberately will not do for you.
Because a deduplicator that answers only with a smaller file gives you no way to check it did the right thing, and the failure you care about — a row that should have stayed — leaves no trace. Every group is listed with its row numbers and which one survived, so the output can be audited rather than trusted.
Only when the rows differ, which is exactly when the page marks them as a conflict. For identical rows it makes no difference at all. When it does matter, the last is usually the more recent record and the first is usually the original one — but the file cannot tell you which, so the tool does not pretend to know.
No. The values are written back exactly as they were read, including the spaces and the capitals the comparison ignored. Quoting is re-applied where RFC 4180 requires it and dropped where it does not, so a field that was quoted for no reason comes back unquoted — reading the output gives the same values either way.
Because a short or long row is compared as what it is, and it holds a different number of values from every other row, so it can never match one. That is usually a delimiter inside an unquoted field, which shifts everything after it. Those rows are listed so you can fix the quoting first.
Join a key on a comma and ["a,b", "c"] and ["a", "b,c"] become the same key — two different rows reported as duplicates, which for a deduplicator means deleting one of them. This uses a character that cannot occur inside a field.
Important
Nothing you paste is transmitted or stored. Choosing key columns means everything outside them is ignored when deciding what counts as the same row, so a row holding real data can be dropped — read the conflicts before relying on the result. Nothing you type here is sent to our servers — the calculation runs entirely in your browser.