Government and public records

Grants.gov API: Federal Grant Opportunities as JSON

Grants.gov is the federal government's listing of grant opportunities, and it has a public API that needs no key. This Actor searches it by keyword, normalizes each opportunity, and on scheduled runs reports only what is new or changed.

Open the Actor on Apify Store

Grants.gov API & SAM.gov Scraper — Federal Grants Feed. Pay per result; see the Store page for current pricing.

The source and its limits

The Grants.gov API lists federal grant opportunities with the statuses forecasted, posted, closed and archived. The Actor searches it for each keyword and, with fetchDetails, calls Grants.gov's fetchOpportunity for each result to add award ceiling and floor, expected awards, total funding, eligibilities, funding categories and the agency contact. No key and no login are needed.

The same Actor can add recent USAspending.gov awards for the same keywords (who won similar grants and contracts), and SAM.gov contract notices, covered on the SAM.gov page. Every record has the same core fields, so one feed can hold all of them.

Limits worth knowing

  • Grants.gov OR-matches the words of a keyword: "small business" matches "small" or "business". Use specific phrases.
  • postedWithinDays (1 to 365) applies to the Grants.gov open date.
  • Requests are limited to two per second per host, with backoff on errors. Each keyword on each source has a 10-minute budget.
  • When the agency set no award ceiling, awardCeiling is null rather than a guess.

Fields you get

FieldWhat it holds
opportunityId, number, titleGrants.gov id, the opportunity number and title
agency, agencyCodePosting agency
status, docTypeforecasted, posted, closed or archived; synopsis or forecast
postedDate, closeDate, lastUpdatedKey dates
assistanceListingsAssistance Listing (CFDA) numbers
awardCeiling, awardFloor, expectedAwards, estimatedTotalFundingWith fetchDetails; null when not set
eligibilities, fundingCategories, fundingInstruments, costSharingWith fetchDetails
agencyContactName, agencyContactEmail, descriptionWith fetchDetails
url, isNew, isUpdatedLink to the Grants.gov listing and the monitor-mode flags

Example output

One Grants.gov opportunity with details fetched (shape from the Actor's README; values illustrative):

{
  "source": "grantsGov",
  "recordType": "opportunity",
  "keyword": "small business",
  "opportunityId": "351083",
  "number": "SBA-OED-26-001",
  "title": "Small Business Development Centers Program",
  "agency": "Small Business Administration",
  "agencyCode": "SBA",
  "status": "posted",
  "docType": "synopsis",
  "postedDate": "2026-10-10",
  "closeDate": "2026-12-15",
  "assistanceListings": [
    "59.037"
  ],
  "awardCeiling": null,
  "awardFloor": 0,
  "expectedAwards": 62,
  "estimatedTotalFunding": 125000000,
  "costSharing": true,
  "fundingCategories": [
    "Business and Commerce"
  ],
  "fundingInstruments": [
    "Cooperative Agreement"
  ],
  "url": "https://www.grants.gov/search-results-detail/351083",
  "detailsFetched": true,
  "isNew": true,
  "isUpdated": false,
  "jurisdiction": "United States",
  "level": "federal",
  "fetchedAt": "2026-10-16T12:00:00.000Z"
}

Use cases

Grant alert feed for a program area

Schedule a keyword search with onlyNewSinceLastRun. Unseen opportunities arrive with isNew: true; ones whose title, status, dates or award fields changed arrive with isUpdated: true.

Forecasts before they post

Add forecasted to oppStatuses to see opportunities agencies have announced but not yet opened.

Who won similar awards

Turn on includeRecentAwards to add USAspending award records (recipient, amount, award type, dates) for the same keywords.

How to run it

You need an Apify account and its API token (Console → Settings → API & Integrations). Each run is billed per result to your account; set a maximum total charge for the run to cap spend.

With curl

The sync endpoint starts a run, waits up to 300 seconds and returns the dataset items. Posted and forecasted grants for two keywords from the last 30 days, with details, in monitor mode:

export APIFY_TOKEN=<your Apify API token>

curl -sS -X POST \
  "https://api.apify.com/v2/acts/owlabee~grants-gov-api/run-sync-get-dataset-items" \
  -H "Authorization: Bearer ${APIFY_TOKEN}" \
  -H "Content-Type: application/json" \
  -d '{
  "keywords": [
    "rural broadband",
    "digital equity"
  ],
  "sources": [
    "grantsGov"
  ],
  "oppStatuses": [
    "posted",
    "forecasted"
  ],
  "postedWithinDays": 30,
  "maxResults": 200,
  "fetchDetails": true,
  "maxDetails": 100,
  "onlyNewSinceLastRun": true,
  "stateStoreName": "broadband-grants-state"
}'

From an AI agent (MCP)

Apify hosts an MCP server. This config exposes only this Actor to the agent:

{
  "mcpServers": {
    "owlabee-grants-gov-api": {
      "url": "https://mcp.apify.com/?tools=owlabee/grants-gov-api",
      "headers": {
        "Authorization": "Bearer ${APIFY_TOKEN}"
      }
    }
  }
}

Then ask, for example: Find federal grants posted on Grants.gov in the last 30 days about rural broadband or digital equity, with close dates and award ceilings.

Python, Node.js and more examples

Runnable curl.sh, python.py, node.mjs and mcp.json files for this Actor are in examples/grants-gov-api on GitHub.

No code: Zapier, Make or n8n

Apify's official apps on these platforms can run this Actor and pass its results on. Step-by-step recipes: New Grants.gov Opportunities to Google Sheets with Zapier.

FAQ

Do I need a Grants.gov API key?

No. Grants.gov needs no key. Only the SAM.gov source needs a free personal key.

How does "only new or updated" work?

For every source and keyword the Actor stores a fingerprint per opportunity in a named key-value store. Unchanged opportunities are skipped and not charged. Change stateStoreName to start over.

Can it rank opportunities for my organization?

Pass the results to the Grant Matching and RFP Bid/No-Bid Scorer, which scores each record against a profile you describe once.

Does it scrape the grants.gov website?

No. It uses the official public APIs only, with no HTML scraping, proxies or login.

Are state and local grants included?

No. The optional sled source reads six state and local procurement datasets (bids, not grants); it is not a nationwide state and local feed.