# NIH RePORTER Grant Finder (`a.jonzy/nih-reporter-grant-finder`) Actor

Search NIH RePORTER for grants by topic, institution, investigator, institute and year, with award totals and linked PubMed IDs. Official API.

- **URL**: https://apify.com/a.jonzy/nih-reporter-grant-finder.md
- **Developed by:** [Aidan Jones](https://apify.com/a.jonzy) (community)
- **Categories:** Other, Lead generation, Automation
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event

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 Grant Finder

Data: NIH RePORTER. Search it and get one clean dataset of grants: title, awardee organization, principal investigators, funding institute, activity code, award amounts, dates, and (optionally) the PubMed IDs that NIH links to each grant. The run summary adds award totals by fiscal year and the top organizations and institutes. Built on the official NIH RePORTER API v2. No scraping.

Use it to find funded labs in a topic, size a research area, build a list of who NIH funds at a university or in a state, track an institute's awards, or tie grants to their publications.

### What you get

- Filters: search text (title, abstract, terms), fiscal years, organizations, principal investigators, NIH institutes, activity codes (R01, R21, K99 and so on), organization states, award range
- Per grant: project number, core project number, fiscal year, title, activity code, award amount with direct and indirect cost, start and end dates, organization, contact PI and all PIs, institute, funding opportunity number, up to 20 keywords, spending categories, link to NIH RePORTER
- Optional `includePublications`: PubMed IDs NIH links to the grant's core project (all fiscal years of that project, not only the year of the record)
- Optional abstract text
- `SUMMARY` record: grants returned and scanned, total matches on RePORTER, total award amount, award by fiscal year, top 10 organizations and institutes by award

### Price

Pay per event. You pay for grant records returned.

| Event | Price |
|---|---|
| Actor start | $0.005 per start event. Apify bills one start event per GB of memory; the default run uses 512 MB, so one event. |
| NIH grant returned | $0.004 |

100 grants cost about $0.41; the 5000-grant maximum costs about $20. Error items are not charged. Set `maxItems` to cap spend. If a run fails midway, the grants already stored stay in the dataset and are billed.

### Example input

```json
{
    "searchText": "CRISPR gene therapy",
    "fiscalYears": ["2024", "2025"],
    "states": ["TX"],
    "activityCodes": ["R01"],
    "sortBy": "awardAmount",
    "includePublications": true,
    "maxItems": 50
}
```

### Example output

```json
{
    "status": "found",
    "applId": 10649830,
    "projectNum": "1R01NS127922-01A1",
    "coreProjectNum": "R01NS127922",
    "fiscalYear": 2023,
    "title": "Novel Roles of TAZ and YAP in DNA Damage Repair with 3D Genome Organization and the Therapeutic Resistance in Glioblastoma",
    "activityCode": "R01",
    "awardAmountUsd": 455465,
    "directCostUsd": 348807,
    "indirectCostUsd": 106658,
    "projectStartDate": "2023-09-01",
    "projectEndDate": "2024-01-06",
    "organization": "UNIVERSITY OF TX MD ANDERSON CAN CTR",
    "organizationState": "TX",
    "contactPi": "BHAT, KRISHNA PL",
    "principalInvestigators": ["Krishna PL Bhat", "Wenbo Li"],
    "institute": "NINDS",
    "publicationCount": 2,
    "publicationPmids": ["40480976", "41270088"],
    "publicationsTruncated": false,
    "url": "https://reporter.nih.gov/project-details/10649830"
}
```

This is a real record, shortened. A run summary is saved under the key-value store key `SUMMARY`.

### FAQ

**Where does the data come from?** The NIH RePORTER API v2, a free public API of the U.S. National Institutes of Health. It covers NIH and some other HHS agencies' awards. Data reflects RePORTER at run time.

**Does the total award figure equal total funding?** No. It adds the award amounts of the records returned. A project funded in several fiscal years has one record per year, and the figure follows exactly what you filtered. The summary says so.

**Why does a grant show PubMed IDs from other years?** NIH links publications to the core project, which spans every fiscal year and supplement of that project. `publicationsTruncated: true` means that grant's publication list hit the safety limit of 2000 links per page of grants and is incomplete.

**Are investigator names personal data?** They are the public principal investigator names NIH publishes. Use them to understand who is funded; follow the privacy and anti-spam laws that apply to you if you contact anyone. The actor returns no email addresses.

**Can I search several topics?** Run once per topic.

### Data and limits

- Source: NIH RePORTER (NIH). Subprojects are excluded.
- The actor sends at most one request per second to RePORTER, as NIH asks, so large runs take time: up to 500 grants per request, or 100 per request (plus one publications request) with `includePublications`.
- NIH asks that large jobs run off-peak (weekends or 9pm-5am US Eastern). Do that for runs over a few thousand grants.
- Up to 5000 grants per run (RePORTER does not page past 15,000 records).
- Organization names must match NIH spelling; use `searchText` if you are unsure.
- Research aid only: award data can lag and be revised.

# Actor input Schema

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

Words searched in the project title, abstract and terms, for example glioblastoma immunotherapy. At least one filter in this form is required.

## `searchFields` (type: `array`):

Where the search text is looked for. Allowed values: title, abstract, terms. Defaults to all three.

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

Four-digit NIH fiscal years, for example 2024. Leave empty for all years.

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

Exact institution names as NIH lists them, for example TEXAS CHRISTIAN UNIVERSITY. Case does not matter.

## `investigators` (type: `array`):

Principal investigator names. A last name or a full name, for example Collins or Francis Collins.

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

Funding institute abbreviations, for example NCI, NIAID, NHLBI.

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

Grant types, for example R01, R21, K99, F31.

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

Two-letter US state codes of the awardee organization, for example TX.

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

Only grant records with an award amount at or above this value. Optional.

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

Only grant records with an award amount at or below this value. Optional.

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

Order of the results, newest or largest first. Allowed values: startDate, awardAmount, fiscalYear.

## `includePublications` (type: `boolean`):

Adds the PubMed IDs that NIH links to each grant's core project (all fiscal years of that project). Slower: one extra API call per page of 100 grants.

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

Adds the project abstract text to each item.

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

Stops after this many grant records. This caps your spend. Maximum 5000.

## Actor input object example

```json
{
  "searchText": "CRISPR gene therapy",
  "fiscalYears": [
    "2024",
    "2025"
  ],
  "sortBy": "startDate",
  "includePublications": false,
  "includeAbstract": false,
  "maxItems": 100
}
```

# Actor output Schema

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

One item per grant record returned. A failed search produces one item with status error.

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

Counts of grants returned and scanned, total matches on RePORTER, award totals by fiscal year, and the top organizations and institutes.

# 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 therapy",
    "fiscalYears": [
        "2024",
        "2025"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("a.jonzy/nih-reporter-grant-finder").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 therapy",
    "fiscalYears": [
        "2024",
        "2025",
    ],
}

# Run the Actor and wait for it to finish
run = client.actor("a.jonzy/nih-reporter-grant-finder").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 therapy",
  "fiscalYears": [
    "2024",
    "2025"
  ]
}' |
apify call a.jonzy/nih-reporter-grant-finder --silent --output-dataset

```

## MCP server setup

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

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/htmQGopCpfYDiBZUx/builds/qcMO0s5vRmVMhLVch/openapi.json
