How the Fuzzy Deduplicator Works
AnyTool finds near-duplicate rows entirely in the browser. Data is parsed with PapaParse (quoted fields survive), then a match key is built from the column(s) you select and normalised (lower-case, collapsed whitespace, optional punctuation stripping). Every candidate pair is scored with one of two string-similarity metrics: Jaro-Winkler, which weights matching prefixes and is the standard choice for names and short identifiers (so "Jon Smith" ≈ "John Smith"), or Levenshtein edit-distance ratio, which is more even-handed for longer strings like addresses and company names. Pairs at or above your similarity threshold are linked, and a union-find pass clusters them transitively so a chain of variants becomes one group. A lossless length pre-filter skips pairs that cannot possibly meet the threshold, keeping the pairwise scan fast on the main thread. The result is a list of duplicate groups (first row kept, the rest flagged with their score) plus a keep-first de-duplicated CSV for copy or download. Nothing is uploaded.
- Runs client-side — the list is never uploaded
- Two metrics: Jaro-Winkler (names) and Levenshtein (long strings)
- Single or multi-column composite match keys
- Adjustable similarity threshold + transitive (union-find) clustering
- Keep-first de-duplicated CSV/TSV export
- No CDN, no backend; scans up to 5,000 rows per pass in-browser
