# US Grants Scraper (Grants.gov Funding Opportunities) (`tenderwire/us-grants-gov`) Actor

Get US federal grant and cooperative agreement opportunities from Grants.gov: agency, award ceiling, deadline, eligibility and category. Filter by keyword, agency, category and eligibility. Official open API, no key.

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

## Pricing

$3.00 / 1,000 opportunities

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

## US Grants Scraper (Grants.gov Funding Opportunities)

Get US federal grant opportunities from **Grants.gov**, the official place where every federal agency posts its grants and cooperative agreements, as one clean table. Each row has the agency, award ceiling, closing date, eligibility, category and a link to apply. Data comes from the official Grants.gov API: no key, no login.

Filter by keyword, agency, funding category, eligibility and amount. Turn on **alerts mode** and schedule a daily run to receive only new opportunities.

### What does US Grants Scraper do?

- Searches open (posted) and upcoming (forecasted) grants, and closed or archived ones if you want history.
- Fetches the full details of each opportunity: description, award ceiling or total funding, eligible applicants, funding category, grant or cooperative agreement, agency phone.
- Cleans the text (no HTML), uses ISO dates and links every row to its Grants.gov page.
- Outputs the same format as our government tender scrapers, so grants and contracts fit in one sheet.

### Who uses it?

- **Nonprofits, universities and research teams** looking for funding.
- **Grant writers and consultants** who track opportunities for several clients.
- **Small businesses** looking for SBIR and STTR style funding.
- **Cities, counties and tribes** watching for federal programs they can apply to.
- **Grant newsletters and databases** that need a clean daily feed.

### What data do you get?

| Field | Example |
|---|---|
| title | State Process for Informing Consumers of Recalls Program |
| buyerName, buyerId | National Highway Traffic Safety Administration, DOT-NHTSA |
| valueAmount, valueCurrency | 1500000, USD (award ceiling, or total funding when no ceiling is given) |
| publishedDate, deadlineDate | 2026-11-04, 2027-02-04 |
| procurementCategory | Grant, Cooperative Agreement |
| categoryDescription | Consumer Protection |
| categoryCodes | Assistance Listing (CFDA) numbers, e.g. 20.614 |
| description | full program description plus eligible applicants |
| stage, status | tender (open) or planning (forecast), posted / forecasted / closed |
| noticeUrl | Grants.gov opportunity page |

### How to use it

1. Click **Try for free**.
2. Keep the default (newest open opportunities) or add keywords, agencies or categories.
3. Click **Start**. A run of 50 opportunities with full details takes about 15 seconds.
4. Download as Excel, CSV or JSON, or send the results to Google Sheets, Slack, email, Zapier or Make.

### Input example

```json
{
    "keywords": ["climate", "STEM education"],
    "statuses": ["posted", "forecasted"],
    "agencies": ["NSF", "DOE"],
    "eligibilities": ["12"],
    "minValue": 100000,
    "onlyOpen": true,
    "maxItems": 200
}
```

### Output example

```json
{
    "source": "grants-gov",
    "noticeId": "364212",
    "ocid": "NHTSA-693JJ927R000007-FY27",
    "noticeType": "synopsis",
    "stage": "tender",
    "status": "posted",
    "title": "State Process for Informing Consumers of Recalls Program",
    "description": "The objective of the State Process for Informing Consumers of Recalls Grant program is to establish a recall notification program in a state to improve traffic safety in the following areas: developing a methodology for determining open recalls on motor vehicles, informing owners and lessees of the...",
    "buyerName": "National Highway Traffic Safety Administration",
    "buyerId": "DOT-NHTSA",
    "buyerCountry": "United States",
    "buyerCity": null,
    "buyerContactEmail": null,
    "buyerContactPhone": "240-421-4046",
    "buyerWebsite": null,
    "cpvCodes": [],
    "categoryCodes": [
        "20.614"
    ],
    "categoryDescription": "Consumer Protection",
    "procurementCategory": "Grant",
    "procurementMethod": null,
    "valueAmount": 1500000,
    "valueCurrency": "USD",
    "publishedDate": "2026-11-04",
    "deadlineDate": "2027-02-04",
    "contractStartDate": null,
    "contractEndDate": null,
    "placeOfPerformance": [],
    "suitableForSme": null,
    "awardedSuppliers": [],
    "awardValueAmount": null,
    "awardDate": null,
    "noticeUrl": "https://www.grants.gov/search-results-detail/364212",
    "documentUrls": [],
    "language": "en",
    "scrapedAt": "2026-11-05T12:40:00.000Z"
}
```

### How much does it cost?

**Pay per result: $3 per 1,000 opportunities** delivered, plus a tiny Apify start fee per run. No proxy or browser costs.

