Official funding sources — located, consulted, and audited
Last updated: 2026-08-09
Companion to docs/Progress/reports/2026-08-09-llm-coverage-funding-figures.md (Addendum 5–7).
This file documents every official government / national-funder source that
FundFinder consults, how it is fetched, and the audit status of each. It was
created after the grants.gov blind spot (the legacy search API was retired
silently) to make sure we can see, at a glance, which official sources are
covered, how, and which are still missing.
1. National / official funder sources (opportunities)
| Source id |
Country |
Official source |
How we fetch |
Records (2026-08-09) |
Status |
us-grants-gov |
US |
simpler.grants.gov (new official search) — full-universe CSV export at GET https://simpler.grants.gov/api/search/export |
Full 40-column export, posted + forecasted |
1,699 |
✅ full universe (benchmarked 100% vs official export) |
eu-horizon |
EU |
EU Funding & Tenders portal — SEDIA search API https://api.tech.ec.europa.eu/search-api/prod/rest/search |
Full open+forthcoming topic universe (~900) |
788 |
✅ full universe (was capped at 80 — fixed) |
eu-erc |
EU |
ERC grant schemes |
Scheme listing |
11 |
✅ complete (13 schemes) |
uk-ukri |
GB |
UKRI opportunities — WordPress feed, paginated ?paged=N |
Full feed (128 items) |
128 |
✅ full feed (was 20-item page 1 — fixed) |
de-dfg |
DE |
DFG funding programmes |
Programme listing |
20 |
✅ |
fr-anr |
FR |
ANR open calls |
Open-calls listing |
28 |
✅ |
nl-nwo |
NL |
NWO calls |
Calls listing |
12 |
✅ |
ch-snsf |
CH |
SNSF open calls |
Funding listing |
7 |
✅ |
ca-nserc |
CA |
NSERC funding |
Funding-opportunity listing |
20 |
✅ |
jp-jsps |
JP |
JSPS grants |
Grant-programme listing |
18 |
✅ |
hk-rgc |
HK |
UGC/RGC funding opportunities |
Index listing |
10 |
✅ |
nz-te-aparangi |
NZ |
Royal Society Te Apārangi funds |
Funds/fellowships listing |
21 |
✅ (added 2026-08-09) |
mx-secihti |
MX |
SECIHTI convocatorias — CONAHCYT restructured into SECIHTI |
Category-listing crawl (2 categories, 20 calls) |
20 |
✅ new 2026-08-09 (8 open) |
wun-rdf |
— |
WUN Research Development Fund |
Article |
1 |
✅ |
Total opportunity records in data/grants_snapshot.json: 2,783 (2783 rows
in the spreadsheet / live sheet).
2. University sources (news — owned by the news agent)
hk-cuhk (CUHK), hk-hku (HKU), hk-hkust (HKUST), gb-leeds (Leeds),
gb-bristol (Bristol), gb-sheffield (Sheffield), au-uq (UQ), au-uts
(UTS), nz-auckland (Auckland), nl-maastricht (Maastricht) — official
university news/RSS pages. Handled by the separate news crawler module
(data/news_snapshot.json); documented here for completeness only.
3. Case study: the grants.gov blind spot (why this file exists)
- The original
GrantsGovAdapter called the legacy
POST https://api.grants.gov/v1/api/search2 endpoint. Grants.gov retired
it — it now returns hitCount: 0 for every query. Because the crawler
runner is non-strict, crawls "succeeded" while silently writing nothing.
- Even while it worked, it fetched only
rows=80, keyword="research",
oppStatuses=posted — a tiny biased subset of the ~1,700-opportunity
universe.
- Discovered replacement (public, auth-free): the new official search UI
at simpler.grants.gov is server-
rendered and its CSV download button calls a public server route:
GET https://simpler.grants.gov/api/search/export[?status=&agencies=&category=]
→ the full universe as a 40-column CSV (opportunity_number, award
floor/ceiling, estimated total programme funding, expected awards,
applicant eligibility description, agency contact, FOA additional_info_url,
post/close dates…).
- API docs:
https://api.simpler.grants.gov/docs (+ openapi.json); the
authenticated api.simpler.grants.gov/v1/opportunities/search is NOT
needed — the export route is the public path.
- Benchmark:
scripts/benchmark_grants_gov.py compares our snapshot to
the official export by opportunity_number — currently 1,699/1,699
(100%), 0 missing, 0 close-date mismatches. Report:
data/grants_gov_benchmark.json.
4. Coverage audit (2026-08-09)
Healthchecked all 23 adapters against their live official endpoints — none
were dead, but two more sources had the same "healthy but biased" pattern:
| Source |
Was fetching |
Actual universe |
Fix |
Now |
eu-horizon |
80 topics (target_count=80) |
~926 open/forthcoming |
page_size 100 × 12 pages, target 1000, topic-id dedupe (SEDIA pagination repeats topics) |
788 |
uk-ukri |
20-item RSS page 1 |
128 items |
paginate feed ?paged=N until exhausted |
128 |
Also: runner.py now hard-dedupes by record id when merging snapshots.
5. Official sources still missing (WUN member countries)
Reachability re-probed from the dev host on 2026-08-09 (curl, 10 s cap).
| Country |
Official funder |
URL |
Why not yet crawled |
| AU |
Australian Research Council (ARC) |
https://www.arc.gov.au/grants |
Times out from our host (likely geo-blocked); needs a host with AU reach |
| ZA |
National Research Foundation (NRF) |
https://www.nrf.ac.za/funding/ |
Now also times out from our host (previously reachable); needs a host with ZA reach + a calls-filtered crawl |
| BR |
CNPq |
https://www.gov.br/cnpq |
Reachable but Portuguese and the portal was restructured (old chamadas URLs 404); needs a tailored crawler on the current layout |
| TH |
NRCT |
https://www.nrct.go.th/ |
Returns 403 to our crawler (bot filter); Thai-language listing |
| TW |
NSTC |
https://www.nstc.gov.tw/ |
Reachable but mostly Traditional Chinese; needs a tailored crawler |
| UG |
UNCST |
https://uncst.go.ug/ |
Times out from our host; no central call listing found |
| GH |
(no central research-council listing) |
— |
— |
Done 2026-08-09: MX CONAHCYT → SECIHTI (mx-secihti, 20 calls, 8 open) —
see §1. Priority for the next pass: ZA NRF (from a non-blocked host) and
TW NSTC (Chinese-tailored crawler).
6. Reference / verification data
- The colleague's download:
/Users/simonwang/Documents/FITE/TDGmathFeedback/Docs/TestingData/grants-search-202608091138.csv
(1,701 rows, official simpler.grants.gov export).
- Fresh export anytime:
curl "https://simpler.grants.gov/api/search/export" -o grants-search.csv
- Benchmark script:
python scripts/benchmark_grants_gov.py [reference.csv]
7. Recurring audit checklist
- Run
python -c "from grantfinder.crawlers.runner import ADAPTERS; [print(a().healthcheck()) for a in ADAPTERS.values()]" — any ok=False is a dead endpoint to investigate.
- Watch for row caps / feed truncation (the grants.gov trap) — spot-check counts against the official listing page.
- After any crawl change, re-run the grants.gov benchmark and re-check the
live sheet (
/opportunities.xlsx → permanent sheet refresh).