1. gibin.in
  2. Free tools
  3. Fuzzy match
Free tool · fuzzy matching

Fuzzy match two lists

You have two lists that should line up, but the names are written differently: "Acme Corp" in one, "ACME Corporation" in the other. This finds the closest match for every row and tells you how sure it is.

Use it when
  • You need to join two spreadsheets on a name and VLOOKUP keeps returning #N/A
  • You're checking a vendor or customer list against your master data
  • You want to see which names in one list are missing from the other
● Runs in your browserNothing uploadedFree, no sign-up
  1. Paste or upload both lists
  2. Choose how strict to be
  3. Download the matches
Count as a match at
85
Higher is stricter. Pairs up to 10 below this are marked for a check
More options

How to use it

  1. Put the values you want to look up in list A. One per line, or upload a CSV and pick the column.
  2. Put the clean reference list in list B. That's the list you're matching against.
  3. Hit Match the lists. Every value in A gets its closest value in B and a score.
  4. Drag the threshold. Results re-sort instantly into match, review (up to 10 points below the threshold) and no match, so you can find the line where your data stops being trustworthy.
  5. Download the CSV. If list A came from a CSV, all its original columns are kept. If list B did too, B's columns are attached to each match. That's the fuzzy VLOOKUP part.

How the matching works

Before comparing anything, both sides are cleaned the same way: lower-cased, accents stripped, punctuation turned into spaces, and "&" read as "and". Common abbreviations are expanded, so "Corp" meets "Corporation" and "Univ." meets "University". Then each value is scored against the candidates in list B.

Smart is the default and the one I'd use. It compares word by word, and rare words count for more than common ones. If every name in your list ends in "Ltd", then "Ltd" says almost nothing, and Smart works that out from your own data. Numbers have to match exactly, so "Building 12" never matches "Building 13" just because the strings look alike. It then blends in whole-string edit distance, so typos like "Jonh Smith" still land on "John Smith".

The other methods are there when you know what you need:

  • Token sort sorts the words before comparing. "Data Science MSc" and "MSc Data Science" score 100.
  • Token set also ignores extra words, so "Data Science" scores 100 against "MSc Data Science". Useful, but it will happily over-match short names.
  • Edit distance counts how many single-character edits turn one string into the other. Best for typos in otherwise identical text.
  • Jaro-Winkler rewards matching starts. Good for short personal names.

For big lists the tool doesn't compare every pair. It builds an index of word fragments from list B and only scores the few dozen candidates that share the rarest fragments with each value. That's why 20,000 against 20,000 takes seconds instead of most of an hour.

Picking a threshold

There's no universal right number, and anyone who tells you otherwise hasn't looked at your data. Start at 85 with the Smart method, then open the review tab and read twenty rows. If they're mostly right, lower the threshold. If you see wrong pairs in matched, raise it. The review band exists so a person checks the borderline cases instead of the tool guessing.

Where this comes from. I built a stricter version of this for reconciling website listings against a database, where a wrong match is worse than no match. That version uses no threshold at all. The case study explains why, and this post walks through the code.

Questions

Is my data uploaded anywhere?

No. The page reads your lists in your own browser and does the matching there, in a background thread. Nothing you paste or upload is sent to a server. You can disconnect from the internet after the page loads and it still works.

How many rows can it handle?

I've tested it with 20,000 real-looking company names on each side, which takes a few seconds on a laptop. Bigger lists work too, they just take longer. There's a progress bar, and the page stays usable while it runs.

What does the score mean?

It's a similarity from 0 to 100. 100 means the two values are identical once case, punctuation and spacing are ignored. With the default Smart method, anything above about 85 is usually the same thing written differently, and 75 to 85 is worth a human look.

Can I match on two columns at once, like name and city?

Not directly. Join the columns into one before you paste them (in Excel, =A2&" "&B2) on both sides, and the matcher will treat the result as one value.

Does it work with Excel files?

Save the sheet as CSV first (File, Save As, CSV UTF-8). You can also copy a column straight from Excel and paste it in, and that works fine.