Skip to content

FunderGraph, from a prototype to the country: a reader's walkthrough

What the finished graph shows and how to read it: who funds whom from the IRS filings, with the return behind every fact, the maps that are computed, the numbers behind the site, and what it cannot yet say.

Data Engineering Knowledge Graphs Nonprofits

In September I wrote a developer’s walkthrough of the semantic medallion prototype: three invented software systems, a few thousand facts, and an argument that if the serving layer of a data pipeline is a knowledge graph, the question “show me everything we know about this thing” becomes one query. That prototype grew into a real system with real data. It is called FunderGraph, it lives at fundergraph.org, and as of its build of 19 October 2026 it holds the United States nonprofit funding landscape as the filings describe it: 1,564,359 organizations with a page, 1,147,944 tax returns, 4.57 million grant rows, and a national computation of who funds work like yours.

This walkthrough is for a reader, not a developer. It explains what the site shows, how to read a page, what the relationships between organizations mean and do not mean, where every number comes from, and what the graph cannot yet say. The technical story (Parquet, DuckDB, RDF, SPARQL, the matcher, the measurements) is in the September article and in the project’s own documentation; this one points there and moves on.

Two notes before you start:

  • Every figure here is from the production build of 19 October 2026, read from the site’s own documentation pages or from the build’s log. The site shows the date of its current build on its About page; if that date is later than this article’s, the site’s numbers win.
  • Every section ends with “where to look on the site,” because the pages were written to be the authority and this article was written to get you to them.

1. What FunderGraph is

A nonprofit that files a full Form 990 attaches a list of the grants it made to other organizations (Schedule I). A private foundation that files a Form 990-PF attaches its list of grants and contributions paid (Part XV). The IRS publishes these returns as data, and has for years. What nobody could easily do was follow the lists: from a funder to its recipients, from a recipient to all of its funders, and from there to the other organizations those funders also fund.

FunderGraph does that. It reads every e-filed return in the monthly archives the IRS has posted, takes the grant lists, works out which organization each named recipient is, and stores the result as a graph in which every fact carries the filing it came from, the tax period it is for, and a link to the public copy of that filing. On top of the facts it computes a small number of things, labels them as computed, and keeps the recipe beside them.

Three things it refuses to do, by design. It names no person anywhere: officers, directors, contributors, and the “in care of” names on the master file are dropped before anything else is read. It shows no street address. And it attaches no ideology or politics to any organization. Where a reader sees a political pattern on a shared-funder map, that is a pattern in who funded whom, computed from the rows, never a label the site assigned.

Where to look on the site: About FunderGraph for what the current build holds, and How FunderGraph reads a filing for the short version of everything below.


2. Where the facts come from

There are three sources today, and the site is explicit about what it takes from each.

The e-filed returns. The IRS publishes Forms 990, 990-EZ, and 990-PF as XML in monthly archives. The build read twenty-five of them: 1,147,944 returns, of which 585,732 were Forms 990, 352,143 Forms 990-EZ, and 210,031 Forms 990-PF from 128,750 private foundations, with 38 returns outside those three counts. Every schema version the IRS has used was mapped through one concordance, the one the Nonprofit Open Data Collective maintains, so no return was left out for its format. From each return the graph takes the header (who filed, where, for which period), the mission and program descriptions, and the grant lists. It does not take Schedule F (grants outside the United States), Schedule B (the list of contributors), or any officer or compensation line.

The master file of exempt organizations. The IRS’s list of every organization currently recognized as tax-exempt, refreshed monthly: 1,964,958 rows in this build, of which 1,537,247 have a return on record and 427,711 do not. The other 27,112 organizations with a page are filers with a return on record that are not on the current master file. It is the spine of the graph. An organization’s page is minted from its employer identification number (EIN), and every recipient name on a grant list is matched against the master file to find out who it is.

Amended returns. A filer that amends a return files a second one for the same period. The build holds both and marks the earlier as replaced: 10,564 of the returns are superseded. Totals count the current return for each period, so a grant that appears on an original and its amendment counts once. The page shows “replaced by a later return for this period” beside the superseded one rather than hiding it, because both are facts with provenance.

Two further sources are built and tested but not yet run for the country: grant lists read from funders’ own websites, which appear months before the matching return, and federal awards from USAspending and the Federal Audit Clearinghouse. Every grant on the site today comes from a return. The sources page says this, and also says which sources the project deliberately does not use and why.

Where to look on the site: Where the facts come from and What is in the graph, which carries the counts above with the date they were measured.


3. Reading an organization’s page

Open the American National Red Cross. The page has three views.

