Developer tools

CSV Dedupe Rows

Remove repeated records. Keep the details.

Processed in your browser

1. Input CSV data

Choose a UTF-8 CSV file or paste CSV below. Contents stay in this tab.

Enable JavaScript to remove duplicates.

2. Duplicate criteria

Comparison options never edit retained fields. Surviving rows stay in their original order.

How it works

  1. Add your data

    Choose a UTF-8 file or paste text. It is read at once; typed edits use Read columns. Changing the delimiter or header setting re-reads it.

  2. Choose a match

    Compare whole rows or check the columns that identify a record. Keep the first or last occurrence, then choose Remove duplicates.

  3. Use the result

    Check the counts, review which records were removed and which kept record each matched, then choose Download CSV or Copy CSV.

Comparison and order

By default, field strings must match exactly, including case and whitespace. Whole rows must also have the same number of fields. A missing field is different from an empty field, even when matching selected columns.

Trim removes leading and trailing JavaScript whitespace for comparison only. Ignore case uses JavaScript Unicode lowercase, without locale-specific matching or Unicode normalization: ß does not match SS, Turkish İ does not match i, and a precomposed é does not match e followed by a combining accent. Number-like text is never parsed, so 1, 1.0 and 01 stay different. Quoted and unquoted forms of the same text are equal. First/last means the first/last matching data record; the header is never deduplicated. The surviving records keep their original relative order.

Field values and export

Leading zeros, large numbers, quoted delimiters and quoted newlines stay strings. Duplicate and blank headers remain positional. Short rows retain their field counts. The preview labels empty and missing cells separately; these labels and preview row numbers are not exported.

Output uses UTF-8, the detected or selected delimiter, quoted fields, doubled inner quotes and CRLF record separators. Original quoting and record separators are normalized; an initial BOM is omitted. No formula prefixes are added. Spreadsheets may interpret formulas, dates or numbers: import columns as text when needed.

Frequently asked questions

Which files can I use?

UTF-8 CSV or TSV with double-quoted fields and doubled inner quotes. Auto-detect tries comma, semicolon, tab and pipe; choose explicitly if the detected columns look wrong. Extensions and MIME types do not determine parsing. Malformed quoted fields (the error names the record), invalid UTF-8 and UTF-16 files produce errors rather than partial results.

What about empty data or blank rows?

Empty input has no records. Header-only input has no data rows but keeps the header in output. Blank records participate in matching. A final record separator ends its preceding record without adding another; intentional blank records before it remain candidates.

Is there a row or file limit?

There is no configured row or file limit. Parsing, comparison and export run in your browser, holding data in memory; browser memory or string limits can still cause failure. The kept-records preview shows 25 rows and 8 columns at a time, with navigation to the rest; the removed-records list shows the first 100 removals and 8 columns. Every kept record is copied or downloaded.

Can I repeat, cancel or reset?

Changing the criteria clears stale output; run again and the original input is used. A file stays selected in memory until you type text, load an example, replace it or reset. A replacement file that cannot be read leaves your current file and result in place. Cancel stops processing and keeps the input; choose Read columns to load it again. Reset clears input, options, results and download links. It cannot erase clipboard contents or downloaded files.

Are files uploaded or stored?

No. File reading and processing happen in this tab. File names and contents are never uploaded, logged or persisted by this tool.

Will my values stay unchanged?

Field values remain text, so leading zeros and long numbers are preserved in the resulting CSV.