# Grants.gov Search API: Federal Grant Opportunities (`lathewright/grants-gov-search`) Actor

Returns US federal grant opportunities from the official Grants.gov API by keyword, agency, status, eligibility and category, with optional details: award ceiling and floor, deadlines, eligibility, cost sharing, contact and attachments. No key. For nonprofits and grant writers.

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

## Pricing

from $3.00 / 1,000 grant opportunity founds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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 Search API: Federal Grant Opportunities

Search every US federal grant opportunity on Grants.gov and get award sizes, deadlines and eligibility in one row, for nonprofits, grant writers, universities and AI agents. It costs $0.003 per opportunity and $0.01 more when full details are fetched, so 100 opportunities with details cost $1.30.

Search every US federal grant opportunity on Grants.gov by keyword, agency, status, eligible applicant type and funding category, and get the details that matter in one row: award ceiling and floor, estimated total funding, number of awards, deadlines, eligibility, cost sharing, program contact and attachment links. Uses the official keyless Grants.gov API.

Built and maintained by **Lathewright**. Lathewright is operated by AI systems under human ownership. A person reviews and approves everything we publish, send and sell. **$0.003 per opportunity found, $0.01 extra when full details are fetched.**

### What you can do with it

- **Find funding**: `keyword: "rural broadband"`, `eligibilities: ["12"]` (501(c)(3) nonprofits), `statuses: ["posted", "forecasted"]`.
- **Deadline feed**: schedule daily with `postedAfter` = yesterday and push new opportunities to Slack, Airtable or a CRM.
- **Grant-writing agents**: an LLM can read `description`, `eligibilityText`, `awardCeiling` and `closeDate` and draft a fit assessment without touching the website.
- **Agency watch**: `agencies: ["NSF", "HHS-NIH11", "USDA-NIFA"]`.

### Example tasks

Paste any of these into the Input tab, or send the same JSON through the API. Prices are the per-result prices listed under Pricing.

#### 1. Grants for youth mental health that 501(c)(3) nonprofits can apply for

```json
{
  "keyword": "youth mental health",
  "statuses": ["posted"],
  "eligibilities": ["12"],
  "includeDetails": true,
  "maxResults": 20
}
```

What comes back: One row per opportunity with `title`, `agency`, `status`, `openDate`, `closeDate`, `awardCeiling`, `estimatedTotalFunding` and `url`, plus detail fields. Up to 20 rows, at most $0.26.

#### 2. Department of Energy renewable energy grants, list only

```json
{
  "keyword": "renewable energy",
  "agencies": ["DOE"],
  "fundingCategories": ["EN"],
  "includeDetails": false,
  "maxResults": 50
}
```

What comes back: Search-result rows without the detail lookup, $0.003 each.

#### 3. Arts education grants posted since September, including forecasts

```json
{
  "keyword": "arts education",
  "postedAfter": "2026-09-01",
  "statuses": ["posted", "forecasted"],
  "maxResults": 25
}
```

What comes back: Opportunities opened on or after 1 September 2026.

### Input

| Field | Type | Notes |
|---|---|---|
| `keyword` | string | Free text (empty = all matching the filters) |
| `statuses` | array | `posted`, `forecasted`, `closed`, `archived` (default posted + forecasted) |
| `agencies` | array | Grants.gov agency codes (`HHS`, `NSF`, `ED`, `DOE`, `USDA`, sub-codes like `HHS-NIH11`) |
| `fundingCategories` | array | `AG`, `AR`, `BC`, `CD`, `ED`, `EN`, `ENV`, `HL`, `HU`, `IS`, `ST`, `T`, `O`… |
| `eligibilities` | array | `00` states, `01` counties, `02` cities, `06` public universities, `12` 501(c)(3) nonprofits, `20` private universities, `23` small businesses, `99` unrestricted… |
| `includeDetails` | boolean | Fetch synopsis details for every hit (default true) |
| `postedAfter` | YYYY-MM-DD | Keep only opportunities opened on or after this date |
| `maxResults` | integer | Cap on opportunities |

```json
{ "keyword": "artificial intelligence", "statuses": ["posted"], "eligibilities": ["12", "23"], "includeDetails": true, "maxResults": 50 }
```

### Output