Filings lists the returns on record, each with its tax period, its form, and a link to the public copy at ProPublica’s Nonprofit Explorer. The link is built from the filer’s EIN and the IRS’s own object identifier for the document, so it opens the exact return the site read, not the organization’s latest.

Grants received lists every row on some other organization’s grant list that names the Red Cross: 1,751 rows summing $357.9 million from 1,035 funders, each row with the funder, the amount, the purpose as the funder wrote it, the tax period, and the return it came from. This is the view the graph makes possible and no single filing contains, because the information lives in a thousand other organizations’ returns.

Grants given lists the organization’s own Schedule I or Part XV rows. The Red Cross gives none; Stanford gives 242 and receives 843, from 485 funders.

Beside some rows on the received view you will see a small badge: “resolved: exact name match,” “resolved: name and place rule,” or “resolved: nearest name, corroborated.” Those rows are the ones where the funder wrote a name and not a number, and the site worked out which organization the name meant. A linked row with no badge is one where the funder wrote the Red Cross’s EIN itself, and no inference was made. A name with no link at all is one the site could not place with confidence, shown as written and counting toward nothing but that funder’s own list. The next section is about how that decision is made.

Every page also shows the summary the master file carries (the IRS subsection, the ruling date, the activity code, and the asset and revenue ranges from the last return) as words rather than codes, and names the organization’s subject in the classification the site uses.

Where to look on the site: Verifying and citing a fact explains every word that can appear beside a fact and gives a citation form a reader can check.


4. How a name becomes an organization

This is the problem the September article called entity resolution, and the one its synthetic measurement warned about: a matching rule that is precise in a small population is not necessarily precise in a large one. Here the population is 1,121,568 distinct recipient names, written by hand onto 2,914,224 grant rows, almost all of them from Part XV lists, which almost never carry an EIN.

The site resolves a name in three tiers, in order, and stops at the first that accepts.

  1. Exact. The name, normalized (case folded, punctuation dropped, legal suffixes set aside), equals a master-file organization’s name in the same state. 930,867 rows resolved this way.
  2. Rule. The core of the name matches and the city agrees, or a distinctive word in the name agrees. 329,074 rows.
  3. Nearest name. The name’s embedding is nearer to one master-file name than to any other, by a margin, with the city agreeing or a distinctive word shared. This tier is not yet active nationally. The path is built; the job of embedding 1.1 million names has not yet run.

Rows no tier accepts go to a review queue rather than being forced onto the nearest name: 1,653,653 rows, most of them names with no candidate in the state, plus out-of-state recipients, government bodies, and ambiguous pairs. The precision of each tier was measured on a labeled sample before the tiers were trusted, and the figures are on the resolution page. The September article’s lesson held: the rules that accept are the ones whose evidence does not saturate as the population grows.

A sponsored project, a group that exists inside a fiscal sponsor’s filing and has no return of its own, is a special case with its own page of documentation. The sponsor is the identity authority for it, and the project’s identifier lives under the sponsor’s EIN.

Where to look on the site: How a name becomes an organization and Fiscal sponsors and their projects.


5. Subjects and funders

Every organization has a subject, taken from the IRS’s activity code and mapped into Candid’s Philanthropy Classification System, which is a tree. A subject page counts work under the subject and under every narrower subject beneath it. University education is where Stanford sits; Human services is the Red Cross’s.

The subject page’s table is the answer to the second of the four questions the project was built to answer: every funder that has funded work under a subject, in a given state and period. It lists funders by state, largest first, with the years in which they gave.

A funder has a page of its own when it has given grants. Fidelity Investments Charitable Gift Fund is the largest, with 170,199 grants summing $27.2 billion. Its page groups what it funded by subject, with the share of each, and by state. It also carries a badge, “intermediary,” because it gives to more than a thousand distinct organizations. The badge matters for the next section: a funder that reaches tens of thousands of recipients shares a funder with almost everyone, and as evidence that two organizations do related work it is noise. Intermediaries are shown everywhere and set aside where funders are counted as a signal.

Where to look on the site: any subject or funder page; the reading page on intermediaries.


6. The shared-funder map

Open the map for Teachers College, Columbia University. Teachers College is the anchor. To its left are its funders, within a window of three tax years; to its right are the other organizations those funders also gave to, scored by how many funders they share with the anchor. New York University shares 23 funders with Teachers College; Harvard shares 22. Hover a member and the funders it shares light up.

This is the third of the four questions, for one organization, who else its funders fund, answered as a stored, cited result. The map is a computed overlay. It does not say the organizations coordinate, agree, or know of one another; it says the same funders gave to both. It does not say they do the same work; funders give across subjects. It carries no label of any kind. What it does carry is its provenance: the recipe’s name, its version, its parameters, and the run that produced it, so the same map can be recomputed from the same rows, and each shared funder can be traced to the return that reported each grant.

