How Search990 works.
Search990 indexes over 5 million nonprofit filings and 21 million grants. It uses a semantic and keyword search hybrid, so results are based on what an organization or grant is actually about, not just whether specific words appear in the filing text.
The public nonprofit record is massive, repetitive, and hard to search directly.
Nonprofits file Form 990s with the IRS each year, disclosing mission, finances, and grants given or received. Search990 indexes over 5 million organization filings and 21 million individual grant records. Most filings use a limited, repetitive set of legal and administrative language, which makes the signal easy to bury.
Raw filings
IRS filings are public, but they were written as compliance documents, not as a discovery interface.
Word overlap and organizational similarity are not the same thing.
Keyword search matches on the presence of specific words. On this dataset, that creates two failure modes: common terms return hundreds of thousands of weak matches, while specific terms can return nothing if the filing uses different language for the same activity.
Common terms saturate
Words like community, youth, education, and services appear everywhere, so exact matching produces huge result sets with little intent.
Specific terms disappear
A filing may describe the right work without using the phrase a researcher typed, especially in short grant-purpose text.
Exact words are not intent
Keyword search measures overlap. Search990 needs to measure whether two organizations or grants are about similar things.
Real questions are exploratory
People often need to find what they do not already know how to name: adjacent funders, peer programs, and related grant histories.
First, tax filings have to become machine-readable.
Our GrantAtlas data system is the ingestion and API layer underlying Search990. It processes raw IRS tax filings, primarily Form 990 and 990-PF, and converts them into structured data: organization identity, mission text, financials, donors and individual grant transactions.
Entity resolution
GrantAtlas resolves duplicate and renamed organizations so records can point to a stable funder or recipient.
Grant linking
Each grant is linked to both the funder and recipient organization, with amount, year, and purpose text preserved and directly searchable.
Queryable records
The output is a structured dataset built from filings that are otherwise unstructured PDF documents.
Embedding-based matching lets the database respond to meaning.
Mission statements and grant descriptions are converted into vector embeddings: numerical representations trained to capture meaning rather than exact wording. Two entries with different vocabulary can sit close together in embedding space if they describe similar activity.
Search at this scale needs a map, not a scan.
A direct comparison against every embedded grant and filing would be too slow for interactive search. Search990 uses a Hierarchical Navigable Small World (HNSW) graph to make the problem navigable: the query enters a sparse top layer, follows the closest useful neighbor, then drops through denser layers until it reaches the local neighborhood most likely to contain relevant records.
Layered hierarchy
The top layer has relatively few points, so each hop can cover a large distance. Lower layers contain more of the data, so the search can refine once it is in the right region.
One entry point
A search does not begin beside the answer. It starts from an entry node and navigates through the graph, using the query embedding as its compass.
Greedy descent
At each layer, the search keeps moving to a neighbor that looks closer to the query. When no neighbor improves the position, it drops down and continues with a finer map.
Log-shaped narrowing
The route behaves like a log_k(N) search: broad jumps first, then local refinement. That is what lets Search990 zero in on a neighborhood without scanning the full corpus.
The graph finds the neighborhood. The pipeline makes it useful.
The graph search is the speed layer, not the whole answer. Search990 first turns filings and grants into searchable text, embeds that text as semantic vectors, uses the graph to retrieve nearby candidates, then grounds the results back in deterministic organization and grant records.
Normalize
Turn tax filings and grant records into consistent searchable text and facts.
Embed
Represent mission and purpose language as compact semantic vectors.
Navigate
Use the HNSW graph to reach a small high-relevance neighborhood quickly.
Retrieve
Collect nearby organizations, purposes, grants, funders, and recipients.
Ground
Resolve candidates through deterministic Search990 and GrantAtlas API records.
Fast candidate search
The graph stage turns a massive comparison problem into a short route through nearby meanings, which keeps exploratory searches responsive.
Grounded results
After retrieval, candidates are resolved back to Search990 and GrantAtlas records so users see real organizations, grants, funders, recipients, years, and amounts.
Nonprofits need discovery, not just lookup.
A lookup tool helps when you already know the organization, funder, or phrase. Search990 is designed for the earlier, harder moment: when you know the problem you care about, but not the exact institutions, terms, or funding pathways around it.
Program officers
Assess a funding landscape before allocating resources or designing a new strategy.
Researchers and journalists
Trace funding relationships across a cause area without manually reading filings one by one.
Nonprofit staff
Search filing data at national scale without needing a full research team or perfect keyword vocabulary.
Impact measurement teams
Compare cross-sector funding patterns and identify where capital is flowing efficiently.
Public nonprofit data should be searchable by curiosity.
The nonprofit sector already contains the clues: missions, grant purposes, recipients, funders, places, amounts, and years. The hard part is making those clues discoverable when a user does not already know the exact phrase to search. Search990 exists to make that discovery layer possible: AI-enabled search for relevance, grounded by deterministic nonprofit and grant data.
Ask Search990