Excel Fuzzy Matcher is a free, open-source tool that matches text between two lists even when the values don't line up exactly — "Acme Inc." vs "ACME Incorporated", "Smith, John" vs "John Smith", typos, stray punctuation. It's the fuzzy VLOOKUP Excel never shipped, it returns the matching record's ID (a true lookup), and — unlike Microsoft's old Fuzzy Lookup add-in — it runs on Windows, Mac, and Linux with zero dependencies.
Key takeaways
- Excel's
VLOOKUP/XLOOKUPneed an exact match — one extra space or "Inc." breaks them. - Fuzzy matching compares how similar two values are, so near-matches join.
- The tool is word-order proof and ignores Inc/LLC/Ltd noise.
- It returns a similarity score and a matched/unmatched flag for every row, so you can audit it.
- Zero dependencies, cross-platform, free (MIT) — nothing to install.
Why VLOOKUP fails on real-world data
You have two spreadsheets that describe the same companies — a CRM export and an accounting list — and you
need to join them. But one says "Acme Inc." and the other says "ACME Incorporated". To
Excel's VLOOKUP, those are completely different strings, so it returns #N/A. Real
data is full of these: trailing spaces, different capitalisation, "Corp" vs "Corporation", "Smith, John"
vs "John Smith", and honest typos. Exact-match lookups simply give up.
The fix is fuzzy matching: instead of asking "are these identical?", it asks "how similar are these, from 0 to 1?" and treats anything above a threshold you choose as a match. That one shift turns an afternoon of manual reconciliation into a one-second command.
Why not Excel's own Fuzzy Lookup?
Microsoft did once release a Fuzzy Lookup add-in — but it's Windows-only,
unavailable on Mac or Excel for the web, and effectively abandoned. This tool does the core job
anywhere, with zero dependencies (pure Python standard library — nothing
to pip install).
| Capability | What it means |
|---|---|
| Similarity score | Every row gets a 0–1 score blending character and word-level similarity. |
| Word-order proof | "Smith, John" matches "John Smith". |
| Suffix-smart | Ignores Inc / LLC / Ltd / Corp boilerplate by default. |
| Returns a column | A real lookup: bring back the matched record's id (or any field). |
| Tunable threshold | You decide how close counts — strict or loose. |
| Auditable | Unmatched rows are flagged, not silently dropped. |
How to download & set up (about 1 minute)
Free and open-source on GitHub, with zero dependencies. You just need Python 3.9+.
- Download the code (or Code → Download ZIP on GitHub):
git clone https://github.com/Synth88Labs/excel-fuzzy-matcher.git cd excel-fuzzy-matcher - Export your sheets to CSV (File → Save As → CSV) — one for each list.
- Match them, choosing the columns and (optionally) a column to return:
python fuzzy_matcher.py left.csv right.csv --left-col name --right-col company --return-col id -o matches.csv
⬇️ Get Excel Fuzzy Matcher on GitHub (free)
0.9+ is strict (near-identical only),
0.85 (the default) catches typos and suffix/word-order differences, and 0.7 is
loose — more matches, but review the low-scoring ones. Because every row shows its score, you're always in
control of the borderline cases.
A worked example
Matching CRM contact names to an accounting export and returning each match's account_id:
python fuzzy_matcher.py crm_contacts.csv accounting_export.csv \
--left-col name --right-col company --return-col account_id --threshold 0.7 -o matches.csv
Excel Fuzzy Matcher
5 rows | matched 4 | unmatched 1 (threshold 0.7)
OK 'Acme Inc.' -> 'ACME Incorporated' (1.0)
OK 'Globex Corporation' -> 'Globex Corp' (1.0)
OK 'Initech LLC' -> 'Initech' (1.0)
OK 'Umbrella Co' -> 'Umbrella Corporation' (1.0)
-- 'Stark Industries' -> '' (0.4848)
Wrote matches.csv
Four of five names join cleanly despite different suffixes and word forms, each returning its
account_id. The fifth — "Stark Industries" — has no good counterpart, so it's correctly left
unmatched rather than forced onto the nearest name. That "don't guess when unsure"
behaviour is exactly what you want in a reconciliation.
Where fuzzy matching helps
- Merging customer/vendor lists from two systems (CRM ↔ accounting).
- De-duplicating a contact list where names are entered inconsistently.
- Reconciling product or SKU names between a catalog and a supplier feed.
- Cleaning survey or form data where people typed the same thing many ways.
Frequently asked questions
Is Excel Fuzzy Matcher free?
Yes — open-source under the MIT license, free for personal and commercial use.
How is this different from VLOOKUP?
VLOOKUP requires an exact match. Fuzzy Matcher scores how similar two values are and matches
near-identical ones, so different capitalisation, spacing, suffixes, word order, and typos still join.
Do I need to install anything?
No third-party libraries — just Python 3.9+. The tool uses only the standard library.
Does it work on Mac and Linux?
Yes. Unlike Microsoft's Windows-only Fuzzy Lookup add-in, this runs anywhere Python does.
How do I use it with .xlsx files?
Save each sheet as CSV first (File → Save As → CSV), then run the tool on the CSVs.
What threshold should I use?
Start at the default 0.85. Raise it toward 0.9+ for stricter matching, lower it toward 0.7 to catch more (and review the low scores).
Summary
Real spreadsheets never match on the first try — and exact-match lookups leave you reconciling names by hand. Excel Fuzzy Matcher is the fuzzy VLOOKUP that joins messy lists, returns the matching ID, and flags what it can't match — free, cross-platform, and zero-dependency. Download it and stop matching names manually.