US Government Grants & Contract Opportunities Feed
Pricing
from $1.00 / 1,000 opportunity scrapeds
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
Maintained by CommunityActor 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
- 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).
- 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.
- Click Start. Records appear in the dataset as they are saved; schedule the Actor daily to get a change feed.
Input
| Field | Type | Required | Description |
|---|---|---|---|
keywords | string[] | yes | Search terms; each is searched in every enabled source |
sources | string[] | no | grantsGov, samGov (default ["grantsGov"]) |
oppStatuses | string[] | no | Grants.gov statuses: forecasted, posted, closed, archived (default ["posted"]) |
postedWithinDays | integer | no | Only records posted in the last N days, 1–365 (default 30) |
maxResults | integer | no | Cap on dataset items per run across all keywords and sources (default 500) |
fetchDetails | boolean | no | Call Grants.gov fetchOpportunity for each emitted grant (default false) |
maxDetails | integer | no | Cap on detail fetches per run (default 100) |
samApiKey | string (secret) | for SAM.gov | Free personal SAM.gov public API key; SAM.gov is skipped when missing |
samFilters | object | no | { "naics", "setAside", "state", "ptype" } passed to SAM.gov as ncode, typeOfSetAside, state, ptype |
includeRecentAwards | boolean | no | Add recent USAspending grant/contract awards for the keywords (default false) |
maxAwards | integer | no | Cap on USAspending awards per keyword (default 50) |
onlyNewSinceLastRun | boolean | no | Monitor mode: emit only new/updated records, flagged isNew / isUpdated (default false) |
stateStoreName | string | no | Named key-value store holding monitor snapshots (default gov-opportunity-feed-state) |
webhookUrl | string | no | POST 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.
| Event | Price | Notes |
|---|---|---|
| Opportunity scraped | $0.001 | Per dataset item: Grants.gov opportunity, SAM.gov notice, USAspending award, or error item |
| Opportunity detail fetched | $0.002 | Per successful Grants.gov fetchOpportunity call (only with fetchDetails) |
| Actor start | $0.00005 | Apify 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.
postedWithinDaysapplies to the Grants.gov open date, the SAM.govpostedFrom/postedTowindow (max 1 year) and the USAspending award start date.maxResultscaps 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
- Create or sign in to an account at sam.gov (any individual can register; no entity registration is needed).
- Open your profile → Account Details.
- Under Public API Key, click Request (or Regenerate), enter your password, and copy the key shown.
- 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.
Related Actors
Other pay-per-event Actors from the same account, all limited-permission and agent-friendly:
- US Building Permits Scraper — City & County Permit Records — city and county building permits for the same construction and infrastructure leads.
- US Professional License Lookup & Verification API — verify the professional licenses of bidders and awardees from official state records.
- Company Job Boards Scraper & Hiring Signals (ATS) — spot contractors staffing up after an award through their public job boards.
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.
Legal
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).