# Grants.gov API

> Grants.gov returns U.S. federal grant listings with funding and eligibility details, available as a workflow and API.

Grants.gov searches grant opportunities using required topic keywords and optional agency, status, and applicant-type filters. Search grants returns matching opportunities with closing dates, eligibility, funding amounts, and other details.

- Page: https://fous.com/workflows/grants-gov
- Handle: `@grants-gov`
- Category: [Government](https://fous.com/workflows/category/government)
- Source website: https://grants.gov
- Last verified: Sep 29, 2026
- Fous is not affiliated with Grants.gov.

## Methods

### Search grants

Operation `search_grants`, version 1. 1 credit per call.

Find U.S. federal grant opportunities by topic, agency, applicant type, and status, with funding and eligibility details. Open results exclude opportunities whose stated closing date has passed; missing funding figures are null.

**Input**

| Field | Type | Required | Example | Description |
|---|---|---|---|---|
| `agency` | string | no | `"Department of Commerce"` | Agency name in words, for example Department of Energy. |
| `status` | string | no | `"open"` | Opportunity status, for example open. Defaults to open. |
| `keywords` | string | yes | `"rural broadband"` | Words describing the grant topic, for example rural broadband. |
| `max_results` | integer | no | `3` | Maximum number of grants to return, for example 25 (up to 100). |
| `who_can_apply` | string | no | `"tribal_governments"` | Eligible applicant type, for example nonprofits. Defaults to anyone. |

**Input schema**

```json
{
  "type": "object",
  "required": [
    "keywords"
  ],
  "properties": {
    "agency": {
      "type": "string",
      "description": "Agency name in words, for example Department of Energy.",
      "examples": [
        "Department of Commerce",
        "Department of Energy"
      ]
    },
    "status": {
      "enum": [
        "open",
        "forecasted",
        "closed"
      ],
      "type": "string",
      "default": "open",
      "description": "Opportunity status, for example open. Defaults to open.",
      "examples": [
        "open",
        "forecasted",
        "closed"
      ]
    },
    "keywords": {
      "type": "string",
      "minLength": 1,
      "description": "Words describing the grant topic, for example rural broadband.",
      "examples": [
        "rural broadband",
        "energy",
        "zzzzxyxyzzzzunfindable"
      ]
    },
    "max_results": {
      "type": "integer",
      "default": 25,
      "maximum": 100,
      "minimum": 1,
      "description": "Maximum number of grants to return, for example 25 (up to 100).",
      "x-fous-developer": true,
      "examples": [
        3,
        2
      ]
    },
    "who_can_apply": {
      "enum": [
        "anyone",
        "nonprofits",
        "small_businesses",
        "state_governments",
        "city_or_county_governments",
        "tribal_governments",
        "universities",
        "individuals"
      ],
      "type": "string",
      "default": "anyone",
      "description": "Eligible applicant type, for example nonprofits. Defaults to anyone.",
      "examples": [
        "tribal_governments",
        "universities"
      ]
    }
  },
  "additionalProperties": false,
  "examples": [
    {
      "keywords": "rural broadband",
      "max_results": 3
    },
    {
      "agency": "Department of Commerce",
      "status": "open",
      "keywords": "rural broadband",
      "max_results": 2,
      "who_can_apply": "tribal_governments"
    },
    {
      "status": "forecasted",
      "keywords": "rural broadband",
      "max_results": 2
    }
  ]
}
```

**Output**

| Field | Type | Example | Description |
|---|---|---|---|
| `grants` | array |  | Matching opportunities, soonest closing date first; undated opportunities last. |
| `grants[].link` | string | `"https://www.grants.gov/search-results-detail/355706"` | Link to the opportunity on Grants.gov. |
| `grants[].title` | string | `"FY 2024 – 2026 Broad Agency Announcement (BAA), National Marine Fisheries Service"` | Grant title. |
| `grants[].agency` | string | `"DOC NOAA - ERA Production"` | Publishing agency. |
| `grants[].status` | string | `"open"` | Opportunity status. |
| `grants[].close_date` | string or null | `"2026-09-30"` | Application closing date, if supplied. |
| `grants[].eligibility` | string or null | `"Native American tribal organizations (other than Federally recognized tribal governments), Small businesses, Native Ame` | Eligible applicants and additional eligibility conditions. |
| `grants[].posted_date` | string or null | `"2024-07-29"` | Posting date. |
| `grants[].opportunity_id` | string | `"355706"` | Grants.gov opportunity identifier. |
| `grants[].award_floor_usd` | number or null | `0` | Lowest award amount in U.S. dollars, if given. |
| `grants[].funding_category` | string or null | `"Environment, Natural Resources, Science and Technology and other Research and Development"` | Funding activity category in words. |
| `grants[].award_ceiling_usd` | number or null | `0` | Highest award amount in U.S. dollars, if given. |
| `grants[].short_description` | string or null | `"This BAA is for the National Marine Fisheries Service, also known as NOAA Fisheries. The purpose of this notice is to r` | Short description of the opportunity. |
| `grants[].opportunity_number` | string | `"NOAA-NMFS-FHQ-2024-27611"` | Opportunity number. |
| `grants[].assistance_listing_number` | string or null | `"11.015"` | Assistance listing (CFDA) number, or multiple numbers separated by commas. |
| `grants[].expected_number_of_awards` | integer or null | `15` | Expected number of awards, if given. |
| `grants[].estimated_total_program_funding_usd` | number or null | `11250000` | Estimated total funding in U.S. dollars, if given. |

**Example input**

```json
{
  "keywords": "rural broadband",
  "max_results": 3
}
```

**Example output**

```json
{
  "grants": [
    {
      "link": "https://www.grants.gov/search-results-detail/355706",
      "title": "FY 2024 – 2026 Broad Agency Announcement (BAA), National Marine Fisheries Service",
      "agency": "DOC NOAA - ERA Production",
      "status": "open",
      "close_date": "2026-09-30",
      "eligibility": "Individuals, County governments, City or township governments, Nonprofits that do not have a 501(c)(3) status with the IRS, other than institutions of higher education, Nonprofits having a 501(c)(3) s…",
      "posted_date": "2024-07-29",
      "opportunity_id": "355706",
      "award_floor_usd": 0,
      "funding_category": "Environment, Natural Resources, Science and Technology and other Research and Development",
      "award_ceiling_usd": 0,
      "short_description": "This BAA is for the National Marine Fisheries Service, also known as NOAA Fisheries. The purpose of this notice is to request applications for special projects and programs associated with the NOAA Fi…",
      "opportunity_number": "NOAA-NMFS-FHQ-2024-27611",
      "assistance_listing_number": "11.015",
      "expected_number_of_awards": null,
      "estimated_total_program_funding_usd": null
    }
  ]
}
```

## Quick start

Call the API with a Fous API key (`FOUS_API_KEY`). To create one, turn on Developer mode in Fous Studio, then open Keys & connections → API keys (https://app.fous.com/keys).

```bash
# First set your key: export FOUS_API_KEY='YOUR_FOUS_API_KEY'
: "${FOUS_API_KEY:?Set FOUS_API_KEY before running this example}"

curl 'https://api.fous.com/v1/query' \
  --fail-with-body --silent --show-error --max-time 120 \
  -H "Authorization: Bearer $FOUS_API_KEY" \
  -H 'Content-Type: application/json' \
  --data-raw '{
  "api": "@grants-gov",
  "visibility": "public",
  "operation": "search_grants",
  "version": 1,
  "input": {
    "keywords": "rural broadband",
    "max_results": 3
  },
  "response": {
    "format": "json"
  }
}'
```

```python
# Save as fous.py and run with python3 fous.py. No packages needed.
# First set your key: export FOUS_API_KEY='YOUR_FOUS_API_KEY'
import json
import os
import urllib.error
import urllib.request

api_key = os.environ.get("FOUS_API_KEY")
if not api_key:
    raise RuntimeError("Set FOUS_API_KEY before running this example")

body = json.loads("{\n  \"api\": \"@grants-gov\",\n  \"visibility\": \"public\",\n  \"operation\": \"search_grants\",\n  \"version\": 1,\n  \"input\": {\n    \"keywords\": \"rural broadband\",\n    \"max_results\": 3\n  },\n  \"response\": {\n    \"format\": \"json\"\n  }\n}")
request = urllib.request.Request(
    "https://api.fous.com/v1/query",
    data=json.dumps(body).encode("utf-8"),
    headers={
        "Authorization": f"Bearer {api_key}",
        "Content-Type": "application/json",
    },
    method="POST",
)
try:
    with urllib.request.urlopen(request, timeout=120) as response:
        result = json.load(response)
except urllib.error.HTTPError as error:
    raise RuntimeError(f"HTTP {error.code}: {error.read().decode('utf-8', errors='replace')}") from error
if result.get("success") is False:
    raise RuntimeError(result.get("error", {}).get("message", "Request failed"))
print(json.dumps(result["data"]["output"], indent=2))
```

```typescript
// Save as fous.mts and run with npx tsx fous.mts.
// First set your key: export FOUS_API_KEY='YOUR_FOUS_API_KEY'
const apiKey = process.env.FOUS_API_KEY;
if (!apiKey) throw new Error("Set FOUS_API_KEY before running this example");

const response = await fetch("https://api.fous.com/v1/query", {
  method: "POST",
  headers: {
    "Authorization": `Bearer ${apiKey}`,
    "Content-Type": "application/json",
  },
  signal: AbortSignal.timeout(120_000),
  body: JSON.stringify({
  "api": "@grants-gov",
  "visibility": "public",
  "operation": "search_grants",
  "version": 1,
  "input": {
    "keywords": "rural broadband",
    "max_results": 3
  },
  "response": {
    "format": "json"
  }
}),
});
type ApiResult = { success: boolean; data?: { output: unknown }; error?: { message: string } };
const result: ApiResult = await response.json();
if (!response.ok || result.success === false) {
  throw new Error(result.error?.message ?? `HTTP ${response.status}`);
}
if (!result.data) throw new Error("Missing API response data");
console.log(result.data.output);
```

Or describe the data in plain language: send `{"api":"@grants-gov","prompt":"Describe the data you need, with every detail"}` to the same URL. Fous fills in the input, runs the method that fits and returns only the fields you asked for; `data.route.calls[].request` is the exact call it made. Routing is free; the run costs the same.

## Use cases

- Find open grants related to a project topic.
- Compare eligibility across applicant types.
- Track upcoming application closing dates.
- Identify agencies funding a specific area.
- Review award amounts and expected award counts.

## FAQ

### Is Fous affiliated with Grants.gov?

No. Fous is not affiliated with Grants.gov. This workflow reads the public grants.gov website and returns its data.

### How much does it cost?

Each run costs 1 credit. With pay-as-you-go, a credit costs 1¢; monthly plans cost less per credit.

### Do I need a Grants.gov account?

No. You only need a Fous account.

### How current is the data?

Fous gets the data from grants.gov when you run it; repeating the same request within a day may return the saved result. Fous checks this workflow automatically; it last passed a check on Sep 29, 2026.

### Which federal grants are open for a topic?

Search grants finds open opportunities matching required topic keywords, with optional agency and applicant-type filters.

### Who is eligible to apply for a grant?

Search grants returns eligible applicants and additional eligibility conditions for matching opportunities.

### What funding amounts are available?

Search grants returns award minimums, award maximums, and estimated total program funding when provided.

## Related

- [USAspending API](https://fous.com/workflows/usaspending.md): USAspending provides official federal spending data and searchable awards from October 1, 2007 onward; figures and agency account reports may be revised or lag published award updates.
- [SAM.gov API](https://fous.com/workflows/sam-gov.md): U.S. federal contract opportunities and government notices.
- [Congress.gov API](https://fous.com/workflows/congress-gov.md): Congress.gov returns federal bills and resolutions matching topic, Congress, status, or chamber, and provides an individual bill’s status, summary, titles, actions, and related bills; summaries may be unavailable.
- [USAJOBS API](https://fous.com/workflows/usajobs.md): Federal government job listings and announcements.
- [Federal Register API](https://fous.com/workflows/federal-register.md): Search United States federal rules, proposed rules, notices, and presidential documents.
- [NIH RePORTER API](https://fous.com/workflows/nih-reporter.md): Public research funding and project records from the National Institutes of Health.
- [ClinicalTrials.gov API](https://fous.com/workflows/clinicaltrials-gov.md): ClinicalTrials.gov helps users find studies and view public trial records, including sponsor-run or funded studies; site distances are approximate, and contacts, eligibility, or exact dates may be missing.
- [Find a Tender API](https://fous.com/workflows/find-a-tender.md): UK government public procurement notices and tenders.
- [All Government workflows](https://fous.com/workflows/category/government)
