Deduplicate & Merge

Strip the repeated rows out of a spreadsheet so each record appears only once. Match on the whole row, or only on the columns that really identify someone — an email address, say — so two entries that differ by a typo elsewhere still count as one.

How to use it

Nothing is deleted unless you ask for it: the tool can just as easily list the rows that repeat and leave the file alone, so you look before anything goes.

  1. Paste or open your CSV The first row is treated as column names unless you untick that box.
  2. Choose what makes a row a duplicate Leave the box blank to compare whole rows, or name the columns that identify a record, like email.
  3. Choose which copy to keep The first or the last. On a file sorted by date, the last is the most recent version.
Full instructions

CSV in

Result

In depth

How to find and remove duplicate rows in a CSV file

Duplicate rows creep into data files in dozens of ways. A form gets submitted twice, two systems export the same customers, or somebody pastes the same block into a spreadsheet a second time. This article explains every control on the deduplication tool, walks through a realistic example with a mailing list, and covers the traps that cause people to miss duplicates or delete the wrong copy.

Screenshot: Finding and removing repeated rows
Finding and removing repeated rows as it appears when the page opens.

Where duplicate rows come from

The most common source is merging lists. You have customers in a CRM and customers in a mailing platform. Export both, paste them into one file, and every person who appears in both systems is now listed twice. The same thing happens when you combine monthly exports without checking whether last month's records are still in this month's file.

Form double-submits are the second big source. A user clicks the submit button, the page is slow, they click again, and two identical rows arrive. Payment gateways guard against this, but contact forms and surveys usually do not.

Less obvious is the almost-duplicate. The same customer signed up with a capital letter in their email one time and lowercase the next. A phone number appears with a space in one record and without it in another. These are the same person, but comparing entire rows treats them as different.

Getting your data in

Paste your CSV into the left-hand box labelled CSV in. You can also press Open a file to load a CSV or TSV file from your device. The tool reads the file locally and does not upload it anywhere.

If the first row contains column names like email, name, city, leave the First row is the column names tick box checked. If your file starts straight with data and has no header, untick it so the first row is treated as a record rather than as labels.

Choosing what makes a row a duplicate

The field labelled Match on which columns is the most important control on the page. Leave it blank and the tool compares every field in the row. Two rows must be identical across every single column to count as duplicates.

That sounds sensible but rarely finds anything. The same person entered twice almost never produces two perfectly identical rows. One record has a middle name, the other does not. One has a signup date of January, the other February. Comparing everything treats them as different people.

The fix is to type the column name that actually identifies a person. For a mailing list, that is usually email. Type email into the box and the tool ignores every other column when deciding whether two rows match. The rest of the data is still carried through to the output, but it is not part of the comparison.

You can name more than one column, separated by commas. Typing email,phone would require both to match before two rows count as duplicates.

The three check boxes that change what counts as the same

Ignore extra spaces is on by default. It strips leading and trailing whitespace from each field before comparing. This catches records where one system padded a name with a trailing space. Without it, those two records look different even though a human would call them identical.

Upper and lower case are different is off by default. That means sam@example.com and SAM@Example.com count as the same address, which is how email actually works. Turn it on only if your data genuinely uses case to distinguish records, which is rare outside of programming contexts.

First row is the column names tells the tool whether to treat row one as headers or as data. Getting this wrong either loses your header row or tries to match on column labels instead of real records.

Keeping the first or the last copy

The dropdown labelled Keep offers two choices: the first of each and the last of each. When your file is sorted by date, the last row for a given person is usually the most recent and therefore the most accurate version.

If your file is not sorted, or if the order does not matter, the first is a safe default. The key point is that the tool always keeps exactly one row per unique matching key. It never drops both copies.

Seeing the duplicates before removing them

The Give me dropdown has three options. The default, the rows with duplicates removed, gives you the clean output. But it is often worth switching to only the rows that repeat first. This shows you every row that appeared more than once, so you can inspect them before deleting anything.

The third option, only the rows that appear once, gives you the opposite: everything that was already unique. This is useful when you want to find records that exist in one list but not another. Paste the combined file, match on the identifying column, and the unique rows are the ones with no counterpart.

A worked example with a mailing list

You have a CSV with four columns: name, email, city, signup_date. It has 500 rows, but you suspect duplicates from a form that was submitted twice by several people.

