Last Updated on November 13, 2026
Jaro-Winkler similarity is one of the most widely used string comparators for matching person names. It scores two strings from 0 to 1, rewards shared leading characters, and is cheap enough to run across millions of candidate pairs. It also produces some of the most confident false matches in a deduplication run, because the prefix boost that lifts “Jonathon” toward “Jonathan” also lifts “Christina” to 0.84 against “Christopher.”
The method came out of the U.S. Census Bureau, where William Winkler’s 1990 paper extended an earlier comparator by Matthew Jaro for matching records in the 1990 Census. A later Census Bureau paper reports that a 1991 review of twenty string comparison methods ranked Winkler’s version first.
What Jaro-Winkler similarity measures
Jaro-Winkler similarity is a string comparison score between 0 and 1. It counts the characters two strings share within a limited distance of each other, penalizes shared characters that appear out of order, and adds a bonus when both strings start the same way. A score of 1 means the strings are identical.
The Jaro part starts with a matching window: half the longer string’s length, rounded down, minus one. Two characters count as a match (m) only if they are identical and sit within that window of each other. Some matches will appear in a different order in each string, and t is half the number of those. The score averages three ratios.

The window is why Jaro tolerates typing errors. A transposed “HT” for “TH” costs one transposition, where plain Levenshtein distance counts two substitutions.
How the Winkler prefix boost changes the score
Winkler’s adjustment moves the Jaro score toward 1 based on the shared prefix length l, capped at four characters, and a scaling factor p.

