# Grants.gov Federal Grants Search API (`ucchiii/grants-gov-opportunities`) Actor

Search US federal grant opportunities on Grants.gov: keyword, status, agency, eligibility, category, posted dates. One row per grant with deadline, award ceiling/floor and synopsis. Empty input = free demo. $1.50 per 1,000 opportunities. Not affiliated with Grants.gov.

- **URL**: https://apify.com/ucchiii/grants-gov-opportunities.md
- **Developed by:** [Actor Factory](https://apify.com/ucchiii) (community)
- **Categories:** Other, Lead generation, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.05 / 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.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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 Federal Grants Search API: US federal grant opportunities as clean data

**For grant writers, nonprofits, universities, small businesses, consultants and funding-research teams who need to find US federal grants without clicking through the Grants.gov search page.**
Search by keyword, agency, applicant type and category and get **one flat row per opportunity** with deadline, award amounts and a short synopsis. **$1.50 per 1,000 opportunities**.

**Try it free: leave input empty and press Start.** The demo returns a few current opportunities and is never charged.

| number | title | agency | status | closeDate | awardCeiling |
|---|---|---|---|---|---|
| HHS-2026-ACF-0000 | Community Resilience Program | Administration for Children and Families | posted | 2026-12-15 | 500000 |
| DE-FOA-0003000 | Grid Modernization Projects | Department of Energy | forecasted | 2027-02-01 | 2000000 |

(Illustrative sample. Award fields appear when `includeDetails` is on.)

- **Official API**: uses the public Grants.gov REST API (`search2` and `fetchOpportunity`), no login, no API key, no scraping.
- **Filters**: keyword, statuses (forecasted, posted, closed, archived), agencies, eligibilities (applicant types), funding categories, posted date range.
- **Optional details**: `includeDetails` adds award ceiling and floor, estimated total funding, number of awards, categories, eligibilities and the synopsis.
- **No personal data**: agency contact names, emails and phone numbers are never output.
- **Polite**: one request at a time, at least 1 second apart, identifiable User-Agent, backoff on 429 and 5xx.

Unofficial: **not affiliated with Grants.gov**, the General Services Administration or the US government.

### Input

```json
{
  "keyword": "wildfire",
  "oppStatuses": ["posted", "forecasted"],
  "agencies": ["HHS", "DOE"],
  "eligibilities": ["25"],
  "fundingCategories": ["HL"],
  "postedFrom": "2026-09-01",
  "postedTo": "2026-10-31",
  "includeDetails": true,
  "maxItems": 50
}
```

- `oppStatuses`: any of `forecasted`, `posted`, `closed`, `archived` (empty = forecasted + posted).
- `agencies`, `eligibilities`, `fundingCategories`: Grants.gov codes, one per line (see the field descriptions for common codes).
- `postedFrom` / `postedTo`: `YYYY-MM-DD`, compared with the opportunity's open (posting) date. Applied by the Actor after the search, so a narrow range on a very large result set scans more pages (up to 3,000 search hits per run).
- `maxItems`: 1 to 1,000 (default 10).

### Output (one item per opportunity)

```json
{
  "id": "350000", "number": "HHS-2026-ACF-0000", "title": "Community Resilience Program",
  "agency": "Administration for Children and Families", "agencyCode": "HHS-ACF",
  "status": "posted", "openDate": "2026-09-01", "closeDate": "2026-12-15",
  "awardCeiling": 500000, "awardFloor": 10000, "estimatedTotalFunding": 2000000, "expectedNumberOfAwards": 4,
  "categories": ["Health"], "eligibilities": ["Nonprofits having a 501(c)(3) status with the IRS, other than institutions of higher education"],
  "synopsis": "Funds community projects that ...",
  "url": "https://www.grants.gov/search-results-detail/350000"
}
```

- Without `includeDetails`, award fields, `categories`, `eligibilities` and `synopsis` are empty (the search call does not return them).
- `synopsis` is plain text, cut at 2,000 characters.
- A run summary (total matches, scanned, returned, errors) is saved to the key-value store as `SUMMARY`.

### Pricing

Pay per event: **$0.0015 per opportunity returned** (1,000 opportunities cost $1.50). The empty-input demo and failed runs are free.
`includeDetails` makes one extra API call per opportunity (about 1 second each) but does not cost extra. Set a max charge per run in the run options to cap spend.

### Use cases

- Weekly alert feed of new grants for your sector or applicant type
- Funding pipeline research for nonprofits, universities and startups
- Dashboards of upcoming (forecasted) federal funding by agency
- Enriching CRM or newsletter content with grant deadlines

### Notes

- Data comes only from the public Grants.gov API. Grants.gov data is US government information; check the Grants.gov terms for reuse.
- Always confirm deadlines and eligibility on the linked Grants.gov page before applying.
- Not affiliated with Grants.gov.

### More tools from the same developer

- [France Company Search](https://apify.com/ucchiii/france-company-search) — French companies and SIREN/SIRET lookups from the official SIRENE register
- [CSV / XLSX Converter](https://apify.com/ucchiii/csv-xlsx-converter) — convert CSV, TSV, Excel XLSX, JSON and NDJSON files or Apify datasets into each other
- [Dataset Change Detector](https://apify.com/ucchiii/dataset-change-detector) — compare two runs of any scraper: only added, removed and changed items
- [Google Sheets Export](https://apify.com/ucchiii/google-sheets-export) — export an Apify dataset to Google Sheets

# Actor input Schema

## `keyword` (type: `string`):

Free-text search over grant titles and descriptions, e.g. 'wildfire' or 'broadband'. Leave all search fields empty to run a free demo (not charged).

## `oppStatuses` (type: `array`):

Which stages to include: forecasted (announced in advance), posted (open), closed, archived (old, very large). Empty = forecasted + posted.

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

Agency codes, one per line, e.g. HHS-NIH11, DOE, NSF, USDA. A short code such as HHS also matches its sub-agencies. Empty = all agencies.

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

Applicant type codes, one per line: 00 state governments, 01 counties, 02 cities/townships, 04 special districts, 05 school districts, 06 public universities, 07 tribal governments, 11 tribal organizations, 12 nonprofits without 501(c)(3), 13 private universities, 20 individuals, 21 for-profit, 22 small business, 23 unrestricted, 25 nonprofits with 501(c)(3), 99 other. Empty = all.

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

Funding activity category codes, one per line, e.g. HL health, ED education, EN energy, ENV environment, AG agriculture, ST science and technology, CD community development, AR arts, DPR disaster prevention, O other. Empty = all.

## `postedFrom` (type: `string`):

Keep opportunities whose open (posting) date is on or after this date, format YYYY-MM-DD. Empty = no lower bound.

## `postedTo` (type: `string`):

Keep opportunities whose open (posting) date is on or before this date, format YYYY-MM-DD. Empty = no upper bound.

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

Call Grants.gov once per opportunity to add award ceiling/floor, total funding, number of awards, categories, eligibilities and the synopsis. Slower (about 1 second per opportunity).

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

Maximum number of opportunities to return (1 to 1000).

## Actor input object example

```json
{
  "keyword": "wildfire",
  "oppStatuses": [
    "posted"
  ],
  "includeDetails": false,
  "maxItems": 10
}
```

# Actor output Schema

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

One item per opportunity: id, number, title, agency, status, open and close dates, award ceiling/floor, estimated total funding, expected number of awards, categories, eligibilities, synopsis and Grants.gov URL. Award, category, eligibility and synopsis fields need includeDetails.

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

Record SUMMARY: how many opportunities matched, were scanned and returned, and any errors.

# 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 = {
    "keyword": "wildfire",
    "oppStatuses": [
        "posted"
    ],
    "maxItems": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("ucchiii/grants-gov-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 = {
    "keyword": "wildfire",
    "oppStatuses": ["posted"],
    "maxItems": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("ucchiii/grants-gov-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 '{
  "keyword": "wildfire",
  "oppStatuses": [
    "posted"
  ],
  "maxItems": 10
}' |
apify call ucchiii/grants-gov-opportunities --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,ucchiii/grants-gov-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/qBgQwJzL9T3oYwVtw/builds/edHlayO8Gd1Swqt1d/openapi.json