```json
{
  "opportunityId": "364087",
  "opportunityNumber": "ED-GRANTS-101526-002",
  "title": "Institute of Education Sciences (IES): Transformative Research in Special Education",
  "agencyCode": "ED",
  "agency": "Department of Education",
  "status": "posted",
  "openDate": "2026-10-16",
  "closeDate": "2026-12-11",
  "assistanceListings": ["84.324"],
  "url": "https://www.grants.gov/search-results-detail/364087",
  "awardCeiling": 3750000,
  "awardFloor": null,
  "estimatedTotalFunding": null,
  "expectedAwards": null,
  "costSharing": false,
  "eligibleApplicants": ["Others (see text field entitled \"Additional Information on Eligibility\" for clarification)"],
  "eligibilityText": "Applicants that have the ability and capacity to conduct scientifically valid research are eligible...",
  "description": "Through the Transformative Research in Special Education Grants program, IES seeks to support...",
  "contactName": "Program Manager",
  "contactEmail": "program.office@ed.gov",
  "attachments": [{ "name": "Request for Applications", "url": "https://apply07.grants.gov/grantsws/rest/opportunity/att/download/367231", "sizeBytes": 1118223 }]
}
```

### Pricing

| Event | Price | Notes |
|---|---|---|
| Grant opportunity found (`grant`) | $0.003 | Primary event |
| Opportunity details fetched (`grant-details`) | $0.01 | Only when `includeDetails` is true |

Plus Apify's start fee ($0.00005). 50 opportunities with details = $0.65. Set a maximum cost per run and the Actor stops cleanly.

### How to use it

- **Console**: fill in the form, Start, export CSV or JSON.
- **API**: `POST https://api.apify.com/v2/acts/lathewright~grants-gov-search/run-sync-get-dataset-items?token=<token>`
- **n8n / Make / Zapier**: Apify node → this Actor on a daily schedule → new rows to your pipeline.

### Use from an AI agent (MCP)

Add this Actor as a tool in Claude, Cursor, VS Code or any MCP client with `https://mcp.apify.com/?tools=lathewright/grants-gov-search`. The Actor description is the tool description, and the input fields above are the tool parameters. Example prompts: "Find posted federal grants for youth mental health that nonprofits can apply for, with deadlines and award ceilings", "What NSF opportunities close this quarter?".

### Data source and fair use

Grants.gov public search and opportunity APIs (`api.grants.gov/v1/api/search2` and `fetchOpportunity`), no key required. The Actor sends at most two to three requests per second. Grant notices are US government public records. Program contact details are the official contacts the agency publishes for applicants.

### FAQ

**Why is `estimatedTotalFunding` sometimes null?** Agencies are not required to publish it; the row still carries the ceiling, floor and deadline when present.

**Can I get forecasted opportunities?** Yes, include `forecasted` in `statuses`; the details come from the forecast record.

**Does it cover state or foundation grants?** No, only federal opportunities posted on Grants.gov.

# Actor input Schema

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

Search words, e.g. `rural broadband`, `youth mental health`, `artificial intelligence`. Leave empty to list all opportunities matching the filters.

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

Any of `posted`, `forecasted`, `closed`, `archived`. Default: posted and forecasted.

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

Grants.gov agency codes, e.g. `HHS`, `NSF`, `USDA`, `ED`, `DOE`, `NIH` (sub-agencies like `HHS-NIH11` also work). Empty = all.

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

Category codes: AG Agriculture, AR Arts, BC Business, CD Community Development, ED Education, EN Energy, ENV Environment, HL Health, HU Humanities, IS Information, ST Science and Technology, T Transportation, O Other. Empty = all.

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

Eligibility codes: 00 State governments, 01 County, 02 City, 04 Special district, 05 School districts, 06 Public universities, 07 Native American tribal governments, 08 Public housing, 11 Native American tribal organizations, 12 Nonprofits with 501(c)(3), 13 Nonprofits without 501(c)(3), 20 Private universities, 21 Individuals, 22 For-profit (non-small), 23 Small businesses, 25 Others, 99 Unrestricted. Empty = all.

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

Fetch each opportunity's synopsis: award ceiling/floor, estimated funding, deadlines, eligibility text, cost sharing, program contact and attachment links. Billed per opportunity (see pricing).

## `postedAfter` (type: `string`):

Only opportunities with an open date on or after this date (applied after search).

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

Maximum opportunities to return. Each is one billable event (two if details are fetched).

## `compactOutput` (type: `boolean`):

Return only the key fields (smaller, cheaper for AI agents to read).

## Actor input object example

```json
{
  "keyword": "artificial intelligence",
  "includeDetails": true,
  "maxResults": 50,
  "compactOutput": false
}
```

# Actor output Schema

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

One row per grant 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("lathewright/grants-gov-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("lathewright/grants-gov-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 lathewright/grants-gov-search --silent --output-dataset

```

## MCP server setup

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