The standard p is 0.1, so four shared leading characters close at most 40% of the remaining gap. Push p to 0.25 and, as this survey of similarity measures notes, any pair sharing its first four letters scores a perfect 1. Some implementations add the bonus only when the Jaro score clears 0.7, the boost threshold in Winkler’s own code, while many libraries skip it, so two tools can disagree on the same pair.
Jaro-Winkler distance versus similarity
Distance is 1 minus similarity, and tools name the two inconsistently. Vertica’s JARO_WINKLER_DISTANCE is documented as returning similarity, while R’s stringdist returns a distance and leaves out the prefix bonus unless you set p = 0.1. Test your function on MARTHA and MARHTA before setting any threshold. A result of 0.961 means similarity with the standard bonus, and 0.039 means distance. A result of 0.944 or 0.056 means the bonus is switched off. A 0.85 threshold read in the wrong direction will merge nearly everything or nothing.
A worked Jaro-Winkler example
MARTHA and MARHTA is the textbook pair. Both strings have six characters, and T and H have swapped places.
| Step | Calculation | Result |
|---|---|---|
| 1. Matching window | floor(6 / 2) minus 1 | 2 positions |
| 2. Matching characters (m) | M, A, R, T, H, A all match within the window | 6 |
| 3. Transpositions (t) | T and H are swapped, so 2 matched characters are out of order. 2 ÷ 2 = 1 | 1 |
| 4. Jaro score | (6/6 + 6/6 + 5/6) / 3 | 0.944 |
| 5. Common prefix (l) | M, A, R shared at the start | 3 |
| 6. Jaro-Winkler score | 0.944 + 3 × 0.1 × (1 minus 0.944) | 0.961 |
The table below applies the standard formula (p = 0.1, no boost threshold) to name pairs common in customer and patient files, with normalized Levenshtein similarity for reference.
| Pair | Jaro | Jaro-Winkler | Levenshtein similarity | Same entity? |
|---|---|---|---|---|
| MARTHA / MARHTA | 0.944 | 0.961 | 0.667 | Yes, transposition |
| JONATHAN / JONATHON | 0.917 | 0.950 | 0.875 | Likely, spelling variant |
| DWAYNE / DUANE | 0.822 | 0.840 | 0.667 | Likely, phonetic variant |
| CATHERINE / KATHRYN | 0.757 | 0.757 | 0.556 | Likely, phonetic variant |
| JOHNSON / JOHNSTON | 0.958 | 0.975 | 0.875 | No, different surnames |
| CHRISTOPHER / CHRISTINA | 0.737 | 0.842 | 0.545 | No, different first names |
| JOHN SMITH / SMITH JOHN | 0.533 | 0.533 | 0.000 | Yes, reversed token order |
JOHNSON and JOHNSTON are different surnames, yet they outscore every genuine variant here. CATHERINE and KATHRYN are almost certainly one person, yet they score below CHRISTOPHER and CHRISTINA because they share no leading characters. Those two rows are the case for treating the score as evidence rather than a verdict.
How to choose a Jaro-Winkler threshold
There is no universal cutoff. A common rule of thumb for names, cited in this calculator reference, treats 0.95 and above as a confident match, 0.85 to 0.94 as probable and 0.70 to 0.84 as needing review. Under those bands, JOHNSON/JOHNSTON auto-merges and CATHERINE/KATHRYN goes to review.
Calibrating on your own data takes four steps.
- Label a few hundred candidate pairs from across the score range as match or non-match.
- Plot each label’s score distribution. The overlap is where your errors will come from.
- Set an auto-merge cutoff and a lower review cutoff, and route the pairs between them to a steward.
- Raise the auto-merge cutoff wherever a false merge is costly, such as patient records or KYC profiles.
Set thresholds per field. Short strings reach high scores quickly, so JON and JOHN score 0.933 on a single missing letter. Never decide a match on the name score alone.
Where Jaro-Winkler breaks down
Jaro-Winkler was built for short, single-token strings with typing errors. Cohen, Ravikumar and Fienberg’s 2003 comparison of string distance metrics notes that the Jaro family seems intended primarily for short strings such as last names, and most failures come from data outside that design.
Reordered tokens
JOHN SMITH and SMITH JOHN score 0.533 because the comparator reads left to right. Parse names into components or compare them token by token. The same 2003 study found its best overall performer combined TF-IDF token weighting with Jaro-Winkler.
Sound-alike names with different first letters
CATHERINE and KATHRYN share no leading characters, so they get no bonus and sit at 0.757. Phonetic encoding such as Double Metaphone catches pairs like this one.
Prefix inflation
CHRISTOPHER and CHRISTINA jump from 0.737 to 0.842 on the prefix alone. A second field, such as a date of birth, is what separates pairs like these.
Long strings, nicknames and mixed scripts
ACME CORPORATION and ACME CONSULTING are probably different companies, yet they score 0.858 because they share “ACME C” and many common letters. Company names need suffix standardization and token-level comparison, so the distinctive words carry the weight instead of the shared ones.
Jaro-Winkler vs Levenshtein for name matching
Levenshtein counts the insertions, deletions and substitutions needed to turn one string into the other, while Jaro-Winkler measures shared characters, their order and their position. On MARTHA and MARHTA, Jaro-Winkler returns 0.961 and normalized Levenshtein only 0.667, because Levenshtein counts the swap as two edits.
| Factor | Jaro-Winkler | Levenshtein |
|---|---|---|
| Output | Similarity from 0 to 1 | Integer edit count, often normalized by length |
| Transpositions (TH vs HT) | One transposition | Two substitutions (Damerau-Levenshtein counts one) |
| Position sensitivity | Rewards prefixes up to four characters | Treats every position equally |
| Best suited to | Person names and short single-token strings | Codes, IDs and structured values where every edit matters |
Use Jaro-Winkler for names and Levenshtein for identifiers, where a single changed character matters and a shared prefix says little.
How a production matching engine uses Jaro-Winkler
Each weakness above has a known fix. The hard part is applying all of them consistently across millions of records, which is the job of the matching engine in DataMatch Enterprise (DME), Data Ladder’s fuzzy matching software.
The engine picks the algorithm
DME users choose the comparison semantics for each field (exact or fuzzy, text, number or phonetic), plus a threshold and a weight. The engine applies the algorithm, and for fuzzy text that algorithm is Jaro-Winkler. Keeping that choice inside the engine removes common errors in hand-built pipelines, such as reading a distance as a similarity.
Phonetic gating and candidate generation
For phonetic comparisons, DME first transliterates text into Latin characters and encodes each name with Double Metaphone. When two names share a phonetic code, their Jaro-Winkler score is scaled into a band between 0.7 and 1.0. Sound-alike names like CATHERINE and KATHRYN therefore stay above 0.7 even when their first letters differ, and closer spellings still rank higher within the band. Before any scoring, q-gram indexing (q = 3) narrows the set of candidate pairs.
On Data Ladder’s 10-million-record benchmark, that pipeline finished in about 41 minutes and produced 117,201 matched groups across 439,549 pairs. Across 15 comparative studies, DME found 5 to 12% more matches than other enterprise data quality platforms.
Where Jaro-Winkler similarity fits in a matching pipeline
Jaro-Winkler similarity remains the right default for person names because it is fast and tolerant of typing errors. Jaro-Winkler similarity remains the right default for person names because it is fast and tolerant of typing errors. Its weak spots are well understood, which makes them manageable. Treat the score as one piece of evidence, calibrate thresholds on labeled pairs, confirm whether your function returns similarity or distance, and pair it with transliteration, phonetic encoding and token handling.
To see how DataMatch Enterprise scores your own name data, download the free trial and run it on a file you already know has duplicates.
Frequently asked questions
These are the questions that come up most often when teams put Jaro-Winkler into a matching workflow.
What is a good Jaro-Winkler threshold for name matching?
Common starting points treat 0.95 and above as a confident match, 0.85 to 0.94 as probable and 0.70 to 0.84 as needing review. Treat those as defaults to test. Label a few hundred pairs from your own data and set an auto-match cutoff and a review cutoff for each field.
What is the difference between Jaro-Winkler distance and similarity?
Similarity runs from 0 (nothing shared) to 1 (identical), and distance is 1 minus similarity. Some functions named “distance” return similarity, and some skip the prefix bonus by default. Test MARTHA and MARHTA first. You should see 0.961 for similarity or 0.039 for distance. A result of 0.944 or 0.056 means the bonus is off.
Is Jaro-Winkler better than Levenshtein for name matching?
For personal names, usually yes, because it treats transpositions gently and rewards shared prefixes. Levenshtein suits identifiers and codes, where every changed character matters equally. Neither catches phonetic variants or reordered tokens on its own.
Can Jaro-Winkler match names written in different scripts or orders?
No. “John Smith” against “Smith John” scores 0.533, and a Cyrillic spelling against its Latin form can score 0. Transliterate into one script, parse names into components and compare tokens before applying a threshold.
How do you calculate Jaro-Winkler in SQL or Python?
In Python, jellyfish and RapidFuzz implement it. In R, use stringdist with method “jw” and p = 0.1. Check each one’s output direction and whether it applies the 0.7 boost threshold.


































