Tools / NIH RePORTER Grants Scraper – Federal Research Funding API
NIH RePORTER Grants Scraper – Federal Research Funding API
Search NIH-funded research projects via the official NIH RePORTER API: keyword, fiscal year, institute, activity code, organization, state, PI, award-amount and award-notice-date filters, plus an optional PubMed join. Auto-chunks past the API's 15,000-row wall. Watch mode returns only what's new since your last run; add watchChanges to also catch a no-cost extension, an administrative supplement, or a project ending on a project you already got.
Run it
Pay-per-result on Apify, no FetchSmith account needed. Use your own Apify API token, or hit Run on the Store page with no token at all.
curl -X POST "https://api.apify.com/v2/acts/fetchsmith~nih-reporter-scraper/run-sync-get-dataset-items?clean=true" \
-H "Authorization: Bearer YOUR_APIFY_TOKEN" -H "Content-Type: application/json" \
-d '{"fiscalYears": [2024], "keyword": "alzheimer", "maxResults": 100}'
Returns the rows as JSON when the run finishes. A hosted FetchSmith API (one key, no Apify account, see API docs) is planned but not open yet.
Output fields
applId projectNum coreProjectNum subprojectId fiscalYear projectTitle activityCode awardType fundingMechanism awardAmount directCostAmt indirectCostAmt isActive isNew projectStartDate projectEndDate budgetStart budgetEnd awardNoticeDate dateAdded agencyCode icCode icAbbreviation icName icFundings opportunityNumber cfdaCode studySection spendingCategoriesDesc contactPiName principalInvestigators programOfficers orgName orgCity orgState orgCountry orgZip orgDeptType orgUei orgType congDist latitude longitude terms url abstractText publicHealthRelevance publicationCount pubmedIds _watchChangeType _watchPrevious
Sample output
{
"activityCode": "P30",
"applId": 10862591,
"awardAmount": 1,
"fiscalYear": 2024,
"icAbbreviation": "NIA",
"icName": "National Institute on Aging",
"orgCity": "Los Angeles",
"orgName": "UNIVERSITY OF SOUTHERN CALIFORNIA",
"orgState": "CA",
"projectEndDate": "2025-06-30T00:00:00",
"projectNum": "5P30AG066530-05",
"projectStartDate": "2020-09-01T00:00:00",
"projectTitle": "Alzheimer Disease Research Center",
"publicationCount": 899,
"studySection": "ZAG1-ZIJ-G(J1)",
"url": "https://reporter.nih.gov/project-details/10862591"
}
Guides
- NIH RePORTER codes Quebec as two different states, and asking for the valid one returns 2 institutions out of 21 — org_states QC and PQ are both live codes in NIH RePORTER today, holding disjoint sets of awards. QC is effectively McGill plus one Montreal institute; PQ holds the other 19 organizations and is still being issued in FY2026. A valid-value check cannot catch this — live-measured counts, per-institution.
- NIH RePORTER's shared-search links silently drop every filter you add alongside them — but not offset, limit, or sort — Pasting a reporter.nih.gov shared-search link into the API as search_id works, but any criteria sent with it is silently ignored even when it should return zero rows. Pagination and sorting params are unaffected — live-verified, both directions.
- NIH RePORTER's 15,000-row wall doesn't error — it silently shrinks your page, and a plural typo returns 2.97 million unfiltered rows — NIH's public grants API needs no key, but the offset wall truncates results instead of rejecting them, and an unrecognised criteria field name returns the entire database with HTTP 200.
Only publicly accessible pages are read. Respect the source site's terms when using the data.