Measured 2026-08-25
How does our matching work, and what is the best it could be?
When a foundation files its taxes, it lists who it gave money to. Some filers include the recipient’s ID number. Most don’t; they just write a name, like “BOYS + GIRLS CLUB OF TAMPA”. Our job is to work out which real organization that is, and to admit it when we can’t.
It sounds useful to say how many grants we can match, but that’s not a great question. A lot of grants can’t be matched by anyone. Some filings name no recipient at all. Some are cheques to individuals. Some are gifts to charities abroad, which have no US ID number to find.
Here's a better approach: first, which grants could never be matched? Then: of the ones that could, how many did we get?
Which grants could never be matched to a US charity?
Anything foreign (obviously), anything with no name at all, something with a name that's so short it's unusable, or a grant to an individual. Here's the breakdown:
| Box | Grants | Dollars |
|---|---|---|
The recipient is outside the US The recipient is outside the US and has no US nonprofit EIN. | 160,533 | $40.7bn |
The filing names no recipient The filing names no recipient — the field holds a cross-reference or a placeholder, so there is no organization to identify. | 45,209 | $67.6bn |
The name is too short to identify The recipient name is too short to identify an organization by. | 30,065 | $1.8bn |
The recipient is a person The recipient is a person or a class of people. Individuals have no EIN. | 13 | $39m |
| Total with no identifier to find | 235,820 | $110.2bn |
That’s 1.2% of grants, but 6.1% of the money, because the grants involved tend to be big ones. For international grants, we treat them slightly differently on the international pages.
What’s left, and how we did
Take those out and you’re left with the grants that could actually be matched. Switch between grants and money below. They give quite different answers.
We’ve matched 76.0% of the grants and 80.7% of the money. But that's 76.9% of the grants that could be matched and 85.9% of the $. It's higher for money because a handful of enormous grants name no recipient, e.g. acompany foundation booking a whole patient-assistance program on a single line.
How we actually match them
There's a simple approach to start with: match based on the name of the organization. It's cheap and easy, but sometimes organizations share names, and sometimes we can't find that exact name in a file anywhere. So we restrict this matching to only within organizations in the same state, and we normalize the names to remove minor variations like "Inc." and "LLC".
There's a few refinements to name matching, like using the address to help, or the ZIP code, dealing with typos etc.
But the most interesting part is working with the entire dataset. Every filer who states a recipient’s EIN directly is handing us a (name, EIN) pair we didn’t have to work out. Collapse those pairs to distinct organizations, and that same 31.5% of grant rows becomes a registry of who those organizations actually are, including some the IRS itself has never registered:
Click a region below to see who’s in it
288,997 organizations exist in this graph only because a foundation put their EIN on a tax return — 40.5% of every organization a funder has directly vouched for, worth $170.1bn. The IRS’s own master file has never heard of them.
- UNIVERSITY OF WISCONSIN — MADISON, WI$4.6bn · 398 funders
- INDIANA UNIVERSITY — BLOOMINGTON, IN$3.9bn · 480 funders
- University of Minnesota — Minneapolis, MN$3.3bn · 486 funders
- UGA Center for Urban — Griffin, GA$2.7bn · 129 funders
- UNIVERSITY OF WASHINGTON — SEATTLE, WA$2.6bn · 595 funders
- UNIVERSITY OF IOWA — IOWA CITY, IA$2.1bn · 287 funders
- SMITHTOWN UNITED METHODIST CHURCH — SMITHTOWN, NY$60,000 · 2 funders
- TOWN OF OTTERBEIN — OTTERBEIN, IN$60,000 · 2 funders
- THE FOUR WAY LLC — MEMPHIS, TN$60,000 · 2 funders
- WATERVLIET CITY SCHOOL DISTRICT — WATERVLIET, NY$60,000 · 2 funders
That same directly-stated EIN is also the answer key the precision figure further down is graded against: masked, then guessed at, with the caveat that comes with grading yourself on the easy cases.
Impact
Here’s the full breakdown of how we match, and how much we match, as a flow or as a table. Same numbers either way.
Comparing with other funders
This is the single most important part of matching.
There's 2 ways this works: 1) If 2 other funders have matched the same organization name to an EIN, and no other funders have matched the same name to a different EIN, then we can be confident that the organization is the same. This is the easy option, and shows up in the API as the "registry" field.
But sometimes, there are a few different EINs for the same organization name. In that case, if over 90% of grants go to one of these, we map grants to that EIN. If it's not that obvious, we fall through to the model.
The technical part: what the model does
The rules and funder matching are simple to understand, but the model is a bit more complex, and more expensive to run.
Essentially, it combines a lot of sensible flags and features into a single score, and then uses that score to rank the potential matches.
The score comes from gradient-boosted trees. We chose trees because the useful questions are conditional: a distant name is fine when only one organization sits at that address, and a problem when forty do. Adding those signals together misses that; a split catches it. Trees also treat a missing revenue figure as unknown rather than as small, and they score millions of pairs on the CPUs the job already runs on.
- Other funders name this organization
How many independent filers have written this name against this EIN.
- Other funders name someone else
How many have written the same name against a different EIN.
- How many years that pairing has appeared
Counted separately from how many funders, because one funder repeating itself is not the same as two funders agreeing.
- Four views of the same distance
Edit distance, the same relative to length, Jaro-Winkler, and character-overlap. An edit budget means different things on a short name and a long one, so both lengths are in there too.
- Place in the shortlist
Where it sat among the organizations retrieved for this grant line.
- How far it leads the runner-up
A name that is clearly better than the alternatives is a different situation from two chapters of the same charity, a coin flip apart.
- ZIP or street match what the filer wrote
The shortlist is already in-state, so state itself rarely adds anything. These two do: they are the same signals the ZIP and address rules use, graded rather than all-or-nothing.
- How many organizations share this address
A fiscal sponsor's address holds dozens of nominal grantees, and a name match there is weaker for it.
- How many share this name in that state
The ambiguity the exact-name rule already hit.
- The grant against the recipient's revenue
Capped, and unknown is its own state (no filing yet), not the same as small.
- Are other candidates in the same national group
Habitat chapters, YMCA affiliates: several real organizations under one IRS group ruling, with names that look interchangeable. If more than one of them is in the shortlist, a big lead on the name is not a win.
- Is this one a public charity
The usual mix-up is a charity and its advocacy arm, like the ACLU and the ACLU Foundation. Both are real, the names differ by one word, and knowing which is the 501(c)(3) is often enough to pick the right one.
- The candidate's city in the purpose line
Asked the cheap way: does this organization's own city appear in the text, rather than extracting a place from it.
- Distinctive name words in the purpose line
The purpose often spells out a name the grant line abbreviated.
What does work is asking a different question. Instead of “how similar are these two names?”, we pull up every organization it could plausibly be, score them all, and take the best one only if we’re confident enough. We can check whether this works because some filers do give the ID number: hide their answer, make the model guess, compare.
The useful part is what turned out to matter most, and it isn’t how alike the names look. It’s whether other foundations, filing separately, have used that same name for that same organization, and how many of them agree. Essentially: ask around. How similar the text is comes second. Knowing they disagree, and have named someone else, is sharper than knowing they agree.
The closer name loses. One funder’s word could be a coincidence; five foundations, filing separately, already agreeing on the same EIN is not — and that outweighs a marginally better string match.
scikit-learn’s HistGradientBoostingClassifier, with the scores isotonic-calibrated so that “90% sure” is right about nine times in ten.
How often we’re right, and what that number leaves out
On its own that figure is easy to fake: a system that almost never guesses can be right nearly always. So it only means something next to how much we actually match, which is the 76.9% further up.
That test only exercises two of the eight rules: the two oldest and most cautious ones. It doesn’t yet check the four newer rules, which between them matched 1,599,545 grants. So the 97.3% above covers 81.9%of our matching, and the newer rules, the ones you would most want checked, aren’t in it. Fixing that is the next job on this.
Ground truth comes from 990 Schedule I, whose recipients skew larger and more formally registered than the 990-PF recipients the resolver actually runs on. Treat this as an estimate on a related population; the true figure on 990-PF names is likely lower.
The ones that got away
These are grants that could potentially be matched and haven’t been. Over time, we hope to reduce this list, but need to do so carefully to maintain accuracy in the matches we do make.
| Why it is not linked yet | Grants | Dollars |
|---|---|---|
The name matches no registered organization The name matches no organization in the IRS Business Master File or the e-filing universe, in any state. Part of this is permanent: churches need never apply for recognition (IRC 508(c)(1)(A)) and many government bodies appear in no exempt-organization file, so no public identifier exists to find. The rest is ours — an organization registered under a legal name no funder uses. Counted as reachable because we cannot yet tell the two apart. | 3,852,777 | $222.5bn |
The name is registered, but in another state The name is registered, but in a different state from the one the funder wrote down. | 519,646 | $11.2bn |
Several organizations share the name in that state Several registered organizations share this exact name in this state and the filing gives nothing that separates them. We decline rather than pick the likeliest. | 128,472 | $4.9bn |
The grant line carries no recipient state The grant line carries no recipient state, so the state-keyed rules cannot run. | 14,517 | $683m |
A unique candidate existed and we declined it A unique candidate exists and we did not take it — a self-funding exclusion, a do-not-map EIN, or a defect. Should be near zero. | 11,608 | $818m |
And then... sometimes the answer key is wrong
31.5% of grants have an EIN. But what if the EIN is wrong? What if the grantmaker just made a typo?
They do! Quite a lot!
Here’s how we found out
Typos are predictable. They are usually a single digit off, they swap a two digits, or they add or remove a leading zero. They are not random. So we can check for them, and see how often they happen.
Three things have to be true. The recipient name points at exactly one organization in that state. The EIN they typed is not anyone’s real number. And that fake number is one of those four shapes away from the named organization’s real EIN. If the name could be two organizations, we leave it.
A nine-digit number has 81one-digit cousins, so sitting next to somebody’s real EIN happens by luck. The checklist only counts a hit when it is the EIN of the organization the name already points at.
We ran the first two checks on 1,200,000 grants where the name and the EIN already agree, so we know they are not typos. The checklist should never call those typos. It never did. Then we used it.
| Shape | Corrected | Check |
|---|---|---|
| One digit wrong | 5,398 | never fired on 1,200,000 already-correct grants |
| Two adjacent digits swapped | 904 | never fired on 400,000 already-correct grants |
| A digit inserted or dropped | 484 | split by the issuing-office digits, below |
| A leading zero lost in a spreadsheet | 473 | split by the issuing-office digits, below |
The last two both look like the digits slid along by one place. The first two digits of an EIN are the IRS office that issued it, and a person typing usually leaves them alone: 484 times out of 487. The other group kept those digits only 3 times in 533, because the digit that vanished was the first one. Those numbers started with a zero, got stored as a number in a spreadsheet, lost the zero, and then had one stuck on the wrong end to make the length right. That is why they are two rows: one is a typist, the other is software.
If you want to know who has the fattest fingers, it's in our API. But also, this also means we needed to re-do all of the work above, because we were training the model on answers that were often wrong.
EINs have no check digit
NHS numbers, ISBN-10, and many VAT registration numbers all carry one. Modulus-11 is the usual scheme: it blocks a substituted digit or a swapped pair at the point of entry, so the wrong number never files.
An EIN is an IRS office prefix plus a sequential counter. There is nothing to catch a mistype. The slip goes onto the return, into every dataset built from the return, and stays there. Years later it has to be reconstructed from the name, which is the work above.
Check it yourself
Every figure here comes from one artifact, computed against the same published data the API serves, and regenerated whenever the corpus is rebuilt. The per-figure detail, coverage by year, the provenance ledger and the raw JSON, is on the data quality page, and the underlying grants are queryable through the API.
Measured 2026-08-25. Filings lag twelve to twenty-four months after the activity they describe, so the most recent fiscal years are floors that rise with each monthly IRS release rather than final totals.