US Federal Grants Monitor

$19.90 / 1,000 · Recently published - building its public record.

Run it on Apify → Free to try - runs bill per result on your own account.

What you give it

Every field is optional unless marked; sensible defaults do the rest.

FieldTypeWhat it doesDefault
keywords array Free-text terms searched across the opportunity. Leave empty to watch everything matching the other filters. ["water quality"]
agencies array Grants.gov agency codes, e.g. USDA, DOD, DOC, ED, DOE. Every run logs the codes valid for your search with their counts - copy them from there rather than guessing. -
eligibilities array Applicant-type codes, e.g. 02 for city or township governments, 25 for others. The run log lists the codes available for your search. -
fundingCategories array Category codes such as ACA, ENV or HL. Listed in the run log for your search. -
fundingInstruments array CA (cooperative agreement), G (grant), PC (procurement contract) or O (other). -
oppStatuses array Which statuses to watch. Default is posted plus forecasted - the two a bidder can act on. ["posted", "forecasted"]
scrapeDetails boolean Adds the description, award ceiling and floor, cost-sharing flag and response date. Costs one extra request per alerted opportunity, so it is off by default. Contact names, emails and phone numbers are never extracted, with or without this setting. False
alertOn string "new" alerts only on opportunities never seen before. "new-and-updated" also alerts when a seen opportunity changes status or moves its deadline. new
emitBaseline boolean On the very first run, push everything currently matching. Turn off to start silent and receive only what appears afterwards. True
maxItems integer Upper bound on rows pushed in one run. Anything over the cap alerts on the next run instead. 500
stateStoreName string Named key-value store holding what this monitor has already seen. Use a different name to run several independent watch profiles. grants-gov-monitor-state
resetState boolean Discard what this profile has seen and start a fresh baseline. Use after changing filters if you want the new profile re-baselined. False

What you get back

One JSON object per result, with exactly these fields - no seller identities, no contact data, ever.

FieldTypeMeaning
opportunityId string Grants.gov opportunity id.
opportunityNumber string The agency's own announcement number.
title string Opportunity title.
agency string Funding agency. Organization-level data.
agencyCode string Agency code. Reusable as the agencies input.
status string posted, forecasted, closed or archived.
docType string synopsis or forecast.
postedDate string Date the opportunity was posted (ISO).
closeDate string Application deadline (ISO).
cfdaNumbers array Assistance Listing (CFDA) numbers.
url string The opportunity on grants.gov.
description string Full synopsis text, HTML stripped. Only with scrapeDetails.
awardCeilingUsd number Largest award the agency expects to make. Only with scrapeDetails.
awardFloorUsd number Smallest award. Only with scrapeDetails.
costSharingRequired boolean Whether cost sharing or matching is required. Only with scrapeDetails.
responseDate string Response deadline from the synopsis (ISO). Only with scrapeDetails.
archiveDate string Date the listing is archived (ISO). Only with scrapeDetails.
isBaseline boolean True for rows from the first (baseline) run.
isUpdate boolean True when an already-seen opportunity changed status or deadline.

Health

Recently published - building its public record. Live record, failures included: status page.

Full documentation, examples and the AI-assistant prompt live on the store page.