# Grants.gov Opportunity Search - Federal Grants & Funding (`captainhandsome/grants-gov-opportunity-search`) Actor

Search official Grants.gov funding opportunities by keyword, agency, status, Assistance Listing, eligibility, instrument, and category. Export clean deadlines, award amounts, eligibility, contacts, and descriptions.

- **URL**: https://apify.com/captainhandsome/grants-gov-opportunity-search.md
- **Developed by:** [Joseph McRell](https://apify.com/captainhandsome) (community)
- **Categories:** Business, Other
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.10 / 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 Opportunity Search - Federal Grants & Funding

Search official Grants.gov funding opportunities and export analysis-ready deadlines, agencies, award ranges, eligibility, program classifications, descriptions, and contacts. Filter by keyword, opportunity number, agency, status, Assistance Listing, funding category, instrument, or applicant eligibility.

No API key, login, browser automation, or website scraping is required.

### What data can I extract?

- Funding opportunity number, title, status, and document type
- Owning and top-level agencies
- Opening, posting, response, closing, and archive dates
- Assistance Listing numbers and program titles
- Funding instruments, categories, and eligible applicant types
- Estimated funding, award floor, award ceiling, and cost-sharing flag
- Plain-text synopsis and eligibility language
- Agency contact name, email, telephone, and source links

Each dataset row represents one Grants.gov opportunity.

### Input example

```json
{
  "keyword": "artificial intelligence",
  "statuses": ["posted"],
  "include_details": true,
  "max_items": 10
}
```

At least one search filter is required. Turn off full details for faster discovery when search-result fields are sufficient.

### Output example

```json
{
  "opportunity_id": 353936,
  "opportunity_number": "24-569",
  "title": "Mathematical Foundations of Artificial Intelligence",
  "status": "posted",
  "agency_code": "NSF",
  "agency_name": "U.S. National Science Foundation",
  "close_date": "2026-10-09",
  "aln_numbers": "47.041 | 47.049 | 47.070 | 47.075",
  "estimated_funding": 8500000,
  "award_ceiling": 1500000,
  "award_floor": 500000,
  "cost_sharing": false,
  "funding_instruments": "Grant",
  "details_included": true,
  "total_matches": 173,
  "grants_gov_url": "https://www.grants.gov/search-results-detail/353936"
}
```

### Common use cases

- Funding discovery for nonprofits, universities, businesses, and local governments
- Grant pipeline and deadline monitoring
- Agency and program trend analysis
- Building funding alerts, newsletters, or CRM workflows
- AI-assisted eligibility and opportunity summarization

### Use with AI agents and MCP

Agents can retrieve current opportunities, compare award ranges, summarize eligibility, rank deadlines, and pass structured records into planning or CRM workflows. The Actor removes source HTML and flattens repeated classifications into predictable text fields.

### Pricing and cost control

Output is billed per result at **$0.003 per result** (about $3.00 per 1,000 results), plus a $0.0005 Actor-start charge billed once per gigabyte of memory at run start. Use `max_items` to cap both output volume and charges. The price shown on the Apify Store listing is authoritative.

### Reliability

The Actor uses Grants.gov's official unauthenticated search and detail endpoints, retries temporary failures, verifies API-level error codes, paginates without overlap, and preserves a stable 34-field row shape. Persistent source errors fail visibly instead of returning a misleading empty dataset.

### Limitations and responsible use

- Grants.gov controls source availability, corrections, status, and update timing.
- Opportunity descriptions and eligibility text can be lengthy and may contain source formatting artifacts despite HTML cleanup.
- An opportunity match does not establish eligibility or guarantee funding.
- Deadlines and requirements can change; confirm them on the linked official opportunity before acting.
- This Actor does not submit applications or provide grant-writing, financial, or legal advice.

### Turn this into a funding monitor

1. Save a focused query as an Apify Task, including agency, status, closing-date, and `max_items` limits.
2. Add the Task to an Apify Schedule for a daily or weekly refresh.
3. Add an `ACTOR.RUN.SUCCEEDED` Task webhook or integration to send the run's `resource.defaultDatasetId` to your database, Slack workflow, email service, or downstream Actor.

Related fleet tools: [USAspending Federal Awards](https://apify.com/captainhandsome/usaspending-federal-awards) shows awarded federal money, [TED EU Tender Search](https://apify.com/captainhandsome/ted-eu-tender-search) covers European procurement, and [Google News Search](https://apify.com/captainhandsome/google-news-search) monitors organizations and programs between official updates.

### FAQ

#### Does this require a Grants.gov account or API key?

No. The public search and opportunity-detail endpoints used here do not require authentication.

#### What does full detail add?

It adds descriptions, eligibility, award amounts, cost sharing, funding classifications, and agency contacts from the individual opportunity endpoint.

#### Can I search more than one agency or status?

Yes. Enter multiple agency codes and select multiple statuses; the Actor sends them using Grants.gov's documented multi-value format.

#### Why can award amounts be empty?

Some forecasts and synopses do not provide an estimated total, floor, or ceiling.

#### Can this tell me whether my organization qualifies?

No. It exposes the official eligibility language for research; confirm eligibility with the agency and complete announcement.

# Actor input Schema

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

Search opportunity titles and descriptions using Grants.gov keyword syntax.

## `opportunity_number` (type: `string`):

Exact or partial funding opportunity number.

## `agency_codes` (type: `array`):

Federal agency codes, for example NSF or HHS.

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

Limit results to selected Grants.gov statuses.

## `assistance_listing` (type: `string`):

Assistance Listing number, formerly CFDA, for example 47.070.

## `funding_categories` (type: `array`):

Grants.gov funding activity category codes, for example ST or HL.

## `funding_instruments` (type: `array`):

Funding instrument codes such as G for grant or CA for cooperative agreement.

## `eligibility_codes` (type: `array`):

Grants.gov applicant eligibility codes.

## `include_details` (type: `boolean`):

Fetch award amounts, eligibility text, description, and contact fields for every match.

## `max_items` (type: `integer`):

Hard limit on opportunity rows saved to the dataset.

## Actor input object example

```json
{
  "keyword": "artificial intelligence",
  "include_details": true,
  "max_items": 10
}
```

# Actor output Schema

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

One flat row per Grants.gov funding opportunity.

# 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": "artificial intelligence"
};

// Run the Actor and wait for it to finish
const run = await client.actor("captainhandsome/grants-gov-opportunity-search").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": "artificial intelligence" }

# Run the Actor and wait for it to finish
run = client.actor("captainhandsome/grants-gov-opportunity-search").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": "artificial intelligence"
}' |
apify call captainhandsome/grants-gov-opportunity-search --silent --output-dataset

```

## MCP server setup

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

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/OuiN4FkTv1uLbLirh/builds/dj3pEam9FLxngYdGS/openapi.json
