CSV Deduplicator
Remove exact duplicate rows and flag the conflicting ones.
What you paste
Parsed in your browser — never uploadedHow this reads your output
Rows identical across every field are collapsed to one. Separately, rows sharing a value in the first column but differing elsewhere are counted and listed, and deliberately not removed. That second category is the one that causes real damage: two records claiming to be the same customer with different addresses will not be noticed by anyone, whereas an exact repeat is obvious once found.
What the results mean
- Exact duplicates removed
- Rows matching in every field. Safe to remove, because no information is lost.
- Conflicting values
- The same key appearing with different data. Left in place, because deciding which version is correct needs knowledge no tool has.
- Rows kept
- What remains after deduplication, in the original order with the first occurrence of each row retained.
Common problems and fixes
- Obvious duplicates are not being removed
- They differ somewhere, usually in trailing whitespace, capitalisation or a formatting difference such as a phone number written two ways. Normalise those fields first, then deduplicate. Doing it in that order is important, since normalising afterwards leaves you deciding which of two surviving rows to keep.
- I need to deduplicate on one column rather than the whole row
- The conflicting-values list is exactly that, computed on the first column. Reorder your columns so the key you care about comes first, and the report will show every record sharing that key with different data behind it.
Frequently asked questions
Which duplicate is kept?
The first occurrence, and the original row order is preserved. For exact duplicates it makes no difference. If your rows carry a timestamp and you want the newest, sort by that column before pasting.
Why not remove near-duplicates automatically?
Because deciding which version is right is a business judgement rather than a technical one. A tool that silently merged two conflicting records would occasionally throw away the correct address, and you would have no way to know it happened.
Is there a size limit?
Practically, yes. Everything happens in your browser, so a few tens of thousands of rows is comfortable and hundreds of thousands will make the tab struggle. Beyond that a database or a script is the right tool.
Put this on your own site
Free to embed, no attribution required beyond the source link the frame carries itself. It runs entirely in your visitor's browser, sets no cookies and loads no third-party script.
<iframe src="https://runthetests.com/embed/csv-deduplicator/" width="100%" height="720" style="border:1px solid #e5e5e5;border-radius:8px" title="CSV Deduplicator" loading="lazy"></iframe>
Preview it at https://runthetests.com/embed/csv-deduplicator/. Embedded pages are marked noindex, so yours stays the canonical copy — not this one.