- There are usually 1,000 to 2,000 open federal grant opportunities at any time; a focused search returns far fewer.
- A daily alert usually returns 0 to 30 new opportunities a day.
- Apify's free plan includes monthly credit, enough to try the Actor many times.

### Alerts mode and integrations

Turn on **Only new since last run** and schedule the Actor daily. It remembers delivered opportunities in your own Apify account and outputs only new ones (and skips fetching their details again). Use a different **Alerts state name** for each saved search. Send results to Slack, email, Google Sheets, Airtable, Notion, Zapier, Make or a webhook.

### Other Actors with the same output format

- **US Federal Contract Awards Scraper (USAspending.gov)**: who won federal contracts and for how much.
- **UK Public Tenders**, **EU TED Tenders** and **CanadaBuys Tenders**: government tenders in the UK, EU and Canada.

### FAQ

**Is this legal?**
Yes. Grants.gov is the US government's official grants portal and offers this public API for anyone to use. Federal government information is in the public domain.

**Why is buyerContactEmail usually empty?**
We only output organisation mailboxes (for example a grants office inbox). Personal mailboxes and contact person names are removed on purpose, so the dataset contains no personal data.

**Why is the closing date empty for some opportunities?**
Some programs accept applications on a rolling basis or announce the date later. Turn on **Only with a future closing date** to drop them.

**What do the codes mean?**
Category, eligibility and instrument codes are the ones Grants.gov uses in its own search. The most common ones are listed under each input field.

**Something looks wrong?**
Open an issue on the Issues tab. An automatic self-check runs every day to detect changes in the source, and problems are usually fixed within a day.

# Actor input Schema

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

Search Grants.gov for each keyword and combine the results. Leave empty for all opportunities.

## `statuses` (type: `array`):

posted = open for applications now. forecasted = announced, not open yet. closed and archived = past opportunities.

## `agencies` (type: `array`):

Grants.gov agency codes, e.g. HHS, NSF, DOE, USDA, ED, HHS-NIH11. Leave empty for all agencies.

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

e.g. ED (education), HL (health), ST (science and technology), AG (agriculture), CD (community development), EN (energy), ENV (environment), AR (arts).

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

Grants.gov applicant type codes, e.g. 12 (nonprofits with 501(c)(3)), 20 (private universities), 23 (small businesses), 00 (state governments), 01 (county governments), 99 (unrestricted).

## `fundingInstruments` (type: `array`):

G (grant), CA (cooperative agreement), PC (procurement contract), O (other).

## `postedWithinDays` (type: `integer`):

Keep only opportunities posted in the last N days.

## `excludeKeywords` (type: `array`):

Drop opportunities whose title, description or agency contains any of these words.

## `minValue` (type: `integer`):

Keep opportunities whose award ceiling (or total funding when no ceiling is given) is at least this amount.

## `maxValue` (type: `integer`):

Keep opportunities whose award ceiling is at most this amount.

## `onlyOpen` (type: `boolean`):

Drop opportunities whose closing date has passed or is not given.

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

Fetch the full description, award ceiling, eligibility, category and contact phone for each opportunity. Turn off for a faster, basic list.

## `onlyNewSinceLastRun` (type: `boolean`):

Remember delivered opportunities and output only new ones on the next run. Ideal for a daily schedule.

## `stateKey` (type: `string`):

Use a different name for each saved search that runs in alerts mode.

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

Stop after this many opportunities (newest first). You only pay for opportunities delivered.

## `proxyConfiguration` (type: `object`):

Not needed: Grants.gov's API is open.

## `selfCheck` (type: `boolean`):

For the maintainer. Checks the source format has not changed and writes a SELF_CHECK report. Outputs no opportunities.

## Actor input object example

```json
{
  "statuses": [
    "posted"
  ],
  "onlyOpen": false,
  "includeDetails": true,
  "onlyNewSinceLastRun": false,
  "stateKey": "default",
  "maxItems": 50,
  "proxyConfiguration": {
    "useApifyProxy": false
  },
  "selfCheck": false
}
```

# Actor output Schema

## `overview` (type: `string`):

No description

## `allFields` (type: `string`):

No description

## `selfCheck` (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 = {
    "maxItems": 50
};

// Run the Actor and wait for it to finish
const run = await client.actor("tenderwire/us-grants-gov").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 = { "maxItems": 50 }

# Run the Actor and wait for it to finish
run = client.actor("tenderwire/us-grants-gov").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 '{
  "maxItems": 50
}' |
apify call tenderwire/us-grants-gov --silent --output-dataset

```

## MCP server setup

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

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/MR9lkvBJSIEslz4yg/builds/8l1aLePN7k4ePVhbN/openapi.json
