Federal Opportunity Feed
Pricing
from $1.40 / 1,000 opportunity records
Federal Opportunity Feed
Federal contract and grant opportunities from SAM.gov and Grants.gov in one feed — duplicates removed, agency names cleaned up, who won similar work before, and what changed since you last checked. No SAM.gov key.
Pricing
from $1.40 / 1,000 opportunity records
Rating
0.0
(0)
Developer
Public Records
Maintained by CommunityActor stats
0
Bookmarked
3
Total users
2
Monthly active users
9 hours ago
Last modified
Categories
Share
What does GovCon Opportunity Feed do?
GovCon Opportunity Feed returns every US federal contract and grant opportunity matching your NAICS codes, agencies, keywords, set-asides, and states — across SAM.gov and Grants.gov — as one deduplicated, agency-normalized schema. In enrich mode it adds who won similar work (USASpending, last 36 months, matched by UEI). In monitor mode it returns only what changed since your last run: new, updated, deadline moved, awarded, cancelled.
Built for capture managers, GovCon BD teams, proposal shops, GovCon SaaS builders, and AI agents that triage opportunities.
This product uses the Grants.gov API but is not endorsed or certified by the U.S. Department of Health and Human Services. Not affiliated with GSA, SAM.gov, Grants.gov, or the U.S. Department of the Treasury.
Why this Actor?
- 🔗 Two sources, one schema — SAM.gov contracts and Grants.gov grants in the same fields, with a canonical agency table across SAM, Grants.gov, and USASpending codes
- 🧬 Lineage-resolved — presolicitation → solicitation → award collapse to one
opportunityKey; no duplicates across stages - 🔔 Monitor mode — deltas only (
new,updated,deadline_moved,awarded,cancelled,removed), so a daily schedule costs cents - 🏆 Category leaders — top recipients by agency × NAICS from USASpending, matched by UEI, with award counts and obligations
- 🧾 Provenance on every row —
sourceUrl,retrievedAt,sourceVersion,recordHash - 📡 Official CSV + APIs only — daily SAM Data Services extract by default; no HTML scraping, no login-gated data, no personal data
- 💵 Error and status rows are never charged
Modes
| Mode | Returns | Charged per |
|---|---|---|
snapshot | all matching opportunities | opportunity |
monitor | only changes since your last run with the same filters | delta (+ opportunity for new) |
enrich | snapshot + category leaders (agency×NAICS peers) per opportunity | opportunity + category-leader |
No SAM.gov key required (default)
Contracts come from GSA’s public daily Data Services CSV (samBulk=true by default) — no API key, no daily request quota. Grants.gov and USASpending also need no key. Monitor deltas are CSV-diff against a saved KV snapshot (hashes / deadlines / notice types), not the Search API.
Optional free SAM public API key (samApiKey) + samEnrichLimit adds attachment URLs and fuller descriptions only. Sign in at sam.gov → Account Details → Request API Key. Stored encrypted; never logged.
Default mode = monitor (delta)
Default mode is monitor (change deltas since last run with the same filters). Quiet days are near-$0 for the buyer (actor-start only; delta PPE only when something changes). Full snapshot is opt-in and can approach ~$10 at default caps — do not use snapshot as the scheduled default.
Input
| Field | Default | Description |
|---|---|---|
mode | monitor | monitor (default) / snapshot / enrich |
sources | ["sam","grants"] | |
samApiKey | — | optional; attachments + full descriptions only |
samBulk | true | daily CSV path (recommended) |
samEnrichLimit | 5 | max optional SAM API enrich calls/run |
naics | [] | 6-digit or prefix |
agencies | [] | names or codes (DoD, DHS, EPA…) |
keywords | [] | |
setAside | [] | SB, 8A, HUBZone, SDVOSB, WOSB, NONE |
states | [] | place of performance |
noticeTypes | all | presolicitation, sources_sought, solicitation, combined_synopsis, award_notice, special_notice, grant_forecast, grant_posted |
postedWithinDays | 14 | Declared product window (14 days). |
deadlineAfter | today | excludes expired |
includeDescriptions | false | |
includeContacts | false | official contacts only |
enrichTopN | 5 | |
maxItems | 10000 | Default = 10,000 most recently posted of the 14d window. Raise to get the rest (schema max 50000; PPE for what you take). Cap after sort postedDate desc → Sol#. |
Example: daily monitor for DoD/DHS IT work
{ "mode": "monitor", "naics": ["5415"], "agencies": ["DoD", "DHS"], "setAside": ["SB", "SDVOSB"], "samBulk": true, "samEnrichLimit": 0 }
Sample output (opportunity)
{"recordType": "opportunity","opportunityKey": "sam:sol:W912DQ26R0012","sources": ["sam"],"kind": "contract","noticeType": "solicitation","title": "IT Support Services","agency": { "canonicalName": "Department of Defense", "canonicalCode": "097", "subAgency": "Department of the Army", "raw": "DEPT OF DEFENSE" },"naics": ["541512"],"setAside": "SB","placeOfPerformance": { "state": "TX", "country": "USA" },"postedAt": "2026-09-01T00:00:00.000Z","deadlineAt": "2026-10-01T00:00:00.000Z","url": "https://sam.gov/opp/…/view","retrievedAt": "2026-09-16T12:00:00.000Z","recordHash": "…"}
Pricing
| Event | Price |
|---|---|
| Actor start | ~$0.00005 |
| Opportunity record | $0.002 |
| Delta record (monitor) | $0.02 |
Category-leader record (enrich; PPE event id incumbent-record) | $0.01 |
| Status / error rows | free |
Snapshot of 200 opportunities ≈ $0.40 · daily monitor with ~15 changes ≈ $0.30/day · enrich 50 opportunities × 5 category leaders ≈ $2.60.
Snapshot completeness (option D)
Declared default window is postedWithinDays=14. Snapshot/monitor materialize the full filter-matched CSV set, then sort by postedAt desc → Sol# (normalized) and apply maxItems.
Default return: the 10,000 most recently posted opportunities in that 14-day window (Active + filters).
postedAt / window semantics (0.1.21+): clusters resolve on the full daily CSV (Active or Inactive matching filters). Per opportunity: postedAt = MIN PostedDate over all notices in the file-level cluster; lastActivityAt = MAX; samNoticeIds = union. Active applies only in the keep rule: keep opportunities with any Active=Yes notice and lastActivityAt within postedWithinDays (default 14). postedAt moves only when SAM removes that earliest notice from the file — not when it ages out of the 14d window or flips Inactive. Snapshot sort stays postedAt desc. Hashed fields come from the stage winner (highest STAGE_ORDER; same-stage → newer updatedAt/postedAt; equal → NoticeId ascending) — Active/window-independent. postedAt drift alone does not emit updated — recordHash excludes postedAt/lastActivityAt. Every run reports CAP_COVERAGE.covered/total.
Raising maxItems (schema max 50000) returns the rest of the matched window (you pay PPE for what you take). A cap always drops the oldest rows — deterministic covered set, not CSV physical order. When afterFilters > maxItems, full-set dedup/delta claims are not PASS.
Limitations
- SAM.gov results depend on your key's daily quota; exhaustion is reported, not hidden
- Grants.gov has no NAICS; grants are matched by agency/keyword only
- Category-leader matching is by UEI; pre-UEI awards are excluded
cancelledis emitted only when SAM Type confirms cancellation (e.g. Modification/Amendment/Cancel); otherwise absence isremovedwith reasonarchived|deadline_passed|unknown- No entity/registration data (D&B restrictions); no scraping of sam.gov pages
Candidate builds / GIT_SHA
Every Apify build is cut from a tagged commit. The image receives GIT_SHA as a Docker build-arg (also ENV GIT_SHA) and echoes it on RUN_SUMMARY. See docs/BUILD_NOTES.md for the candidate 0.1.26 SHA. Store tip / latest stays on 0.1.25 until Mark promotes after one clean scheduled night on the candidate tag.
Legal
SAM.gov opportunity data: open US government data, used via the official API under https://sam.gov/about/terms-of-use. Grants.gov: https://grants.gov/api/terms-conditions. USASpending: https://www.usaspending.gov/about (D&B limits apply; this feed is not a D&B substitute). See TERMS.md.