Clean a file

A worked example: one messy contact list

The built-in sample is a 120-row contact list with the kinds of duplicates real exports produce. Load it in the tool and you will see the same clusters described here.

What is hiding in the sample

Duplicate kindExample patternCaught by
Exact copyThe same row exported twiceExact matching
Email variantsjane.doe@gmail.com vs janedoe+news@gmail.comEmail normalization, then exact matching
Phone formats(555) 014-2280 vs +1 555 014 2280Phone normalization, then exact matching
Case and spacingACME SUPPLY INC vs Acme SupplyCase folding + company suffix cleanup
Misspelled namesJon Smith vs John Smith, same companyFuzzy matching (review cluster)
Complementary rowsOne row has the phone, the other has the cityMerge with fill-missing — nothing is lost

The sample file is generated by a script in the project (scripts/make-sample.mjs), so the example is reproducible: the same input always produces the same clusters.

Open the tool and load the sample

What you get back

  • Clean CSV — one row per person, with empty fields filled from their duplicates.
  • Duplicates audit CSV — every removed row, its cluster ID, and the reason (“Duplicate of data row 14 in cluster C3 (exact match, score 1)” style entries).
  • Summary JSON — input rows, output rows, removals, cluster counts, and the exact settings, so the run can be repeated or checked later.

Counts always reconcile: clean rows + audited removals = the 120 rows you started with.