Grants.gov Funding Opportunity Alerts
Pricing
from $2.50 / 1,000 funding opportunity returneds
Grants.gov Funding Opportunity Alerts
Get new US federal grant and funding opportunities from Grants.gov by keyword, agency, eligibility or status, with a true monitoring mode that only returns and bills for opportunities new since your last run. Alerts to Slack, Discord or Telegram. Export federal grants to Google Sheets or n8n.
Pricing
from $2.50 / 1,000 funding opportunity returneds
Rating
0.0
(0)
Developer
Adriana Voss
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
6 days ago
Last modified
Categories
Share
Get new US federal grant and funding opportunities from Grants.gov by keyword, agency, eligibility, or status, as soon as they're posted. Search Grants.gov — the US government's own funding opportunity system — by one or more keywords (full-text, matched against the opportunity title and description), agency code, eligibility category, or opportunity status. Turn on monitoring mode and run it on a schedule to get only the opportunities that are new since your last run, charged per opportunity and free on a quiet day.
Works without any key or account — this is a fully public, keyless JSON API (no challenge
page, no rate limit observed on this build's probes). This actor covers US federal grants and
funding opportunities only, via Grants.gov; it pairs with sam-gov-opportunity-alerts (US federal
procurement contracts, a separate system) as the two halves of the US federal funding/contracting
radar. It does not cover EU tenders (see eu-tender-alerts) or UK tenders.
Known limitation. A re-published or amended Grants.gov notice keeps its original numeric id,
so monitoring mode will not alert again on a revision to a notice you've already seen — only a
genuinely new opportunity id triggers a new alert. Also, when you give more than one agencies or
eligibilities code, only the first is sent to Grants.gov's server-side filter (its multi-value
syntax for those two fields is unverified) — run one search per code for a true OR across several
agencies or eligibility categories.
How to use
- In the Apify Console. Open the actor page and click Start — the
keywordsfield is already pre-filled with a working example. Results land in the run's dataset as soon as each item is found. - Via the API. Call it directly with a POST request — no Console needed once you have an API token:
curl "https://api.apify.com/v2/acts/accountable_eel~grants-gov-alerts/run-sync-get-dataset-items?token=<YOUR_TOKEN>" \-X POST \-H "Content-Type: application/json" \-d '{"keywords":["climate"]}'
- On a schedule. Save this actor as an Apify Task with the input you want, then add a Schedule (hourly, daily, weekly) so it runs on its own — no server of your own required.
Input
{"keywords": ["climate"]}
Optional. One keyword per line — matched against the opportunity title and description (Grants.gov's own full-text search, OR-ish: several keywords widen the match, not narrow it). Leave empty to search by agency, eligibility or status alone. Accepted formats: climate, cybersecurity.
One combined search runs per call: keywords are OR-ish (Grants.gov's own full-text search — more
keywords widen the match, they don't narrow it), optionally narrowed by oppStatuses (default
posted|forecasted), agencies, eligibilities, and postedWithinDays. None of the fields are
required — leaving keywords empty searches by status/agency/eligibility alone (e.g. "every newly
posted grant from NSF"). oppStatuses, agencies (first code only) and eligibilities (first code
only) are applied server-side, confirmed live this build (see "Current status" below); the date
window is applied client-side. The search run itself is free; you're billed per opportunity actually
returned.
Current status (as probed/built 2026-10-03/04)
- sortBy=openDate|desc: server-side, confirmed (results come back genuinely newest-first).
- agencies: server-side, confirmed with one code (
NSF: hitCount 44 → 2, both rows agencyNSF). Multi-code syntax unverified — only the first code in your list is sent. - eligibilities: server-side, confirmed with one code (
12: hitCount 44 → 7). Same multi-code caveat as agencies. - oppStatuses: server-side, confirmed by arithmetic (hitCount 44 for "climate" with no other filter equals the posted(36)+forecasted(8) facet counts for that keyword).
- postedWithinDays: client-side (no documented server-side date-range filter on this route).
- robots.txt (
www.grants.gov/robots.txt):Allow: /for all user agents — nothing disallowed.
Output
One row per item, for example:
| query | found | status | searchSummary | opportunityCount | opportunities | id | opportunityNumber | title | agencyCode | agency | openDate | closeDate | oppStatus | docType | cfda | url | matchedKeyword | isNew | firstSeenAt | scrapedAt |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| climate | true | OK | <all opportunities (full list)> | <agency code> | <grants.gov notice page> | <matched keyword (best effort)> | <is this opportunity new?> | 1970-01-01T00:00:00.000Z |
A miss comes back as a row with "found": false and is never charged.
Pricing
- Funding opportunity returned: $5 per 1,000 opportunitys
Plus a $0.0015 start fee per run. Each event above is billed independently, only when it actually returns data — misses (found:false) are never charged.
Example runs
Paste any of these into the Input tab and press Start. All three return rows with no key, no token needed beyond your own Apify API token — Grants.gov's search is fully keyless:
{"keywords":["climate"],"oppStatuses":"posted|forecasted","postedWithinDays":30,"maxResults":10}— climate funding, posted or forecasted, last 30 days. Live-verified this build (see "Live call" below).{"keywords":["research"],"onlyNewSinceLastRun":true,"deltaName":"research-grants"}— a funding alert: only opportunities new since the last run, named so a schedule can be told apart from another search.{"agencies":["NSF"],"eligibilities":["12"],"postedWithinDays":14}— National Science Foundation opportunities open to 501(c)(3) nonprofits, last 2 weeks. Both filters confirmed server-side this build (see "Current status" above).
Use it from Clay, n8n, Make, or an AI agent
This actor runs synchronously over plain HTTP — call it directly from a script, a workflow tool, or an AI agent, no Apify Console needed once you have an API token.
curl "https://api.apify.com/v2/acts/accountable_eel~grants-gov-alerts/run-sync-get-dataset-items?token=<YOUR_TOKEN>" \-X POST \-H "Content-Type: application/json" \-d '{"keywords":["climate"]}'
n8n. Add an HTTP Request node: Method POST, URL https://api.apify.com/v2/acts/accountable_eel~grants-gov-alerts/run-sync-get-dataset-items?token=<YOUR_TOKEN>, Body Content Type JSON, JSON Body {"keywords":["climate"]} (swap in an expression from an earlier node for a real value).
Clay. Add an "HTTP API" column: Method POST, URL https://api.apify.com/v2/acts/accountable_eel~grants-gov-alerts/run-sync-get-dataset-items?token=<YOUR_TOKEN>, Body {"keywords":["{{search}}"]}, mapping the row's search into the keywords array.
MCP. In Claude, Cursor, or any MCP client with the Apify MCP server, ask for "Grants.gov funding opportunity alerts by keyword" — the agent will find and run this actor.