# NIH RePORTER Scraper: Research Grants | $1/1K (`one_dollar_store/nih-reporter-grants`) Actor

$1 per 1,000 results, platform usage included. US NIH research grants and awards from the official RePORTER API: title, abstract, award amount, institute, organization, principal investigators, dates, terms. Search by keyword, year, institute, state or award size. No key.

- **URL**: https://apify.com/one_dollar_store/nih-reporter-grants.md
- **Developed by:** [One Dollar Store](https://apify.com/one_dollar_store) (community)
- **Categories:** Other, Business
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.00 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## NIH RePORTER Scraper: research grants and awards by keyword, year or institute

**$1 per 1,000 projects. Platform usage included. No rental, no minimum.**

Three of the four most used NIH RePORTER actors on Apify Store charge $2.00 to $4.00 per 1,000 results (Store prices checked 20 October 2026). The fourth bills per source check and per change instead of per result, so it is left out of this comparison. This actor returns the same kind of grant data for $1.

[Open it in Apify Console](https://console.apify.com/actors/53yUsx0ihSu9rzYBS/input)

### What it costs

| Projects | This actor | Most used NIH RePORTER actors on the Store |
|---|---|---|
| 1,000 | $1.00 | $2.00 to $4.00 |
| 10,000 | $10.00 | $20 to $40 |
| 100,000 | $100.00 | $200 to $400 |

Plus $0.001 per run. A weekly pull of 500 new awards costs about $0.50 a run, so roughly $2 a month.

### Why people switch

- **One flat price.** Compute is included, so the bill follows the number of projects and nothing else. A 50 project test run measured about $0.0085 of platform cost per 1,000 rows.
- **The full record.** Each row has the abstract, direct and indirect costs, the administering institute, the study section, the grantee organization, every principal investigator with a profile ID, program officers, indexing terms and spending categories.
- **Filters that match how grants are found.** Keyword, fiscal year, institute, organization name, state, investigator, activity code (R01, R21, K99 and so on), award size and award notice dates.
- **Polite to NIH.** The actor waits between requests, as the RePORTER page asks, and never needs a key.

### Quick start

1. Open the actor, type a search text, press **Start**.
2. Or paste this input:

```json
{ "searchText": "CRISPR gene editing", "fiscalYears": ["2025"], "includeAbstract": true, "maxItems": 50 }
```

3. Download the results as JSON, CSV or Excel, or read them through the API.

### Use it from code

```bash
curl -X POST "https://api.apify.com/v2/acts/one_dollar_store~nih-reporter-grants/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"searchText": "CRISPR gene editing", "fiscalYears": ["2025"], "maxItems": 50}'
```

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("one_dollar_store/nih-reporter-grants").call(
    run_input={"searchText": "CRISPR gene editing", "fiscalYears": ["2025"], "maxItems": 50}
)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item["awardAmount"], item["organization"], item["title"])
```

### Use it from an AI assistant

Claude, ChatGPT, Cursor and other assistants can call this actor through Apify's MCP server. Add it with this server address:

```
https://mcp.apify.com?tools=one_dollar_store/nih-reporter-grants
```

Then ask, for example: "List the 25 largest NCI grants awarded to Stanford in fiscal year 2025, with the principal investigators."

### Switching from another NIH RePORTER actor

Most NIH RePORTER actors take a search text, a fiscal year and a result limit. Here they are `searchText`, `fiscalYears` (a list) and `maxItems`. The core fields are `projectNumber`, `title`, `abstract`, `awardAmount`, `fiscalYear`, `organization` and `principalInvestigators`.

### Input

| Field | Type | Default | What it does |
|---|---|---|---|
| `searchText` | text | none | Words to find in titles, abstracts and indexing terms. |
| `searchMode` | text | `and` | `and` needs every word, `or` needs at least one. |
| `searchIn` | list | all three | Any of `projecttitle`, `abstracttext`, `terms`. |
| `fiscalYears` | list of text | all years | NIH fiscal years such as `2025`. |
| `institutes` | list of text | none | Institute or center codes such as `NCI`, `NIAID`, `NHLBI`, `NIMH`. |
| `organizations` | list of text | none | Part of a grantee name such as `Stanford` or `Mayo`. |
| `states` | list of text | none | Two letter US state codes of the grantee. |
| `principalInvestigators` | list of text | none | `Smith` matches any name part; `Jane Smith` is read as first and last name. |
| `activityCodes` | list of text | none | Grant types such as `R01`, `R21`, `K99`, `U01`. |
| `minAward`, `maxAward` | number | none | Award size limits in US dollars for the fiscal year. |
| `awardedFrom`, `awardedTo` | text | none | Notice of grant award dates, `YYYY-MM-DD`. |
| `sortBy` | text | `default` | `default`, `newest` (project start) or `largest` (award amount). |
| `includeAbstract` | true or false | true | Turn off for smaller rows. |
| `maxItems` | number | 100 | Total projects for the run, 10 to 10,000. |

All filters combine with AND. Example:

```json
{
  "searchText": "immunotherapy",
  "fiscalYears": ["2025"],
  "institutes": ["NCI"],
  "states": ["CA"],
  "minAward": 300000,
  "sortBy": "largest",
  "maxItems": 200
}
```

### Output fields

| Field | Meaning |
|---|---|
| `projectNumber`, `coreProjectNumber`, `applicationId` | Full project number with the year, the number without the year, and the RePORTER ID. |
| `fiscalYear`, `title`, `abstract` | Funding year, project title and abstract. |
| `awardAmount`, `directCosts`, `indirectCosts` | Funding for that fiscal year in US dollars. |
| `administeringIc`, `administeringIcName`, `agencyCode`, `fundingIcs` | Institute or center that runs the grant, the agency, and every institute that funds it. |
| `activityCode`, `awardType`, `awardTypeName`, `fundingMechanism` | Grant type and how the application was classed. |
| `assistanceListing`, `opportunityNumber`, `studySection` | Catalog number, funding opportunity and review group. |
| `projectStartDate`, `projectEndDate`, `budgetStart`, `budgetEnd`, `awardNoticeDate` | Dates, `YYYY-MM-DD`. |
| `isActive` | NIH's active flag, true while the latest budget end date is in the future. |
| `organization`, `organizationCity`, `organizationState`, `organizationCountry`, `organizationType`, `department`, `congressionalDistrict` | The grantee. |
| `principalInvestigators`, `contactPi`, `principalInvestigatorIds`, `programOfficers` | People. |
| `terms`, `spendingCategories` | NIH indexing terms and spending categories. |
| `dateAdded`, `url` | When RePORTER added the record and the project page link. |

### Sample results

Real rows from a test run on 20 October 2026. The abstract, the term lists and a few other fields are left out here to keep the page short; every row has them.

```json
[
  {"projectNumber": "5R01MH125979-05", "applicationId": 11015029, "fiscalYear": 2025, "title": "Gene editing in the brain with CRISPR-PEG", "awardAmount": 667668, "directCosts": 510918, "indirectCosts": 156750, "administeringIc": "NIMH", "activityCode": "R01", "awardTypeName": "Non-competing continuation", "fundingMechanism": "Non-SBIR/STTR", "opportunityNumber": "PA-20-185", "projectStartDate": "2021-04-01", "projectEndDate": "2027-01-31", "awardNoticeDate": "2025-02-13", "isActive": true, "organization": "UNIVERSITY OF TEXAS HLTH SCIENCE CENTER", "organizationCity": "SAN ANTONIO", "organizationState": "TX", "department": "PHYSIOLOGY", "principalInvestigators": ["Hye Young Lee", "NIREN MURTHY"], "url": "https://reporter.nih.gov/project-details/11015029"},
  {"projectNumber": "1R43HG014420-01", "applicationId": 11182095, "fiscalYear": 2025, "title": "A Novel Epigenetic Editing Platform", "awardAmount": 306094, "directCosts": 225339, "indirectCosts": 61755, "administeringIc": "NHGRI", "activityCode": "R43", "awardTypeName": "New", "fundingMechanism": "SBIR/STTR", "opportunityNumber": "PA-24-245", "projectStartDate": "2025-09-20", "projectEndDate": "2026-08-31", "awardNoticeDate": "2025-09-20", "isActive": false, "organization": "ACTIVE MOTIF, INC.", "organizationCity": "CARLSBAD", "organizationState": "CA", "principalInvestigators": ["Brian Stanley Egan"], "url": "https://reporter.nih.gov/project-details/11182095"},
  {"projectNumber": "1ZIAHL002339-34", "applicationId": 11404455, "fiscalYear": 2025, "title": "Optimization of genetic modification of HSCs in the NHP model and creation of relevant preclinical models of human disease and therapies", "awardAmount": 1308839, "administeringIc": "NHLBI", "activityCode": "ZIA", "awardTypeName": "New", "fundingMechanism": "Intramural Research", "isActive": true, "organization": "NATIONAL HEART, LUNG, AND BLOOD INSTITUTE", "principalInvestigators": ["CYNTHIA E DUNBAR"], "url": "https://reporter.nih.gov/project-details/11404455"}
]
```

### Limits

- **One row per project per fiscal year.** A grant that runs five years appears as five rows when you ask for every year. Group by `coreProjectNumber` to see one line per grant.
- **RePORTER serves the first 15,000 matches of one search.** Past that point it refuses to page. The actor says so in the log. Split bigger pulls by fiscal year or institute.
- **Some fields are empty for some records.** Direct and indirect costs are reported from fiscal year 2012 and not for SBIR or STTR awards. Intramural NIH projects have no grantee city, state or congressional district. `subprojectId` is set only for subprojects, and `opportunityNumber` only when the project answered an announcement.
- **`awardAmount` is the funding for that fiscal year,** not the total over the life of the grant. For a subproject it is the subproject's own cost.
- **`terms` can run to more than 100 entries** per row. Set `includeAbstract` to false and ignore `terms` if you want slim rows.
- **Coverage.** RePORTER holds NIH projects and some projects of other US health agencies such as CDC, FDA and AHRQ. It is not a list of every US research grant.
- **Pace.** NIH asks for no more than one request per second. The actor waits between requests, and each request returns up to 500 projects.
- **Free plan.** A run from a free Apify plan returns the first 10 results.

### FAQ

**What is the cheapest NIH RePORTER scraper on Apify?**
This actor costs $1 per 1,000 projects with platform usage included. Three of the four most used NIH RePORTER actors on the Store charged $2.00 to $4.00 per 1,000 when we checked on 20 October 2026.

**How much does it cost to scrape 10,000 NIH grants?**
$10, plus $0.001 for each run.

**Do I pay for compute or proxy on top?**
No. Platform usage is included in the $1 per 1,000 price, and no proxy is needed.

**Where does the data come from?**
From the official RePORTER API published by the US National Institutes of Health, at api.reporter.nih.gov. It needs no key. NIH updates the data on its own schedule; `dateAdded` shows when a record reached RePORTER.

**Is it legal?**
The actor reads public data only, with no login. RePORTER is a public US government database of funded research. How you use the data is up to you: follow the terms on the NIH RePORTER site and the law where you live. Names of investigators are public record in RePORTER, so handle them as you would any personal data.

**Is this an official NIH product?**
No. It is an independent tool and is not affiliated with or endorsed by the National Institutes of Health.

**How do I follow new awards every week?**
Schedule a weekly run with `awardedFrom` set to a week ago and `sortBy` set to `newest`, and drop rows whose `applicationId` you already hold.

**Can I find every grant of one investigator?**
Yes. Put the name in `principalInvestigators` and leave `fiscalYears` empty. Add the middle initial or institute if a common name returns too many projects.

**Do I need an Apify account?**
Yes. Actors run from an Apify account, and a free account is enough to start: it includes $5 of platform usage every month. You can [sign up here](https://www.apify.com?fpr=ymnoit). This is a referral link and it costs you nothing.

**Is there a limit on the free plan?**
Yes. A run started from a free plan account delivers the first 10 results, then ends with a message and a link to the plans. Any paid plan returns everything you ask for, up to your own limit. The price per result is the same on every plan.

### More from The One Dollar Store

Every actor here costs $1 per 1,000 results, platform usage included. See the whole store: https://apify.com/one_dollar_store

**Health and science**

- [NPI Provider Search](https://apify.com/one_dollar_store/npi-providers-search): US healthcare providers from the NPI registry.
- [PubMed Articles Scraper](https://apify.com/one_dollar_store/pubmed-articles-scraper): Biomedical articles with abstracts and authors.
- [ClinicalTrials.gov Scraper](https://apify.com/one_dollar_store/clinical-trials-search): Clinical studies by condition, drug or sponsor.
- [Product Recalls Scraper](https://apify.com/one_dollar_store/consumer-product-recalls-cpsc): US consumer product recalls from the CPSC.
- [Crossref Scraper](https://apify.com/one_dollar_store/crossref-doi-metadata): Scholarly works by DOI, title or author.
- [EPA ECHO Scraper](https://apify.com/one_dollar_store/epa-echo-facility-compliance): US facility inspections and violations.
- [USGS Earthquakes Scraper](https://apify.com/one_dollar_store/usgs-earthquakes-scraper): Earthquake events with magnitude and place.
- [FDA Recalls Scraper](https://apify.com/one_dollar_store/fda-recalls-scraper): US FDA enforcement reports and recalls.
- [CMS Hospital Quality](https://apify.com/one_dollar_store/cms-hospital-quality-data): US hospital ratings and quality measures.
- [FDA 510(k) Scraper](https://apify.com/one_dollar_store/fda-510k-device-clearances): Cleared medical devices with applicant and date.

### Changelog

- October 2026: first release.

# Actor input Schema

## `searchText` (type: `string`):

Words to look for in project titles, abstracts and indexing terms, for example CRISPR gene editing. Leave empty to filter only by the options below.

## `searchMode` (type: `string`):

All words means every word must appear. Any word means at least one must appear.

## `searchIn` (type: `array`):

Which parts of a project the search text is matched against. Leave all three for the widest search.

## `fiscalYears` (type: `array`):

Only projects funded in these NIH fiscal years, for example 2025. Leave empty for all years since 1985.

## `institutes` (type: `array`):

NIH institute or center codes that administer the grant, for example NCI, NIAID, NHLBI or NIMH. Other agencies in RePORTER such as CDC, FDA or AHRQ also work.

## `organizations` (type: `array`):

Part of the name of the university, hospital or company that holds the grant, for example Stanford or Mayo.

## `states` (type: `array`):

Two letter US state codes of the grantee organization, for example CA or MA.

## `principalInvestigators` (type: `array`):

Names such as Smith or Jane Smith. One word is matched against first, middle and last names. Two or more words are read as first name then last name.

## `activityCodes` (type: `array`):

Three character NIH grant types such as R01, R21, K99, U01 or P30.

## `minAward` (type: `integer`):

Only projects with a total award of at least this many dollars in the fiscal year.

## `maxAward` (type: `integer`):

Only projects with a total award of at most this many dollars in the fiscal year.

## `awardedFrom` (type: `string`):

Only awards whose notice of grant award was issued on or after this date. Format YYYY-MM-DD.

## `awardedTo` (type: `string`):

Only awards whose notice of grant award was issued on or before this date. Format YYYY-MM-DD.

## `sortBy` (type: `string`):

Default is the order RePORTER uses (best match when you give search text). The other choices sort every match before the first rows are returned.

## `includeAbstract` (type: `boolean`):

Adds the full abstract text to every row. Turn it off for smaller, faster results.

## `maxItems` (type: `integer`):

The run stops after this many projects. Minimum 10. RePORTER lets one search reach its first 15,000 matches, so split bigger pulls by fiscal year or institute.

## Actor input object example

```json
{
  "searchText": "CRISPR gene editing",
  "searchMode": "and",
  "searchIn": [
    "projecttitle",
    "abstracttext",
    "terms"
  ],
  "fiscalYears": [
    "2025"
  ],
  "institutes": [
    "NCI"
  ],
  "organizations": [
    "Stanford University"
  ],
  "states": [
    "CA"
  ],
  "principalInvestigators": [
    "Jennifer Doudna"
  ],
  "activityCodes": [
    "R01"
  ],
  "awardedFrom": "2025-01-01",
  "awardedTo": "2025-12-31",
  "sortBy": "default",
  "includeAbstract": true,
  "maxItems": 50
}
```

# Actor output Schema

## `results` (type: `string`):

No description

## `summary` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "searchText": "CRISPR gene editing",
    "searchMode": "and",
    "fiscalYears": [
        "2025"
    ],
    "includeAbstract": true,
    "maxItems": 50
};

// Run the Actor and wait for it to finish
const run = await client.actor("one_dollar_store/nih-reporter-grants").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "searchText": "CRISPR gene editing",
    "searchMode": "and",
    "fiscalYears": ["2025"],
    "includeAbstract": True,
    "maxItems": 50,
}

# Run the Actor and wait for it to finish
run = client.actor("one_dollar_store/nih-reporter-grants").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "searchText": "CRISPR gene editing",
  "searchMode": "and",
  "fiscalYears": [
    "2025"
  ],
  "includeAbstract": true,
  "maxItems": 50
}' |
apify call one_dollar_store/nih-reporter-grants --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,one_dollar_store/nih-reporter-grants"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/53yUsx0ihSu9rzYBS/builds/VLzHGzaRZJ3JXHn1B/openapi.json