The recipe’s one judgment call is the intermediary ceiling: a funder reaching more than a thousand organizations in the window is shown as reaching the anchor but not counted toward any shared score. Without the ceiling, the biggest donor-advised fund sponsors connected everyone to everyone and the map said nothing.

A map exists for every organization with at least two shared funders with someone: 221,364 of them in this build.

Where to look on the site: The shared-funder map and funder discovery, which also describes how the recipe was validated, below.


7. What the vectors are for, and how well the recommendations work

The build of 19 October was the first to carry vectors for the country: the mission, program descriptions, and grant purposes of every filer, 1,991,815 distinct texts, embedded into 512-number vectors by Amazon Titan Text Embeddings, so that texts can be compared by meaning rather than by words. Two things use them.

The first is a second recipe, funder discovery: for an organization with a mission, find the texts in its state that read most like it and that lead to a funder (a grant purpose leads to the funder who wrote it; a mission or program leads to the funders of the filer that wrote it), and rank those funders by summed similarity. It is the question “who funds work like this.” The build computed it for about 506,000 organizations. No page shows it yet; it is kept in the graph with its provenance, and the reason it is not shown yet is in the numbers that follow.

The second is the nearest-name tier of resolution, which needs the recipient names embedded, not the texts. That job is next.

How the recommendations were tested. The project does not ask a reader to trust a recipe. It computes the recipes from filings through tax year 2024, then asks which of the recommended funders actually appear, for the first time, as a funder of that organization in the 2025 filings. A recommendation that comes true is a hit. Precision is hits over recommendations; recall is hits over all the new funders that appeared; chance is what a random funder would score.

The table scores only the organizations for which the 2025 filings could confirm or refute a recommendation. Discovery was computed for about 506,000 organizations; 379,767 of them could be scored.

The national results, in plain terms:

RecipeOrganizations it can speak aboutOf its first recommendations, how many came trueOf the new funders, how many it found in ten
Shared funders (the map)89,67111.2%16.4%
Funder discovery (text similarity)379,7671.4%9.5%

Chance is under 0.002 percent per recommendation, so both recipes are far above it. But the shared-funder structure is eight times as precise as text similarity. If an organization has funders, its map is the better guide to who might fund it next. If it has none yet, discovery is the only guide the graph has, and one in seventy of its first suggestions is a funder who did in fact come. That is a real result and a modest one, and it is why discovery is computed and measured before it is shown.

Recall is a floor in every case: a funder whose 2025 return had not been released by October 2026 is invisible to the measure, and the 2025 set is still filling.

Where to look on the site: the map page’s validation section. The full report, with the tables at one, three, and ten slots, is kept with the project.


8. Identifiers, and citing what you find

Everything in the graph has one identifier, built from the record that names it, the same on every build and in every environment: an organization by its EIN, a return by the IRS’s object identifier, a grant by its filer, period, and a hash of the row, a subject by its code. They look like web addresses under https://fundergraph.org/id/, and they name things, not pages.

Open https://fundergraph.org/id/org/941156365 and you are redirected to Stanford’s page. Open an identifier for a thing no page shows on its own, such as a single return, and the response is “not found.” The identifier is still the name of the thing, and the record is still in the graph; what is missing is a page for it. This is the discipline the September article described, carried to production: identifiers are stable, so a citation made today names the same organization, return, or grant in any later build. What a later build may change is the facts shown about it, which is why a citation also carries the build date.

A citation a reader can check looks like this:

FunderGraph, "[organization name]," fundergraph.org/org/[EIN], build of [date shown on the page].
Grant from [funder] to [recipient], [amount], tax period [month year],
[Form 990 Schedule I or Form 990-PF Part XV], IRS object identifier [as shown on the row].

The filed facts are public records and need no permission to quote. The computed facts (a resolution link, a map, a search ranking) are offered under CC BY 4.0; cite FunderGraph and the page.

Where to look on the site: Identifiers and citation and the terms.


9. The numbers, and the limits

What the build of 19 October 2026 holds:

MeasureCount
Organizations with a page1,564,359
Of those, on the current master file with a return on record1,537,247
Of those, filers not on the current master file27,112
Master-file rows with no return on record (shown by name, no page)427,711
Returns read1,147,944 from 25 archives
Grant rows4,571,995 from 157,473 filers
Grant rows stating the recipient’s EIN1,640,692
Grant rows naming a recipient without a number2,914,224 (1,121,568 distinct names)
Grant rows in neither group above17,079
Grant rows resolved to organizations by name1,259,941
Texts embedded1,991,815
Shared-funder maps221,364
Facts in the graph317,277,905 quads in ten families
Items served to the site2,743,454

