NIH RePORTER API: Search Grant Funding, Award Amounts, and Principal Investigators
Search NIH grant awards by topic, agency, institution, or state. Returns project title, abstract, award amount, and PI data for research funding intelligence. No API key required.
The actor referenced in this article. Pay only for results delivered.
The NIH funds over $40 billion in research each year across 27 institutes and centers. Every active grant is recorded in NIH RePORTER with project details, award amounts, and principal investigator data. Our NIH RePORTER Scraper makes that database searchable without navigating the export interface.
What you get per grant
project_num— NIH project numbertitle— project titleabstract— full project abstractagency— funding agency (e.g. NCI, NIAID, NHLBI)award_amount— total award amount in USDfiscal_year— fiscal year of the awardpi_names— list of principal investigator namespi_profile_ids— NIH profile IDs for each PIorganization— institution namecityandstate— institution locationstart_dateandend_date— project datesactivity_code— grant mechanism (R01, R21, K99, etc.)scraped_at— ISO timestamp
Python example
import requests, time
run = requests.post(
"https://api.apify.com/v2/acts/themineworks~nih-reporter-grants/runs",
headers={"Authorization": f"Bearer {APIFY_TOKEN}"},
json={
"query": "CRISPR gene editing cancer",
"agency": "NCI",
"maxResults": 100
}
)
run_id = run.json()["data"]["id"]
while True:
r = requests.get(
f"https://api.apify.com/v2/actor-runs/{run_id}",
headers={"Authorization": f"Bearer {APIFY_TOKEN}"}
).json()
if r["data"]["status"] in ("SUCCEEDED", "FAILED"):
break
time.sleep(5)
grants = requests.get(
f"https://api.apify.com/v2/actor-runs/{run_id}/dataset/items",
headers={"Authorization": f"Bearer {APIFY_TOKEN}"}
).json()
total = sum(g.get("award_amount", 0) for g in grants)
print(f"{len(grants)} grants, total ${total:,.0f}")
for g in grants[:5]:
print(g["title"], f"${g['award_amount']:,.0f}")
Map funding by institution
import pandas as pd
df = pd.DataFrame(grants)
df["award_amount"] = pd.to_numeric(df["award_amount"], errors="coerce")
by_org = df.groupby("organization")["award_amount"].agg(["sum", "count"])
by_org.columns = ["total_funding", "grant_count"]
by_org = by_org.sort_values("total_funding", ascending=False)
print(by_org.head(20))
Parameters
| Parameter | Default | Notes |
|---|---|---|
query | — | Keyword search across title and abstract |
agency | — | NIH agency code (e.g. "NCI", "NIAID") |
activityCode | — | Grant mechanism (e.g. "R01", "K99") |
state | — | Institution state code |
fiscalYear | latest | Fiscal year of award |
maxResults | 100 | Maximum grants to return |
Use cases
Academic business development. Identify PIs at universities who have recently received NIH funding in your technology area. Approach them as potential research collaborators or licensing partners.
Research landscape mapping. Before launching a new research program, pull all active NIH grants in the space to understand who is funded, at what scale, and by which agencies.
Grant writing support. Pull funded abstracts for R01s in your area to understand how funded investigators frame their specific aims and what language resonates with study sections.
Startup competitive intelligence. SBIR and STTR grants fund early-stage companies. Search for grants awarded to companies rather than universities to map the venture-fundable startups receiving NIH validation.
Life sciences sales. Target institutions and PIs with active NIH funding in your product’s application area — active funding means active spending on lab consumables, instruments, and software.
Pricing
$0.003 per grant record. Empty queries are not charged.
Available on Apify.
Explore the scraper referenced in this article — see inputs, outputs, and pricing, then run it on Apify.
Airbnb Scraper: Listing Prices, Ratings, and Availability Without the API
Airbnb has no public listings API. Here's how to pull nightly price, rating, superhost status and coordinates from Airbnb search results using Python.
Maps Leads: Verified Email Extraction from Google Maps Business Listings
How to pull B2B leads from Google Maps with MX-verified emails, past the official API's 120-result cap, and pay only for contactable businesses.
Realtor.com Scraper: Property and Agent Data Without the MLS Paywall
Scrape Realtor.com listings in Python — price, beds, baths, county, and the listing agent + brokerage office on every record. No login, no API key.