Deduplication Done Right: First Occurrence, Order Preserved, Nothing Silent
August 22, 2026 · DevTools
Deduplication Done Right: First Occurrence, Order Preserved, Nothing Silent
Duplicate rows sneak into everything: keyword exports, contact lists, pasted IDs from three logs. The List & CSV Deduplicator cleans them with one deliberate contract: keep the first occurrence, preserve the original order, report everything removed.
Why first-occurrence is the right default
It makes deduplication predictable. Dedupe a CSV sorted by date and the earliest row per key survives — which is almost always the row you want (the original signup, the first order, the canonical record). "Keep the newest" is one stable-sort away if you need it; "keep arbitrary" is what naive implementations do and what nobody wants.
Two modes, one data path
Plain lists treat each line as an entry with three knobs: trim whitespace before comparing, compare case-insensitively (APPLE = apple, first casing wins the output), and skip empty lines. A repeat report lists every removed value with its count — banana ×3 — so nothing disappears silently.
CSV mode parses with full RFC 4180 quoting (PapaParse), you pick the key column — email, SKU, ID, URL, anything — and the first row per key survives with all its other columns intact. Output re-serializes through the same parser, so commas inside quoted fields stay quoted through the round-trip.
Scale and privacy
A Set of normalized keys gives O(n) dedupe; hundreds of thousands of lines are comfortable. Everything runs locally — customer exports never leave the browser, which for this class of data is the main feature, not a footnote.
From clean data to decisions: chart it with CSV to Chart, price it with the Currency Converter.