Remove Duplicates
Deduplicate rows in CSV, TSV, or JSON. Trim spaces, ignore case, sort, and choose which columns define a unique row.
Drop a file or click to browse
or paste data below
How Remove Duplicates works
What counts as a duplicate
By default, two rows are duplicates when every column matches. That is often too strict for real data. A contact list may have the same email with a different spelling of the name, and you usually want one row per email. Pick one or more key columns and only those are compared; the other columns come from whichever row is kept.
Two options make matching tolerant of common inconsistencies. Trim spaces when comparing (on by default) treats " ana@example.com " and "ana@example.com" as the same. Case-insensitive compare treats ANA@Example.com as the same as ana@example.com. These options affect only the comparison, not the values written out.
Which row is kept
Keep first occurrence keeps the earliest row of each group and drops later copies, so the original order is preserved. Keep last occurrence keeps the values from the latest row of each group, placed where the group first appeared. Use it when later rows are newer, such as an export appended to over time, and you want the most recent values.
The result panel shows how many rows were read, how many were removed, and how many remain, so you can sanity-check the numbers before downloading.
Cleanup options in the output
Separate from matching, you can write cleaned values to the result: Trim spaces in output removes leading and trailing whitespace from every cell, and Convert output to lowercase lowercases every cell. That is useful for email lists, but not for names. Remove empty rows drops rows where every cell is blank before deduplicating.
You can also sort the result A to Z or Z to A by a chosen column, or by the first key column when set to Auto. Input can be CSV, TSV, or a JSON array of objects, and the result is written back in the same format.
Example
The copy with surrounding spaces is removed because trimming is on. The uppercase copy stays until you turn on case-insensitive compare.
email,name
ana@example.com,Ana
ana@example.com ,Ana
ANA@example.com,Ana
raj@example.com,Rajemail,name
ana@example.com,Ana
ANA@example.com,Ana
raj@example.com,RajHow to use Remove Duplicates
- 1
Choose CSV, TSV, or JSON, then paste data or drop a file.
- 2
Select key columns, or leave them empty to compare whole rows.
- 3
Set trimming, case, keep first or last, and optional sorting.
- 4
Check the removed-row count, then copy or download the result.
When to use it
Mailing and CRM lists
Merge exports from several sources and keep one row per email address before importing.
Appended log exports
Keep the latest record per ID from a file that has been appended to over time.
Remove Duplicates questions
How do I deduplicate by email only?
Select the email column as the only key column and turn on case-insensitive compare. Other columns are taken from the row that is kept.
Can I see which rows were removed?
The tool reports how many were removed but does not list them. To inspect duplicates first, load the file into DB in Browser and run a GROUP BY ... HAVING COUNT(*) > 1 query.
Does it detect near-duplicates such as typos?
No. Matching is exact after the optional trimming and lowercasing. Fuzzy matching of names or addresses needs a dedicated tool.
Questions about privacy, file size, or accounts are answered on the FAQ page.
More clean & transform
Other tools in the same category
Data Process
Search, filter, sort, and rearrange CSV, TSV, or JSON data, then export exactly the view you built
Find & Replace
Find and replace text in selected columns of CSV, TSV, or JSON, with regex and whole-cell matching
Column Tools
Rename, drop, reorder, fill, split, combine, and cast columns in CSV, TSV, or JSON
DB in Browser
Load CSV files as SQLite tables and query them with SQL, including joins, without a server