Data sources
One row per feed, with the layer it sits in, the schedule it is on, and the crawl history behind it. A feed we have not run yet reports no success rate — an unrun feed has no record of reliability to publish.
This page describes the GrantTrove grant catalogue: what it is built from, how often each feed is scheduled, and how much of that schedule has actually run. It is the page to read before quoting any other figure on this site.
| Source | Layer | Scheduled cadence | Last successful crawl | Success rate, 30 days | Records in catalogue |
|---|---|---|---|---|---|
| Grants.gov Federal Portalgrants-gov | A · Machine-readable feed | Daily | 2026-10-15 | 97% · 31d | 4,339 |
| IRS Form 990 via ProPublicairs-990 | B · Foundation filing history | Weekly | 2026-10-11 | Not measured yet | 6,827 |
| California Grants Portalstate-ca | C · Portal page, read as prose | Daily | 2026-10-15 | 100% · 31d | 208 |
Success rate is what each sweep in the last 30 days came away holding: of the records it looked at — everything the source listed, less anything the night’s spend ceiling stopped it reaching — the share it either stored a fresh reading for or confirmed unchanged. It is followed by the number of days it was averaged over. It is published only once a feed has run, and never averaged over days that do not exist. Scheduled cadence is the schedule a feed is configured on — a plan, not evidence that it ran.
Every feed here has run
Every feed listed above has run and has rows attributed to it. Rather than show a cadence we have never honoured, every measured column for a feed that has not run reads Not run yet.
Crawl politeness
We fetch source pages on the schedule in each feed’s row and honour robots directives. A failed crawl never overwrites a stored record; it marks the record for recheck.
What counts as a change
A stored field differing from the live page. Layout edits, tracking parameters and reordered sections do not count and do not move a check date.
When a source fails
Three consecutive failures spanning at least 48 hours before a record’s status changes, and a whole-source failure rate past its threshold stops the sweep entirely rather than rewriting records on bad evidence.
Counting rules
Every figure this site publishes about its own size, with the rule that produced it and the day it was read. The counts differ from one another on purpose: a sitemap that listed duplicate and person rows would be a list of links to pages that answer 404, and a feed’s own row count that quietly included rows the feed did not write would be a claim about that feed. Cite the name, not the number alone.
| Count | Current value | Measured on | What it counts | Printed on |
|---|---|---|---|---|
| Records linked | 4,544 | 2026-10-15 | Every grant record we hold, less the sandbox records the federal registry publishes for testing, whose pages answer 404. | Home page, /grants, the grants sitemap |
| Grant rows held | 4,547 | 2026-10-15 | Every grant record we hold, with no exclusion. Larger than Records linked by the sandbox records, which a feed really did write and which we really do not index. | This page, the grant column of the table above |
| Funder rows held | 7,334 | 2026-10-15 | Every row in the funder table, with no exclusion of any kind, including duplicates folded into another organisation and rows that turned out to name a person. | Home page |
| Funder rows attributed to the 990 feed | 6,827 | 2026-10-15 | Funder rows naming a feed that writes organisations. Smaller than Funder rows held by the rows that name no feed and the rows a grant feed created while importing a record. | This page, the organisation rows of the table above |
| Funder profiles indexed | 7,222 | 2026-10-15 | Funder rows that have a page worth crawling: not folded into another organisation, not a person, not a sandbox agency. The other three answer 404 or redirect. | /funders, the funders sitemap |
| Foundations with a live row | 6,802 | 2026-10-15 | Rows classified foundation and not folded into another. The denominator of the 990 coverage sentence, because only a foundation files a 990-PF for us to parse. | /funders |
| Recipient profiles | 53,204 | 2026-10-14 | Every row in the recipient table on the day beside it. Read from a file written at deploy time, not counted per request, so an import since that day is not in it — the recipients sitemap lists the live table and is larger when one has run. | /recipients |
Measured on is the day the value was read, not the day this page was written. Every row but the last is counted on this request; the last is read from a file written when the site was last deployed, and carries that file’s day. Records in the catalogue, at the top of this page, is Grant rows held plus Funder rows attributed to the 990 feed — every row the table above can put behind a named source.
Where the differences come from
- Grant rows held / Records linked differ by 3: sandbox records the federal registry publishes for testing, whose pages answer 404.
- Funder rows held / Funder profiles indexed differ by 112: 99 folded into another organisation, 81 that name a person, 2 sandbox — overlapping, so the three do not sum to the difference.
- Funder rows held / Funder rows attributed to the 990 feed differ by 507: funder rows carrying no feed at all, plus rows a grant feed created while importing a record.
The fields on every record — amounts, deadlines, eligibility, the source link and the verification stamp — are free to read without an account, and stay that way. What the paid tiers add is alerts, tracking and workspaces, never access to a field.