# Grants.gov Federal Grants Scraper (`solidcode/grants-gov-scraper`) Actor

\[💰 $8.00 / 1K] Extract US federal grant opportunities from Grants.gov — titles, agencies, deadlines, award amounts, eligibility, and contacts. Filter by keyword, agency, category, applicant type, status, and posted date.

- **URL**: https://apify.com/solidcode/grants-gov-scraper.md
- **Developed by:** [SolidCode](https://apify.com/solidcode) (community)
- **Categories:** Developer tools, Automation, Lead generation
- **Features:** Limited permissions
- **Stats:** 9 total users, 0 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $8.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.
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 Scraper

Pull US federal grant funding opportunities from Grants.gov at scale — opportunity numbers, titles, owning agencies, application deadlines, award ceilings and floors, estimated total program funding, eligible applicant types, agency contacts, and downloadable attachments for every posted, forecasted, closed, or archived grant in the federal catalog. Built for grant writers, nonprofit development teams, and university sponsored-programs offices who need complete federal funding intelligence without combing the Grants.gov search box opportunity by opportunity.

### Why This Scraper?

- **The full federal catalog** — search across 80,000+ opportunities spanning forecasted, posted, closed, and archived grants, all from one official source.
- **31 federal agency filters with automatic sub-agency rollup** — pick a department by name and get everything beneath it: "Health and Human Services" pulls NIH, CDC, HRSA, ACF and 22 more sub-agency codes in a single run, so you never have to assemble a code list yourself.
- **17 applicant-eligibility types** — surface only grants open to nonprofits (with or without 501(c)(3) status), small businesses, state and county governments, individuals, school districts, public and private universities, or Native American tribal organizations.
- **4 opportunity statuses, including Forecasted** — catch upcoming grants announced but not yet open, so you can prepare before the application window opens, plus Posted, Closed, and Archived.
- **Detailed rows carry the whole announcement** — full synopsis text, eligible-applicant list, eligibility exceptions, and the cost-sharing/matching flag, each present on 97–100% of detailed rows. Award ceiling, floor, total program funding, and expected award count come through wherever the agency publishes them.
- **24 funding categories** — filter by Health, Education, Environment, Energy, Agriculture, Science & Technology, Housing, and 17 more activity areas.
- **Agency point-of-contact captured** — name, email, and phone for the program officer on each opportunity when full details are enabled.
- **Downloadable attachment links** — every NOFO, instructions packet, and supporting document returned as a ready-to-fetch name + download URL.
- **A working opportunity link on every single row** — open date and a direct Grants.gov opportunity-page link on 100% of results, plus the application deadline wherever the program sets one (roughly three in four — rolling and continuous-submission programs publish no deadline at all).

### Use Cases

**Nonprofit Fundraising & Development**

- Build a pipeline of open grants matched to your mission area and 501(c)(3) eligibility
- Track forecasted opportunities to start proposals before the window opens
- Monitor closing deadlines across every agency you target
- Pull award ceilings and floors to size your ask realistically

**University & Research Administration**

- Feed sponsored-programs offices a daily list of NSF, NIH, and DOE opportunities
- Filter to higher-education-eligible grants only, by public or private institution type
- Capture expected number of awards and cost-sharing requirements for go/no-go decisions
- Distribute matched opportunities to faculty by funding category

**Grant Consulting & Advisory**

- Maintain client-specific opportunity feeds by agency, category, and eligibility
- Benchmark estimated total program funding across competing programs
- Deliver branded funding reports with agency contacts and attachment links included
- Archive closed opportunities to study historical funding patterns

**Small Business & Innovation Funding**

- Find grants and cooperative agreements open to small businesses
- Track SBIR/STTR-style science and technology opportunities by agency
- Filter to Procurement Contract and Cooperative Agreement instruments
- Surface award floors to screen out grants below your funding threshold

**Competitive & Market Intelligence**

- Map which agencies fund a given category and at what scale
- Analyze award ceilings and total funding trends across years of archived data
- Identify recurring annual programs by their opportunity-number patterns
- Enrich CRMs and dashboards with structured federal-funding data

### Getting Started

#### Search by Keyword

The simplest run — one keyword across open and upcoming grants:

```json
{
    "searchQuery": "clean energy",
    "maxResults": 100
}
```

#### Filter by Agency and Eligibility

Open nonprofit-eligible health grants from a single agency:

```json
{
    "searchQuery": "community health",
    "agencies": ["HHS"],
    "eligibilities": ["12"],
    "opportunityStatus": ["posted"],
    "maxResults": 200
}
```

#### Look Up Specific Opportunities

Pull exact grants by their Grants.gov opportunity number:

```json
{
    "opportunityNumbers": ["EPA-R9-SFUND-2024", "PD-23-1234"],
    "includeDetails": true
}
```

#### Full-Featured Example

Forecasted and posted science grants from multiple agencies, fully enriched:

```json
{
    "searchQuery": "artificial intelligence",
    "agencies": ["NSF", "DOE", "NASA"],
    "fundingCategories": ["ST"],
    "eligibilities": ["06", "20"],
    "fundingInstruments": ["G", "CA"],
    "opportunityStatus": ["forecasted", "posted"],
    "postedFrom": "2024-01-01",
    "includeDetails": true,
    "maxResults": 500
}
```

### Input Reference

#### Search

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `searchQuery` | string | `"climate"` | Keywords to search across grant titles and descriptions. Leave empty to browse all opportunities that match the filters. |
| `opportunityNumbers` | string\[] | `[]` | Look up exact opportunities by Grants.gov number (e.g. `EPA-R9-SFUND-2024`). When set, returns just those opportunities and ignores the search filters. |

#### Filters

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `opportunityStatus` | select\[] | `["forecasted", "posted"]` | Which stages to include: Forecasted (upcoming), Posted (open now), Closed, Archived. |
| `agencies` | select\[] | `[]` | Limit to specific federal agencies by name (31 available). Leave empty for all agencies. |
| `fundingCategories` | select\[] | `[]` | Limit to funding categories such as Health, Education, or Environment (24 available). Leave empty for all. |
| `eligibilities` | select\[] | `[]` | Limit to opportunities open to specific applicant types such as Nonprofits or Small businesses (17 available). Leave empty for all. |
| `fundingInstruments` | select\[] | `[]` | Limit to Grant, Cooperative Agreement, Procurement Contract, or Other. Leave empty for all. |
| `postedFrom` | date | (none) | Only include opportunities posted on or after this date (YYYY-MM-DD). |
| `postedTo` | date | (none) | Only include opportunities posted on or before this date (YYYY-MM-DD). |

#### Output Options

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `includeDetails` | boolean | `false` | Fetch full details for every opportunity: description, award amounts, expected number of awards, cost-sharing requirement, agency contact, eligibility notes, and attachment links. Richer results, but takes longer. |
| `maxResults` | integer | `100` | Maximum number of opportunities to return. Set to 0 to return all matching opportunities. |

### Output

Each result is one flat row per grant opportunity. The dataset ships two table views: **Grant opportunities overview** (the default — opportunity number, title, agency, agency code, status, open date, assistance listing number, and link, all filled on every run) and **Deadlines, funding & contacts**, a 21-column view that fills in once you turn on full details. Whichever view you are looking at, the exported row carries every field listed below.

Here's a representative result with full details enabled:

```json
{
    "opportunityId": 350849,
    "opportunityNumber": "EPA-R9-SFUND-2024",
    "title": "Brownfields Assessment Grants",
    "agencyCode": "EPA",
    "agencyName": "Environmental Protection Agency",
    "status": "posted",
    "docType": "synopsis",
    "postedDate": "2024-02-15",
    "openDate": "2024-02-15",
    "closeDate": "2024-05-30",
    "alnList": ["66.818"],
    "url": "https://www.grants.gov/search-results-detail/350849",
    "description": "The U.S. Environmental Protection Agency is soliciting proposals from eligible entities to carry out assessment activities at brownfield sites...",
    "fundingInstruments": ["Cooperative Agreement"],
    "fundingCategories": ["Environment"],
    "eligibleApplicants": ["County governments", "Nonprofits with 501(c)(3) status"],
    "eligibilityDescription": "Eligible entities include general purpose units of local government and nonprofit organizations.",
    "awardCeiling": 500000,
    "awardFloor": 0,
    "estimatedTotalFunding": 30000000,
    "expectedNumberOfAwards": 60,
    "costSharingRequired": false,
    "agencyContactName": "Jane Doe",
    "agencyContactEmail": "brownfields@epa.gov",
    "agencyContactPhone": "415-555-0100",
    "attachments": [
        { "name": "NOFO_Full_Announcement.pdf", "url": "https://www.grants.gov/grantsws/rest/opportunity/att/download/98765" }
    ],
    "lastUpdatedDate": "2024-03-01"
}
```

#### Core Fields

Always returned for every opportunity.

| Field | Type | Description |
|-------|------|-------------|
| `opportunityId` | integer | Internal Grants.gov opportunity ID |
| `opportunityNumber` | string | Public opportunity number (e.g. `EPA-R9-SFUND-2024`) |
| `title` | string | Opportunity title |
| `agencyCode` | string | Owning agency code (e.g. `HHS-CDC`) |
| `agencyName` | string | Owning agency name |
| `status` | string | Stage: forecasted, posted, closed, or archived |
| `docType` | string | Document type (synopsis or forecast) |
| `openDate` | string | Date applications open (ISO) |
| `closeDate` | string | Application deadline (ISO). Blank on rolling and continuous-submission programs, which set no deadline — about one row in four |
| `alnList` | string\[] | Assistance Listing Numbers (formerly CFDA) |
| `url` | string | Direct Grants.gov opportunity link |

#### Funding Amounts

Populated when `includeDetails` is on. Agencies are inconsistent about publishing dollar figures: the four amount fields come through wherever the announcement states them — common on science, energy and environment opportunities, rare on NIH-style health program announcements — while `costSharingRequired` and `fundingInstruments` land on essentially every detailed row.

| Field | Type | Description |
|-------|------|-------------|
| `awardCeiling` | integer | Maximum award amount (USD) |
| `awardFloor` | integer | Minimum award amount (USD) |
| `estimatedTotalFunding` | integer | Estimated total program funding (USD) |
| `expectedNumberOfAwards` | integer | Expected number of awards |
| `costSharingRequired` | boolean | Whether cost sharing / matching is required |
| `fundingInstruments` | string\[] | Funding instrument types (Grant, Cooperative Agreement, etc.) |

#### Eligibility & Description

Populated when `includeDetails` is on.

| Field | Type | Description |
|-------|------|-------------|
| `description` | string | Full opportunity description / synopsis text |
| `fundingCategories` | string\[] | Funding activity categories |
| `eligibleApplicants` | string\[] | Applicant types eligible to apply |
| `eligibilityDescription` | string | Additional eligibility information and exceptions |
| `postedDate` | string | Date the opportunity was posted (ISO) |
| `lastUpdatedDate` | string | Date the record was last updated (ISO) |

#### Contact & Attachments

Populated when `includeDetails` is on.

| Field | Type | Description |
|-------|------|-------------|
| `agencyContactName` | string | Agency point-of-contact name |
| `agencyContactEmail` | string | Agency point-of-contact email |
| `agencyContactPhone` | string | Agency point-of-contact phone |
| `attachments` | object\[] | Linked documents, each with `name` and download `url` |

### Tips for Best Results

- **Set status to Forecasted to find grants before they open** — forecasted opportunities are announced ahead of their application window, giving you a head start on proposals competitors haven't seen yet.
- **Turn on Include Full Details for descriptions, contacts and attachments** — synopsis text, eligible-applicant lists, program-officer contacts and NOFO download links only appear in detailed runs; leave it off for fast title-and-deadline sweeps. Dollar figures follow agency habit rather than this setting: NSF, DOE, EPA and Commerce state an award ceiling on almost every opportunity, while NIH-style health announcements usually leave it blank.
- **Browse without a keyword** — leave the search box empty and rely on agency, category, and eligibility filters to pull every matching grant in a program area.
- **Combine eligibility with category** — pairing an applicant type (e.g. Nonprofits) with a funding category (e.g. Health) is the fastest way to a clean, on-target list.
- **Use opportunity numbers for precise re-pulls** — when you already track specific programs, list their numbers to refresh just those rows, including closed and archived ones.
- **Narrow with a posted-date floor** — set Posted On or After to skip older opportunities and focus on the current funding cycle.
- **Start with a small Max Results to preview** — run 25–50 first to confirm your filters match the right grants, then scale up.

### Pricing

**From $8.00 per 1,000 results** — transparent, per-opportunity pricing for the official federal grants catalog. Bronze, Silver, and Gold subscribers pay progressively less; the table below shows total cost at each discount tier.

| Results | No discount | Bronze | Silver | Gold |
|---------|-------------|--------|--------|------|
| 100 | $0.96 | $0.91 | $0.85 | $0.80 |
| 1,000 | $9.60 | $9.05 | $8.50 | $8.00 |
| 10,000 | $96.00 | $90.50 | $85.00 | $80.00 |
| 100,000 | $960.00 | $905.00 | $850.00 | $800.00 |

A "result" is one grant opportunity row in your dataset. There are no compute or time-based charges — you pay per result, plus a small fixed per-run start fee. Platform fees depend on your Apify plan.

### Integrations

Export data in JSON, CSV, Excel, XML, or RSS. Connect to 1,500+ apps via:

- **Zapier** / **Make** / **n8n** — Workflow automation
- **Google Sheets** — Direct spreadsheet export
- **Slack** / **Email** — Notifications on new opportunities
- **Webhooks** — Trigger custom APIs on run completion
- **Apify API** — Full programmatic access

### Legal & Ethical Use

Grants.gov is the official US federal government grants database, and the opportunity data it publishes is public-domain US government information. This actor is designed for legitimate funding research, proposal development, and grant-management workflows. Users are responsible for complying with applicable laws and the Grants.gov Terms of Service. Always verify deadlines, eligibility, and award details against the official opportunity page before applying.

# Actor input Schema

## `searchQuery` (type: `string`):

Keywords to search across grant titles and descriptions, such as 'clean energy' or 'rural health'. Leave empty to browse all opportunities that match the filters below.

## `opportunityNumbers` (type: `array`):

Look up exact opportunities by their Grants.gov opportunity number (for example, 'EPA-R9-SFUND-2024'). When you add numbers here, the actor returns just those opportunities and ignores the search filters.

## `opportunityStatus` (type: `array`):

Which stages to include. Forecasted opportunities are announced but not yet open; Posted opportunities are open for applications now.

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

Limit results to specific federal agencies. Leave empty to include all agencies.

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

Limit results to specific funding categories, such as Health or Environment. Leave empty to include all categories.

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

Limit results to opportunities open to specific applicant types, such as nonprofits or small businesses. Leave empty to include all.

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

Limit results to a funding instrument type. Leave empty to include all.

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

Only include opportunities posted on or after this date. Use the format YYYY-MM-DD, for example 2024-01-15. Leave empty for no lower bound.

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

Only include opportunities posted on or before this date. Use the format YYYY-MM-DD, for example 2024-12-31. Leave empty for no upper bound. This upper-bound date is only applied when Include Full Details is on (the posted date is only available in full details); without details, this filter is ignored.

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

Fetch the full details of every opportunity: description, award amounts, expected number of awards, cost-sharing requirement, agency contact, eligibility notes, and attachment links. Produces much richer results but takes longer.

## `maxResults` (type: `integer`):

Maximum number of opportunities to return. Set to 0 to return all matching opportunities (up to 100,000). For larger pulls, narrow your search with filters or a posted-date range.

## Actor input object example

```json
{
  "searchQuery": "climate",
  "opportunityNumbers": [],
  "opportunityStatus": [
    "forecasted",
    "posted"
  ],
  "agencies": [],
  "fundingCategories": [],
  "eligibilities": [],
  "fundingInstruments": [],
  "includeDetails": false,
  "maxResults": 100
}
```

# Actor output Schema

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

Table of grant opportunities with the fields every run returns: opportunity number, title, agency, status, open date, assistance listing number and link.

## `detail` (type: `string`):

Application deadlines plus award amounts, eligibility, contacts and attachments. Populated when "Include full opportunity details" is enabled.

# 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 = {
    "searchQuery": "climate",
    "opportunityNumbers": [],
    "opportunityStatus": [
        "forecasted",
        "posted"
    ],
    "agencies": [],
    "fundingCategories": [],
    "eligibilities": [],
    "fundingInstruments": [],
    "includeDetails": false,
    "maxResults": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("solidcode/grants-gov-scraper").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 = {
    "searchQuery": "climate",
    "opportunityNumbers": [],
    "opportunityStatus": [
        "forecasted",
        "posted",
    ],
    "agencies": [],
    "fundingCategories": [],
    "eligibilities": [],
    "fundingInstruments": [],
    "includeDetails": False,
    "maxResults": 100,
}

# Run the Actor and wait for it to finish
run = client.actor("solidcode/grants-gov-scraper").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 '{
  "searchQuery": "climate",
  "opportunityNumbers": [],
  "opportunityStatus": [
    "forecasted",
    "posted"
  ],
  "agencies": [],
  "fundingCategories": [],
  "eligibilities": [],
  "fundingInstruments": [],
  "includeDetails": false,
  "maxResults": 100
}' |
apify call solidcode/grants-gov-scraper --silent --output-dataset

```

## MCP server setup

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

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/pfqEiTa3dJaupNCzW/builds/dL38KEy2sbHiWG8YB/openapi.json
