# Fuzzy Name Matcher

Match and deduplicate person or organization names with Jaro-Winkler, Levenshtein and Soundex. Paste names, tune the threshold, export groups, pairs, CSV or JSON.

## Run it

- **CLI:** `gizza tool fuzzy-name-matcher "Paste one name per line, or a single-column CSV:
Dr. John Adams
John Adams Jr
Jon Adams
Acme Corp
ACME Corporation"`
- **Web:** https://gizza.ai/tools/fuzzy-name-matcher/
- **Agents:** machine-readable descriptor (parameters JSON Schema) at https://gizza.ai/tools/fuzzy-name-matcher/tool.json

## Inputs

- `names` — Names _(field)_
- `algorithm` — Algorithm _(field)_
- `mode` — Output mode _(field)_
- `threshold` — Threshold (0-100) _(field)_
- `normalize_case` — Ignore letter case _(field)_
- `ignore_titles` — Ignore titles and suffixes _(field)_
- `output` — Result format _(field)_

## Output

- Matched names (text)

## Query parameters

Open the tool pre-filled and auto-run via URL:

- `names` — Names
- `algorithm` — Algorithm
- `mode` — Output mode
- `threshold` — Threshold (0-100)
- `normalize_case` — Ignore letter case
- `ignore_titles` — Ignore titles and suffixes
- `output` — Result format

Example: `https://gizza.ai/tools/fuzzy-name-matcher/?names=Paste%20one%20name%20per%20line%2C%20or%20a%20single-column%20CSV%3A%0ADr.%20John%20Adams%0AJohn%20Adams%20Jr%0AJon%20Adams%0AAcme%20Corp%0AACME%20Corporation&algorithm=jaro_winkler&mode=groups&threshold=85&normalize_case=true&ignore_titles=true&output=table`

---

## About this tool

Fuzzy Name Matcher helps clean lists of people or organizations when the same entity appears under slightly different spellings. It is useful for CRM dedupe, sanctions or customer-list review, survey cleanup, vendor master data, and spreadsheet joins where exact equality is too strict.

Paste one name per line (or a single-column CSV where the first field is the name). The tool compares every unique name against the others, then either clusters them into canonical groups or lists every matched pair with a score. Duplicate identical rows are counted, so the most frequent spelling can become the canonical name for a group.

### Algorithms

- **Jaro-Winkler** is the default. It is good for short names because it rewards a shared prefix and catches typos like `Jonathan Smith` vs `Jonathon Smith`.
- **Levenshtein** uses a normalized edit-distance ratio. It is stricter and easy to explain: fewer insertions, deletions, or substitutions means a higher score.
- **Soundex** compares phonetic keys. It can catch names that sound alike, such as `Smith` / `Smyth` or `Robert` / `Rupert`, even when the letters differ.

### Modes and outputs

Use **groups** mode when you want a deduplicated mapping table: each input spelling is mapped to a canonical name. Use **pairs** mode when you want review candidates: every pair at or above the threshold is listed with its score, best first.

The default **table** output is readable Markdown. Choose **CSV** when you want to join the mapping back to a spreadsheet, or **JSON** when another script needs structured groups or scored pairs.

### Worked example

Input:

```
Dr. John Adams
John Adams Jr
Jon Adams
Maria Garcia
```

With Jaro-Winkler, threshold `85`, case normalization on, and title/suffix ignoring on, the first three rows are grouped together and `Maria Garcia` stays separate. The output includes a mapping table from each original spelling to the canonical spelling.

### Limits

This is deterministic fuzzy matching, not identity proof. A high score means two strings look or sound similar, not that two people are the same. Review borderline groups before merging production records. Very low thresholds can merge unrelated names; very high thresholds can miss typos. For large lists, pairwise comparison is O(n²), so thousands of unique names can take noticeably longer in the browser.

## FAQ

<details>
<summary>What threshold should I start with?</summary>

Start with `85` for Jaro-Winkler. Lower it toward `80` when you want more recall and are willing to review false positives; raise it toward `90` or `95` when unrelated names are merging. For Soundex, `100` means the phonetic keys are exactly the same.

</details>

<details>
<summary>Should I use groups or pairs?</summary>

Use **groups** when your end goal is deduplication: it creates a canonical name and a mapping for every input spelling. Use **pairs** when you are reviewing candidate matches: it lists every pair above the threshold with its score, which is easier to audit before deciding how to merge.

</details>

<details>
<summary>How are titles and suffixes handled?</summary>

When **Ignore titles and suffixes** is enabled, common honorifics such as `Mr`, `Ms`, `Dr`, and `Prof` are removed from the beginning of a name, and suffixes such as `Jr`, `Sr`, `III`, `PhD`, and `MD` are removed from the end before comparison. The original spelling is still preserved in the output.

</details>

<details>
<summary>Can this deduplicate organizations too?</summary>

Yes, but organization names often need domain-specific cleanup. This tool will catch many aliases like `Acme Corp` and `ACME Corporation`, especially with Jaro-Winkler, but it does not know that `Ltd`, `Limited`, `Inc`, and `LLC` are legal-form variants unless their overall string similarity clears the threshold.

</details>

<details>
<summary>Will a matched group always be correct?</summary>

No. Fuzzy matching is a review aid. Common names, abbreviations, initials, and phonetic matches can create false positives. Treat the output as candidate groups, review the mapping, and keep an audit trail before merging records.

</details>

## Related tools

- [Cluster Similar Values](https://gizza.ai/tools/cluster-similar-values/): Group near-duplicate values in a column (typos, casing, spacing) and get a canonical form per cluster. Runs in your browser, nothing is uploaded, free.
- [Fuzzy Dedupe](https://gizza.ai/tools/fuzzy-dedupe/): Remove near-duplicate rows or lines (typos, casing, spacing) that exact de-duplication misses, and keep one clean row per group.
- [CSV Cell Diff](https://gizza.ai/tools/csv-cell-diff/): Compare two CSVs column-by-column and highlight every individual cell that changed, plus added and removed rows and columns.
- [Text to Table](https://gizza.ai/tools/text-to-table/): Render delimited text (CSV, TSV, or custom-separated data) as an aligned ASCII or Markdown table.
- [Outlier detector](https://gizza.ai/tools/outlier-detector/): Find outliers in a list of numbers using the z-score, modified z-score (MAD) and IQR (Tukey's fences) methods, in your browser. Free, private, no upload.
