US Government Grants & Contract Opportunities Feed avatar

US Government Grants & Contract Opportunities Feed

Pricing

from $1.00 / 1,000 opportunity scrapeds

Go to Apify Store
US Government Grants & Contract Opportunities Feed

US Government Grants & Contract Opportunities Feed

Monitor federal grants and contract opportunities via the official Grants.gov and SAM.gov APIs, plus recent USAspending awards. Keyword search, normalized JSON, new/updated flags for scheduled runs and webhooks. Pay per opportunity record ($0.001).

Pricing

from $1.00 / 1,000 opportunity scrapeds

Rating

0.0

(0)

Developer

Owlabee

Owlabee

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Categories

Share

What it does

This Actor turns the official US federal opportunity APIs into one clean, keyword-filtered feed. It queries Grants.gov (federal grants, no key needed), SAM.gov (federal contract opportunities, free personal API key) and optionally USAspending.gov (who recently won similar grants and contracts), normalizes every record to the same field names, and flags what is new or updated since your last run so a daily schedule only emits changes.

It is built for grant writers, government-contracting business developers, SBIR/STTR applicants, nonprofits, universities, and anyone who wants an RFP alert feed without logging into three portals. Results land in an Apify dataset you can download as JSON, CSV or Excel, read over the API, push to a webhook, or query from an AI agent through the Apify MCP server.

Only official public APIs are used — no HTML scraping of sam.gov or grants.gov, no proxies, no login.

How to use

  1. Enter your Keywords (one per line), choose Sources (Grants.gov is on by default; add SAM.gov and paste your free SAM.gov API key), and set Posted within (days).
  2. Optionally turn on Fetch Grants.gov details (award ceiling/floor, funding, eligibilities, description), Include recent USAspending awards, and Only new or updated since last run for scheduled monitoring with a Webhook URL.
  3. Click Start. Records appear in the dataset as they are saved; schedule the Actor daily to get a change feed.

Input

FieldTypeRequiredDescription
keywordsstring[]yesSearch terms; each is searched in every enabled source
sourcesstring[]nograntsGov, samGov (default ["grantsGov"])
oppStatusesstring[]noGrants.gov statuses: forecasted, posted, closed, archived (default ["posted"])
postedWithinDaysintegernoOnly records posted in the last N days, 1–365 (default 30)
maxResultsintegernoCap on dataset items per run across all keywords and sources (default 500)
fetchDetailsbooleannoCall Grants.gov fetchOpportunity for each emitted grant (default false)
maxDetailsintegernoCap on detail fetches per run (default 100)
samApiKeystring (secret)for SAM.govFree personal SAM.gov public API key; SAM.gov is skipped when missing
samFiltersobjectno{ "naics", "setAside", "state", "ptype" } passed to SAM.gov as ncode, typeOfSetAside, state, ptype
includeRecentAwardsbooleannoAdd recent USAspending grant/contract awards for the keywords (default false)
maxAwardsintegernoCap on USAspending awards per keyword (default 50)
onlyNewSinceLastRunbooleannoMonitor mode: emit only new/updated records, flagged isNew / isUpdated (default false)
stateStoreNamestringnoNamed key-value store holding monitor snapshots (default gov-opportunity-feed-state)
webhookUrlstringnoPOST target for the run summary and emitted items

Output example

Grants.gov opportunity (with fetchDetails on):

{
"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",
"lastUpdated": "2026-10-12T13:30:00.000Z",
"assistanceListings": ["59.037"],
"awardCeiling": null,
"awardFloor": 0,
"expectedAwards": 62,
"estimatedTotalFunding": 125000000,
"costSharing": true,
"fundingCategories": ["Business and Commerce"],
"fundingInstruments": ["Cooperative Agreement"],
"eligibilities": ["Public and State controlled institutions of higher education"],
"agencyContactName": "Jane Doe",
"agencyContactEmail": "grants@sba.gov",
"description": "The SBDC program provides counseling & training to small businesses. …",
"url": "https://www.grants.gov/search-results-detail/351083",
"detailsFetched": true,
"isNew": true,
"isUpdated": false,
"fetchedAt": "2026-10-16T12:00:00.000Z"
}

