N

Runs in your browser · nothing is uploaded

Remove Duplicates from CSV

Remove duplicates from a CSV — and empty rows — by the columns you choose, see exactly what was removed and why, and download a clean file without your data leaving the browser.

Paste, drop a file here or open one. It's read in your browser and never uploaded.

Duplicates

Rows match when these columns match (none ticked = the whole row)

Add some data to pick columns.

Result

Paste CSV or open a file — or try the example.

How duplicates are found

  1. The file is parsed as CSV — quoted commas and line breaks stay inside their cell.
  2. If you chose trimming, spaces are trimmed first, so “ Ana ” and “Ana” match.
  3. Each row's key is the values in your chosen columns (or the whole row).
  4. The first — or last — row with each key is kept; the others are listed as removed with the line they duplicate.

Example

Matching on email with “Ignore case”, the rows 00124,BEN@example.com and 00124,ben@example.com are duplicates. Keep first keeps the upper-case one exactly as written; keep last keeps the second. The ID 00124 is never turned into 124.

Frequently asked questions

How do I remove duplicates from a CSV?+

Paste the CSV or open the file, tick the columns that identify a duplicate — an email or customer ID, say — or leave them all unticked to compare whole rows. Choose whether to keep the first or last copy, then download the cleaned file. Removed rows can be downloaded separately with the reason for each.

Will it change my numbers, dates or IDs?+

No. Every value is treated as text, so 00123 stays 00123, long numbers aren't rounded and dates aren't reformatted. Only the options you choose — trimming spaces, removing empty rows and duplicates — change anything.

Does it handle commas and line breaks inside quotes?+

Yes. It uses a full CSV parser, so a quoted field like "Smith, John" or a note spanning two lines stays one cell. If a quote is never closed you'll see a warning.

Can it ignore upper and lower case?+

Yes — choose “Ignore case” and ANA@EXAMPLE.COM matches ana@example.com. The row you keep is written exactly as it was.

Which delimiters work?+

Comma, semicolon, tab and pipe. The delimiter is detected from the first lines, and you can override it. You can also choose the delimiter for the download.

Is my file uploaded?+

No. The CSV is read and cleaned in your browser; nothing is sent anywhere or stored.

Should I keep the first or the last duplicate?+

Keep first suits most lists, such as the original signup. Keep last is handy when newer rows were appended to the end of the file and you want the latest version of each record. Either way, the rows you keep stay in their original order — nothing is sorted.

Why aren't two rows that look the same treated as duplicates?+

Usually there's a hidden difference: a trailing space, different capitalization, or a space inside a value. Choose “Trim ends” or “Trim & collapse” and “Ignore case”, and compare only the columns that matter. Accented letters typed in different Unicode forms are already treated as the same.

What does “Trim & collapse” do?+

It removes spaces at the start and end of every cell and turns any run of spaces, tabs or line breaks inside a cell into a single space. That also joins multi-line cells into one line, so use “Trim ends” if you need to keep line breaks.

What if my CSV has no header row?+

Untick “First row is a header”. The first row is then treated as data and can be removed as a duplicate, columns are labeled Column 1, Column 2 and so on, and the removed-rows file gets generic column_1, column_2 headings.

What happens to rows with missing or extra columns?+

They're kept as they are, not padded or cut, and the result panel tells you how many rows have a different number of columns from the header. Those rows can still be matched as duplicates.

How big a CSV file can it clean?+

You can open files up to 20 MB. The preview shows the first 200 kept or removed rows, and the downloads include all of them. Very large files take longer on older phones and laptops because everything runs in the browser.