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

\[💰 $8.0 / 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
- **Stats:** 4 total users, 1 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?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# 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** — narrow to the NSF, Department of Health and Human Services (HHS), Department of Energy, EPA, NASA, USDA, Department of Education, and 24 more, by name instead of cryptic codes.
- **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.
- **Full award economics on every detailed row** — award ceiling, award floor, estimated total program funding, expected number of awards, and the cost-sharing/matching requirement flag.
- **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.
- **Live application deadlines and one-click URLs** — close date, open date, and a direct Grants.gov opportunity link on every row.

### 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. 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/web/grants/view-opportunity.html?oppId=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) |
| `alnList` | string\[] | Assistance Listing Numbers (formerly CFDA) |
| `url` | string | Direct Grants.gov opportunity link |

#### Funding Amounts

Populated when `includeDetails` is on.

| 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 award amounts** — award ceiling, floor, estimated total funding, agency contacts, and attachment links only appear in detailed runs; leave it off for fast title-and-deadline sweeps.
- **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 key fields.

# 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/SgbZ0lbaysiRjh5hQ/openapi.json
