# Grants.gov Scraper: Grant Opportunities + NIH & UKRI Awards (`latamdatatools/grants-funding-opportunities`) Actor

Find open grant and funding opportunities on Grants.gov (forecasted and posted) with deadlines, award ceiling, total funding and eligibility, plus awarded research grants from NIH RePORTER and UKRI Gateway to Research. One schema, only new records since the last run.

- **URL**: https://apify.com/latamdatatools/grants-funding-opportunities.md
- **Developed by:** [Julian Genuario](https://apify.com/latamdatatools) (community)
- **Categories:** Lead generation, Business
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 1,000 funding records

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

## Grants.gov Scraper: Grant Opportunities + NIH & UKRI Awards

Find **grant and funding opportunities** before your competitors do. This Actor searches **Grants.gov** (every US federal discretionary grant, from all 26 grant-making agencies) for **forecasted and open opportunities**, with **deadline, award ceiling and floor, estimated total funding, expected number of awards, eligibility, cost sharing and description**. Optionally it adds **awarded research grants** from **NIH RePORTER** and **UKRI Gateway to Research**, so you also see **who got funded, how much and for what**.

All sources come out in **one schema**. Turn on **"Only new records"** and schedule it weekly: you get only new opportunities and awards, ready for Slack, email, Google Sheets or your CRM.

### What does Grants & Funding Opportunities do?

It is a Grants.gov scraper and grant alert tool built on official public APIs:

- **Grants.gov** search and opportunity details API: forecasted, posted (open), closed or archived funding opportunity announcements (NOFOs / FOAs), filtered by keyword, agency, eligibility, category, Assistance Listing (CFDA) number, posting date and deadline.
- **NIH RePORTER** API: NIH research awards by keyword, fiscal year, institute (NCI, NIAID...), activity code (R01, R21, SBIR R43/R44...), recipient organization and amount.
- **UKRI Gateway to Research** API: UK research and innovation grants (EPSRC, MRC, Innovate UK...) with lead organisation and award value in GBP.

### Who uses it

- **Grant writers and consultants**: a weekly list of new opportunities that match each client's eligibility and topics.
- **Nonprofits, universities, cities and small businesses**: never miss a deadline (filter "closing in the next N days").
- **Research offices and BD teams of CROs, labs and suppliers**: newly funded NIH / UKRI projects are leads (an institution that just received USD 2M will buy equipment and services).
- **SBIR / STTR companies**: R43/R44 awards and open SBIR solicitations.
- **Analysts and journalists**: funding trends by agency, topic or institution.

### How to use it

1. Click **Try for free** (a free Apify account is enough).
2. Type keywords, choose the sources and filters (or keep the example).
3. Click **Start**.
4. Download the results from the **Output** tab as JSON, CSV, Excel or HTML, or read them with the API.
5. Optional: tick **Only new records**, name the alert and create a weekly **Schedule** with a webhook or a Make / Zapier / n8n integration.

### Input

```json
{
  "keywords": ["artificial intelligence", "rural broadband"],
  "sources": ["grants_gov", "nih_reporter"],
  "opportunityStatuses": ["forecasted", "posted"],
  "eligibilities": ["12", "23"],
  "closingInNextDays": 60,
  "awardedInLastDays": 90,
  "nihActivityCodes": ["R43", "R44"],
  "onlyNew": true,
  "alertName": "client-a",
  "maxItems": 300
}
```

- Each keyword is a separate search; a record found by several keywords appears once with all of them in `matchedKeywords`. Leave keywords empty to list the latest Grants.gov opportunities or NIH awards (UKRI needs a keyword).
- **Grants.gov filters**: status, agency codes (NSF, DOE, USDA, HHS-NIH11...), eligibility codes (12 nonprofits, 22 for-profit, 23 small businesses, 06/20 higher education, 00-02 state, county and city governments, 99 unrestricted...), category codes (ST, HL, ED, AG, ENV, CD, EN, BC...), Assistance Listing number, posted in the last N days, closing in the next N days.
- **Awarded grants**: awarded / started in the last N days, NIH fiscal years, institutes, activity codes, organizations, new awards only, minimum amount.

### Output

One row per opportunity or award, same fields for every source:

```json
{
  "source": "grants.gov",
  "recordType": "opportunity",
  "id": "grants.gov:364136",
  "number": "DE-FOA-0003630",
  "title": "Unlocking New Levels of Output and Capacity for Key Subsurface Resources (UNLOCK)",
  "funder": "Advanced Research Projects Agency Energy",
  "funderCode": "DOE-ARPAE",
  "status": "posted",
  "postedDate": "2026-10-21",
  "closeDate": "2026-11-20",
  "estimatedTotalFunding": 45000000,
  "awardCeiling": 5000000,
  "awardFloor": 3000000,
  "expectedAwards": 12,
  "costSharing": true,
  "fundingInstruments": ["Cooperative Agreement", "Other"],
  "categories": ["Science and Technology and other Research and Development"],
  "eligibility": ["Unrestricted (i.e., open to any type of entity above)..."],
  "assistanceListings": ["81.135"],
  "organization": null,
  "awardAmount": null,
  "currency": "USD",
  "description": "...",
  "url": "https://www.grants.gov/search-results-detail/364136",
  "matchedKeywords": ["artificial intelligence"],
  "fetchedAt": "2026-10-27T12:00:00.000Z"
}
```

Awards (`recordType: "award"`) fill `organization` (recipient institution), city, state, country, organization type, `awardAmount` + `currency`, start and end dates, budget period, fiscal year, NIH activity code, funding mechanism and the related funding opportunity number. Forecasts add the estimated posting, award and project start dates.

**Privacy:** principal investigator, program officer and agency contact names, emails and phones are never included; only institutions.

### Pricing

Pay per event:

- **USD 3.00 per 1,000 records** delivered (`opportunity`, opportunities and awards alike), details included.
- No start fee beyond Apify's minimal platform start event.

Not charged: duplicates across keywords, records already delivered in "Only new records" mode and records removed by your filters. Your **max charge per run** is respected. A weekly alert with 30 new records costs about USD 0.09.

### Speed and limits

The Actor waits 1 s between requests (NIH asks for at most one request per second) and 0.5 s for UKRI. Grants.gov details take one extra request per opportunity, UKRI two per project (lead organisation and fund), so 100 records take about 2 minutes. NIH RePORTER returns at most 15,000 records per search.

### Sources and terms

Official, free APIs without keys: [Grants.gov API](https://www.grants.gov/api) (US government, public domain), [NIH RePORTER API](https://api.reporter.nih.gov/) (public; used within its one-request-per-second policy) and [UKRI Gateway to Research API](https://gtr.ukri.org/resources/api.html) (Open Government Licence). This Actor is not affiliated with or endorsed by Grants.gov, HHS, NIH or UKRI; always confirm deadlines and eligibility in the official announcement.

### Why use Grants & Funding Opportunities

- **Open calls and funded projects in one table:** Grants.gov opportunities (forecasted and open) next to NIH RePORTER and UKRI awards, all with the same 45 fields, so one export or one integration covers everything.
- **Full details, not just the search list:** award ceiling and floor, estimated total funding, expected number of awards, cost sharing, eligibility, funding instrument and description come from the official detail API.
- **Real alerts:** "Only new records" remembers what each named alert already delivered, so a weekly schedule only sends (and only charges) new opportunities and awards.
- **Deadline filter:** "closing in the next N days" keeps only the calls you can still apply to.
- **Privacy by design:** no investigator, program officer or agency contact names, emails or phones, only institutions.
- **Official APIs only:** no scraping of web pages, no keys needed, rate limits of each source respected.

### Cost examples

Prices at the current pay-per-event rate (USD 3.00 per 1,000 records; see Pricing). You can set a maximum charge per run in the run options.

| Job | Approximate cost |
|---|---|
| Test run: 15 Grants.gov opportunities with details (measured: 18 s) | about $0.05 |
| Weekly alert, about 30 new records | about $0.09 |
| One-off list of 200 open and forecasted opportunities | about $0.60 |
| 1,000 NIH awards for a lead list | about $3.00 |

### Use it from your code, an integration or an AI agent

**Python** (`pip install apify-client`):

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("latamdatatools/grants-funding-opportunities").call(run_input={
  "keywords": ["artificial intelligence"],
  "sources": ["grants_gov", "nih_reporter"],
  "opportunityStatuses": ["forecasted", "posted"],
  "closingInNextDays": 60,
  "maxItems": 50
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item["title"], item["closeDate"], item["url"])
```

**JavaScript / Node.js** (`npm install apify-client`):

```javascript
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });
const run = await client.actor('latamdatatools/grants-funding-opportunities').call({
  keywords: ['artificial intelligence'],
  sources: ['grants_gov', 'nih_reporter'],
  opportunityStatuses: ['forecasted', 'posted'],
  closingInNextDays: 60,
  maxItems: 50,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

**No code:**

- **Schedules:** save your input as a Task and run it daily or weekly from Apify Console (Schedules), with "Only new records" ticked.
- **Integrations:** send new records to Google Sheets, Slack, email, Make, Zapier, n8n or Airbyte from the Integrations tab, or call your own webhook when a run finishes.
- **AI agents:** add it as a tool in Claude, Cursor, VS Code and other MCP clients through the Apify MCP server (`https://mcp.apify.com`), so the agent can search for funding and read the results.

### FAQ

**Does it include SAM.gov contract opportunities?** No, only grants and cooperative agreements. For contracts, see the US Federal Contract Awards Actor.

**Can I follow one agency's new opportunities?** Yes: put its code in "Grants.gov: agency codes", leave keywords empty, tick "Only new records" and schedule it daily.

**Can I call it from my own code or from an AI agent?** Yes, with the Apify API, the JavaScript / Python clients, or as a tool from Claude, Cursor and other MCP clients through the Apify MCP server (`mcp.apify.com`).

**How often is the data updated?** Every run queries the live official APIs, so you get what Grants.gov, NIH RePORTER and UKRI publish at that moment. Grants.gov adds new opportunities every business day.

**Why does a record have no award amount?** Many Grants.gov forecasts do not state a ceiling yet, and NIH RePORTER publishes some projects (for example from the VA) without an amount. The field is then `null`; nothing is invented.

**Which export formats are available?** JSON, JSONL, CSV, Excel (XLSX), XML, RSS and HTML table.

Questions or a source you miss? Open an issue in the Issues tab.

# Actor input Schema

## `keywords` (type: `array`):

Words searched in titles and descriptions, e.g. "artificial intelligence", "rural broadband", "malaria". Each keyword is a separate search. Required for UKRI.

## `sources` (type: `array`):

Grants.gov = open US federal funding opportunities. NIH RePORTER = awarded NIH research grants (who got funded). UKRI Gateway to Research = awarded UK research and innovation grants.

## `opportunityStatuses` (type: `array`):

Forecasted = announced but not open yet; posted = open for applications.

## `grantsAgencies` (type: `array`):

Optional. Grants.gov agency codes, e.g. NSF, DOE, USDA, HHS-NIH11, DOC-EDA, ED. Several = any of them.

## `eligibilities` (type: `array`):

Optional. 00 State governments, 01 County, 02 City, 06 Public/state higher education, 12 Nonprofits with 501(c)(3), 20 Private higher education, 22 For-profit organizations, 23 Small businesses, 25 Others, 99 Unrestricted.

## `fundingCategories` (type: `array`):

Optional. e.g. ST (science & technology), HL (health), ED (education), AG (agriculture), ENV (environment), CD (community development), EN (energy), BC (business & commerce).

## `assistanceListing` (type: `string`):

Optional. e.g. 47.070.

## `postedInLastDays` (type: `integer`):

0 = any date. Use 7 with "Only new" for a weekly alert.

## `closingInNextDays` (type: `integer`):

0 = no deadline filter. Keeps only opportunities with a deadline between today and N days from now.

## `includeDetails` (type: `boolean`):

Award ceiling and floor, estimated total funding, expected number of awards, eligibility, cost sharing, funding instrument, category and description (one extra request per opportunity).

## `awardedInLastDays` (type: `integer`):

NIH: award notice date; UKRI: grant start date. 0 = any date.

## `nihFiscalYears` (type: `array`):

Optional. e.g. 2026, 2025.

## `nihInstitutes` (type: `array`):

Optional. Abbreviations, e.g. NCI, NIAID, NHLBI, NIMH, NIA.

## `nihActivityCodes` (type: `array`):

Optional. e.g. R01, R21, U01, R43 (SBIR), R44.

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

Optional. Institution names as in RePORTER, e.g. "JOHNS HOPKINS UNIVERSITY".

## `newAwardsOnly` (type: `boolean`):

Only type 1 (new) awards, no continuations.

## `minAwardAmount` (type: `integer`):

NIH (USD) and UKRI (GBP). 0 = no minimum.

## `includeDescription` (type: `boolean`):

Opportunity synopsis or project abstract as plain text.

## `maxDescriptionChars` (type: `integer`):

Longer texts are cut.

## `onlyNew` (type: `boolean`):

Return only records not delivered in your previous runs with the same alert name. Schedule it daily or weekly for alerts.

## `alertName` (type: `string`):

Separate memory for each saved search when using "Only new records".

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

Upper limit of records returned in one run (all sources).

## `maxPerSource` (type: `integer`):

0 = no per-source limit.

## Actor input object example

```json
{
  "keywords": [
    "artificial intelligence"
  ],
  "sources": [
    "grants_gov"
  ],
  "opportunityStatuses": [
    "forecasted",
    "posted"
  ],
  "postedInLastDays": 0,
  "closingInNextDays": 0,
  "includeDetails": true,
  "awardedInLastDays": 365,
  "newAwardsOnly": false,
  "minAwardAmount": 0,
  "includeDescription": true,
  "maxDescriptionChars": 3000,
  "onlyNew": false,
  "alertName": "default",
  "maxItems": 50,
  "maxPerSource": 0
}
```

# Actor output Schema

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

No description

## `runSummary` (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 = {
    "keywords": [
        "artificial intelligence"
    ],
    "sources": [
        "grants_gov"
    ],
    "opportunityStatuses": [
        "forecasted",
        "posted"
    ],
    "maxItems": 50
};

// Run the Actor and wait for it to finish
const run = await client.actor("latamdatatools/grants-funding-opportunities").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 = {
    "keywords": ["artificial intelligence"],
    "sources": ["grants_gov"],
    "opportunityStatuses": [
        "forecasted",
        "posted",
    ],
    "maxItems": 50,
}

# Run the Actor and wait for it to finish
run = client.actor("latamdatatools/grants-funding-opportunities").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 '{
  "keywords": [
    "artificial intelligence"
  ],
  "sources": [
    "grants_gov"
  ],
  "opportunityStatuses": [
    "forecasted",
    "posted"
  ],
  "maxItems": 50
}' |
apify call latamdatatools/grants-funding-opportunities --silent --output-dataset

```

## MCP server setup

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

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/vZgIRsSqovksQ3Wul/builds/F3aRJ186FCcxs4RZx/openapi.json