By tax year, the grant rows fall mostly in two years, 2,451,354 for 2024 and 1,594,321 for 2025, with 427,500 for 2023 and a thin tail either side. That shape is the first limit.

A recent year is always incomplete. A return is filed five to eleven months after the fiscal year ends and posted later still. Between the end of an organization’s fiscal year and its return appearing here, expect a year or more. An absence is not evidence that no grant was made.

Paper filers and postcards are absent. The IRS publishes e-filed returns; most organizations have been required to e-file since tax year 2020, so older paper years are missing and a few filers still are. Form 990-N, the postcard, carries no financial content and no grants; an organization that files only the postcard has a page from the master file and nothing on it from a return.

More than half the name-only recipients are unresolved. The 1,653,653 rows in the review queue are shown as written, under their funder, and count toward nothing else. The nearest-name tier, when its names are embedded, is expected to resolve a large share of them; Arizona’s test of that tier cut its no-candidate queue from 5,393 names to 101.

Website grants and federal awards are not in yet, and funder discovery is computed but not shown. Each is stated on the coverage page as a sentence a reader can hold the site to.

Where to look on the site: What is in the graph, whose counts carry the date they were measured.


10. How it was built, briefly

The architecture is the one the September article walked through, unchanged in its principles: Parquet is the source of truth; every stage is a pure function of its inputs; every entity has a minted identifier and its own named graph; the matcher’s conclusions live in their own graph so they can be retracted without touching a fact; every computed result carries its recipe, version, and parameters; and an incremental rebuild must converge, byte for byte, with a full one. The prototype’s four catalog questions became the site’s four kinds of page.

What changed is scale, and scale taught a few lessons in plain terms.

A first run at national scale is a measurement, not a deployment. Four properties of the platform were encountered for the first time at this scale, each stopping a run: a database key that admits only so many writes a second, a string too long for the language runtime, a permission a new call needed, and a table that answers only in part while it grows. Each fix was small; each was invisible at the scale of a state. The project’s decision log records every one with the date, the cause, and the alternative rejected.

The expensive thing is writing, not computing. A full run that rebuilds the country costs about 85 dollars, and about 50 of it is writing the 2.7 million items the site reads. Compute for the whole run, which takes about fourteen hours with vectors, is a few dollars. The design therefore writes only what changed, and the first run that seeds the record of what exists is the slow one.

Measure before you show. Funder discovery took the most engineering of anything in the build (an exact nearest-neighbour search across every core of the machine, a candidate rule, a national batch embedding), and its first national measurement said it was far weaker than the shared-funder structure. It stays unshown until it is useful, and the number that decides that is published.

Documentation is a deliverable. Every module opens with a prologue for a stranger; every decision has a dated entry with what was rejected; and the site’s own documentation pages were written for the people expected to read them: researchers, journalists, grant seekers, fiscal sponsors. Every figure on them is recomputed from the tables and dated.

The whole thing runs on AWS: object storage for the three layers, one container task for the pipeline, DynamoDB for the items and the vectors, AppSync as the site’s query layer, and CloudFront for the site. There is no server to keep running between builds.

Where to look: the September article, The semantic medallion in TypeScript, for the concepts; the project’s docs/decisions/ for every choice made along the way.


11. What comes next

In order of value to a reader:

  • Embedding the recipient names, so the nearest-name tier of resolution runs nationally and the review queue shrinks. This is the single biggest improvement left to the graph’s edges.
  • A monthly refresh that runs by itself, reading each new IRS archive and rebuilding only what changed.
  • Showing funder discovery on an organization’s page, once a better candidate rule or threshold lifts its precision. The baseline for that is now published.
  • Funders’ websites and federal awards, both built, both tested, neither yet run for the country.
  • Accounts, so that a reader can save what they find.

12. Where to go next

  • Start with an organization you know. Search by name in the header, open its page, and follow a grant to the return behind it. The verify page says what every word beside the row means.
  • Read How FunderGraph reads a filing once; it is the short form of everything the pages do.
  • If you are a researcher or a journalist, Where the facts come from and Verifying and citing a fact were written for you.
  • If you are looking for funders, open your organization’s page and its shared-funder map, and read the map page for what the map claims and does not.
  • If you run a fiscal sponsorship, the sponsors page says how your projects are shown and how to claim a listing.
  • If something is wrong, write to hello@fundergraph.org with the page, the fact, and what the record says. A misread is fixed in the next build and logged; a record that is wrong stays as filed, because the facts are what was filed.