Paste the CSV. Type email into Match on which columns. Leave Keep on the first of each. Leave Ignore extra spaces on. The status bar updates immediately: it might report 500 rows in, 487 out, 13 duplicates found.

Switch Give me to only the rows that repeat. You see 26 rows - the 13 duplicate pairs. Scan the list to make sure they really are duplicates and not two different people who share an email address by accident. Switch back to the rows with duplicates removed, and press Download to save the clean version.

If instead you want the most recent signup for each person, change Keep to the last of each. The file must be sorted by signup_date for this to work as you expect.

Using column numbers instead of names

If your file has no header row, you cannot type email because there is no column called that. Instead, type the column number. The first column is 1, the second is 2, and so on. You can combine them with commas, like 1,3 to match on the first and third columns together.

Untick First row is the column names first, so the tool knows it is looking at data rather than labels.

Mistakes that cause the tool to miss duplicates

The most common mistake is comparing whole rows when you should compare on a key column. Two records for the same person with different signup dates look completely different when you compare everything. Always think about which columns define a unique record and type those column names into the Match on which columns box.

Leaving case sensitivity on when your data has mixed capitalisation is another trap. If one record says London and another says london, they will not match unless you leave the case box unticked. Email addresses are a classic example because people type them with random capitalisation and the mail server treats them all the same.

Forgetting to trim spaces catches people too. A field that looks empty might contain a single space, and a name with a trailing space will not match the same name without one. Leave Ignore extra spaces ticked unless you have a specific reason not to.

When this tool is not the right choice

If your duplicates differ on the key column itself - one record says john@gmail.com and the other says j.smith@company.com for the same person - no column comparison will find them. You need a fuzzy matching tool or manual review for that kind of deduplication.

Very large files with millions of rows may push against the browser's memory limit. For those, a command line tool or a database query is more practical. Files of tens of megabytes and several hundred thousand rows are handled comfortably.

Privacy and how your data is handled

Everything runs inside your browser on your own device. Your CSV is never sent to any server. You can disconnect from the internet after the page loads and the tool still works exactly the same way. This matters when your data is a client list, a staff directory, or anything else you would not want to paste into an online service.

Help

Finding and removing repeated rows

Nothing is deleted unless you ask for it: the tool can just as easily list the rows that repeat and leave the file alone, so you look before anything goes. When you do ask, one row from each set of matches is kept, and the result comes back in the shape you pasted it in, ready to go back into the spreadsheet.

Paste or open your CSV

The first row is treated as column names unless you untick that box.

Choose what makes a row a duplicate

Leave the box blank to compare whole rows, or name the columns that identify a record, like email.

Choose which copy to keep

The first or the last. On a file sorted by date, the last is the most recent version.

Copy or download the result

The counts underneath show how many duplicates were found.

Why matching on the whole row usually finds nothing

The same customer entered twice rarely produces two identical rows. One record has a middle initial, another has a different signup date, a third has a phone number in a slightly different format. Comparing entire rows treats all of those as different people, and reports no duplicates at all on a file that is obviously full of them. The fix is to match only on the columns that actually identify a record: an email address, an order number, a national insurance number. Type those column names into the box, separated by commas, and everything else is ignored during comparison but still carried through to the output. The two tick boxes matter here too. Ignoring extra spaces catches records where one system padded a field, and leaving case insensitive catches the same email address written with different capitals, which is extremely common and which email systems treat as the same address anyway.

Good to know

Match on email, not on everything

For a mailing list, type email into the match box. That is what makes two records the same person.

Use column numbers if there is no header

Type 1 or 1,3 to match on the first, or the first and third, columns.

Look before you delete

Choose only the rows that repeat first, to see what would be merged, before running the removal.

Keep the last for updated records

If your file is in date order, the later row is usually the more accurate one.

Common questions

How do I remove duplicate rows from a CSV?
Paste it in and leave the settings alone to compare whole rows, or type a column name like email to match on that instead.
How do I match on just one column?
Type the column name into the match box. Several columns can be given, separated by commas.
Can I see the duplicates instead of removing them?
Yes. Change Give me to only the rows that repeat.
Does it treat SAM@example.com and sam@example.com as the same?
Yes by default, which matches how email actually works. Tick the case box if you need them treated separately.
Is my file uploaded anywhere?
No. It is read by your browser and stays on your device. You can disconnect from the internet after the page loads and it still works.
Is there a size limit?
None that we set. The limit is what your browser can hold in memory, which in practice means files of tens of megabytes are fine.