# Grants.gov Scraper: Federal Grant Opportunities (No API Key) (`upward_enterprises/grants-gov-opportunity-finder`) Actor

$3 per 1,000 full records, no API key. Federal grant opportunities from Grants.gov by keyword, agency, category, eligibility, and status: award ceiling and floor, deadlines, eligibility text, agency contacts, NOFO attachment links. Official public API. Summaries $1 per 1,000.

- **URL**: https://apify.com/upward\_enterprises/grants-gov-opportunity-finder.md
- **Developed by:** [Upward Enterprises](https://apify.com/upward_enterprises) (community)
- **Categories:**
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.40 / 1,000 grant 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?

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 Scraper: Federal Grant Opportunities (No API Key)

**$3 per 1,000 full records ($2 on the Gold tier), $1 per 1,000 summaries, no start fee, no API key.**

Search every federal funding opportunity on [Grants.gov](https://www.grants.gov) and get back clean, normalized JSON or CSV: award ceiling and floor, expected number of awards, deadlines as ISO dates, eligibility text, funding categories, agency contact, and direct links to the NOFO attachments.

Built on the official public Grants.gov API. No API key, no login, no scraping of HTML pages. Works for people in the Apify Console and for AI agents through the Apify MCP server.

### What you get

One record per opportunity. With **Fetch full details** on (the default), each record looks like this:

```json
{
  "id": "362843",
  "number": "2026-NTIA-TBCP",
  "title": "Tribal Broadband Connectivity Program",
  "status": "posted",
  "agency": "DOC NIST ERA",
  "topAgency": "Department of Commerce",
  "postedDate": "2026-06-17",
  "closeDate": "2026-11-17",
  "archiveDate": "2026-12-17",
  "category": "Discretionary",
  "fundingInstruments": ["Grant"],
  "fundingCategories": ["Science and Technology and other Research and Development"],
  "applicantTypes": ["Others (see text field entitled \"Additional Information on Eligibility\" for clarification)"],
  "eligibilityText": "The following entities are eligible to receive grants under the TBCP: 1. a Tribal Government; ...",
  "description": "NTIA is soliciting applications for funds remaining under the Tribal Broadband Connectivity Program ...",
  "costSharing": false,
  "expectedAwards": 150,
  "awardCeiling": null,
  "awardFloor": null,
  "assistanceListings": ["11.029"],
  "assistanceListingTitles": [{ "number": "11.029", "title": "Tribal Broadband Connectivity Program" }],
  "contact": { "name": "Misty L Roosa", "email": "darren.olson@nist.gov", "phone": "301-975-3007" },
  "attachments": [
    { "name": "NTIA_Amended_TBCP3_NOFO_2026.pdf", "folder": "Full Announcement", "bytes": 633383,
      "url": "https://apply07.grants.gov/grantsws/rest/opportunity/att/download/353116" }
  ],
  "forecast": null,
  "lastUpdated": "2026-07-30",
  "url": "https://www.grants.gov/search-results-detail/362843"
}
```

Forecasted opportunities carry a `forecast` object with the agency's estimated posting date, application due date, award date, and project start date instead of firm deadlines.

With **Fetch full details** off you get the cheaper summary: id, number, title, status, agency, posted and close dates, assistance listings, and link.

### Input

| Field | What it does |
|---|---|
| Keyword | Free-text search, the same as the search box on Grants.gov. Leave empty to browse by filters only. |
| Opportunity status | Forecasted, Posted, Closed, Archived. Default: forecasted and posted. |
| Agencies | Grants.gov agency codes such as `HHS`, `USDA`, `NSF`, `DOC-DOCNISTERA`. A top-level code includes its sub-agencies. |
| Funding categories | Category codes such as `HL` (Health), `ED` (Education), `EN` (Energy). The full list is in the field's help text. |
| Applicant eligibility | Eligibility codes such as `12` (501(c)(3) nonprofits), `06` (public universities), `23` (small businesses). |
| Funding instruments | `G` Grant, `CA` Cooperative Agreement, `PC` Procurement Contract, `O` Other. |
| Assistance listing number | Filter to one CFDA / Assistance Listing number, e.g. `93.243`. |
| Fetch full details | On by default. Off gives a fast, cheap list of titles and deadlines. |
| Max opportunities | Stop after this many. Default 100, up to 10,000. |

Example: every open HHS opportunity that a 501(c)(3) can apply for:

```json
{ "agencies": ["HHS"], "eligibilities": ["12"], "statuses": ["posted"], "maxItems": 500 }
```

### Pricing

You pay per opportunity delivered, nothing else.

| Event | Free and Bronze | Silver | Gold and above |
|---|---|---|---|
| Grant opportunity (full details) | $0.003 | $0.0027 | $0.0024 |
| Grant opportunity summary | $0.001 | $0.0009 | $0.0008 |

A run that returns 500 fully detailed opportunities costs $1.50. A row whose details could not be fetched is billed as a summary. Set a maximum total charge on the run to cap spend; the Actor stops cleanly when it is reached and never delivers rows it could not bill.

### Use cases

- **Grant writers and nonprofits**: a weekly scheduled run for your program areas, piped to Google Sheets, Airtable, or Slack via Apify integrations.
- **Universities and research offices**: monitor forecasted opportunities by agency so faculty get months of lead time.
- **Consultants and govcon shops**: pull the full NOFO attachments for each opportunity and hand them to a summarizer.
- **AI agents**: call this Actor as a tool through the [Apify MCP server](https://docs.apify.com/integrations/mcp) to answer "what federal funding is open for X" with structured data instead of web pages.

### Data source and limits

- Data comes from the official Grants.gov search API and opportunity detail API, updated by agencies as they post.
- Contact details are the official grantor contacts published with each opportunity.
- Award amounts are returned as numbers when the agency published them and `null` when the posting says "none" or is blank.
- Attachment links point at Grants.gov's own download endpoint; files are not copied.
- At the end of each run the Actor reports run counts (rows delivered, events charged, duration, status) to its maintainer's dashboard. It never sends your input, your results, or anything about your account.
- Grants.gov's detail service occasionally answers with a stub. The Actor retries once and, if the detail is still unavailable, delivers the summary record with a `detailError` field so a run never silently drops an opportunity.

### About

Built and maintained by **Upward Enterprises · AI & API Services** (Iowa, USA). Public-data tools for people and AI agents, with pay-per-record pricing and no keys to manage.

### Changelog

- **0.1** (2026-09-09): first release. Search with all Grants.gov filters, full detail enrichment, forecasts, attachments, pay-per-event pricing.

# Actor input Schema

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

Free-text search, e.g. "rural broadband" or "opioid treatment". Leave empty to browse everything that matches the other filters.

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

Which opportunities to include. Forecasted = agency plans to post; Posted = open now; Closed = past deadline; Archived = removed from search.

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

Grants.gov agency codes, e.g. HHS, USDA, DOC-DOCNISTERA, NSF. Top-level codes include all sub-agencies.

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

Category codes: AG Agriculture, AR Arts, BC Business and Commerce, CD Community Development, CP Consumer Protection, DPR Disaster Prevention and Relief, ED Education, ELT Employment, Labor and Training, EN Energy, ENV Environment, FN Food and Nutrition, HL Health, HO Housing, HU Humanities, IS Information and Statistics, ISS Income Security and Social Services, LJL Law, Justice and Legal Services, NR Natural Resources, O Other, RA Recovery Act, RD Regional Development, ST Science, Technology and R\&D, T Transportation.

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

Eligibility codes: 00 State governments, 01 County governments, 02 City or township governments, 04 Special district governments, 05 Independent school districts, 06 Public/state universities, 07 Native American tribal governments (federally recognized), 08 Public housing authorities, 11 Native American tribal organizations (other), 12 Nonprofits with 501(c)(3), 13 Nonprofits without 501(c)(3), 20 Private universities, 21 Individuals, 22 For-profit organizations other than small businesses, 23 Small businesses, 25 Others, 99 Unrestricted.

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

G Grant, CA Cooperative Agreement, PC Procurement Contract, O Other.

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

Filter to one Assistance Listing number, e.g. 11.029.

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

Also fetch each opportunity's detail page: award ceiling and floor, expected number of awards, eligibility text, full description, contact, and attachments. Costs more per record; turn off for a cheap list of titles and deadlines.

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

Stop after this many opportunities.

## Actor input object example

```json
{
  "keyword": "rural broadband",
  "statuses": [
    "forecasted",
    "posted"
  ],
  "agencies": [],
  "fundingCategories": [],
  "eligibilities": [],
  "fundingInstruments": [],
  "includeDetails": true,
  "maxItems": 100
}
```

# Actor output Schema

## `opportunities` (type: `string`):

No description

## `opportunitiesCsv` (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 = {
    "keyword": "rural broadband",
    "statuses": [
        "forecasted",
        "posted"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("upward_enterprises/grants-gov-opportunity-finder").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": "rural broadband",
    "statuses": [
        "forecasted",
        "posted",
    ],
}

# Run the Actor and wait for it to finish
run = client.actor("upward_enterprises/grants-gov-opportunity-finder").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": "rural broadband",
  "statuses": [
    "forecasted",
    "posted"
  ]
}' |
apify call upward_enterprises/grants-gov-opportunity-finder --silent --output-dataset

```

## MCP server setup

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

```

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/ccIrH8te2GCPU7rAO/builds/9LbJwMH26fCbcs3if/openapi.json