SAM.gov notices carry noticeId, solicitationNumber, department / subTier / office, type, responseDeadLine, naicsCode, setAside, placeOfPerformance, pointOfContact[] (names, emails and phones exactly as published by the agency), uiLink as url, and descriptionUrl. USAspending awards carry awardId, recipientName, recipientUei, awardAmount, awardType, startDate / endDate and a usaspending.gov url. Every record shares source, recordType, keyword, opportunityId, title, agency, status, postedDate, closeDate, url and fetchedAt.

Error items look like { "source": "samGov", "keyword": "…", "error": "SAM_AUTH_FAILED", "errorMessage": "…" } and are charged at the opportunity rate, because the work to discover the problem was done.

Pricing

Pay per event. You only pay for what the Actor produces; set a maximum cost per run in the run options to cap spend.

EventPriceNotes
Opportunity scraped$0.001Per dataset item: Grants.gov opportunity, SAM.gov notice, USAspending award, or error item
Opportunity detail fetched$0.002Per successful Grants.gov fetchOpportunity call (only with fetchDetails)
Actor start$0.00005Apify platform event

Example: 1,000 opportunities ≈ $1.00. 1,000 opportunities with details ≈ $3.00. In monitor mode the first run is a baseline and is charged for every record it emits; later runs are charged only for new or updated records.

Limits and fair use

  • Requests are rate-limited per host (≤ 2 req/s) with exponential backoff on 429/5xx.
  • SAM.gov quotas: a personal, non-federal API key has a small daily request allowance. The Actor asks for up to 1,000 notices per request so one keyword normally costs one request; keep the keyword list short on SAM.gov schedules.
  • postedWithinDays applies to the Grants.gov open date, the SAM.gov postedFrom/postedTo window (max 1 year) and the USAspending award start date.
  • maxResults caps records fetched per run; in monitor mode unchanged records are not emitted, so the number of dataset items can be lower.
  • Grants.gov OR-matches the words of a keyword ("small business" matches "small" or "business"); SAM.gov matches the notice title.
  • Memory: runs comfortably at 256 MB.

How to get a free SAM.gov API key

  1. Create or sign in to an account at sam.gov (any individual can register; no entity registration is needed).
  2. Open your profile → Account Details.
  3. Under Public API Key, click Request (or Regenerate), enter your password, and copy the key shown.
  4. Paste it into the SAM.gov API key field of this Actor. It is stored encrypted as a secret input and never written to logs.

Keys are personal and tied to the daily quota of your account type; federal-agency and entity-associated accounts get larger allowances.

Other pay-per-event Actors from the same account, all limited-permission and agent-friendly:

FAQ

Does this need proxies or a login? No. All three sources are official public JSON APIs that work from Apify's standard datacenter infrastructure. Only SAM.gov requires a (free) API key.

How is cost controlled? Set maxResults, maxDetails and maxAwards, plus the run's maximum total charge. The Actor charges each record the moment it is saved and stops cleanly when any limit is reached.

How does "only new or updated" work? For every source + keyword the Actor stores a compact fingerprint per opportunity in the named key-value store. On the next run, unseen ids are emitted with isNew: true; ids whose title, status, dates, set-aside or award fields changed are emitted with isUpdated: true; unchanged ones are skipped and not charged. Delete the store (or change stateStoreName) to reset.

Can I run it on a schedule or call it from an AI agent? Yes — use Apify Schedules with onlyNewSinceLastRun and a webhookUrl, the API, or the Apify MCP server. The Actor is pay-per-event and uses limited permissions, so agents can discover and call it.

What happens on errors? A failing source/keyword produces one error item (FETCH_FAILED, SAM_AUTH_FAILED, SAM_RATE_LIMITED, SAM_HTTP_<status>) instead of failing the run. A missing SAM.gov key skips that source with a log line.

Why is awardCeiling null for some grants? Grants.gov publishes "none" or leaves it empty when the agency did not set a ceiling; the Actor returns null rather than guessing.

This Actor uses only the official public APIs of Grants.gov, SAM.gov and USAspending.gov; it does not scrape their websites. Use the data in compliance with each source's terms (SAM.gov data is subject to GSA's API terms of service and your own API key agreement) and applicable law. Points of contact are government employees' business contact details as published by the issuing agency. The Actor is not a consumer reporting agency and its output must not be used for employment, credit, insurance, housing or tenant screening decisions (FCRA).