🇺🇸 SAM.gov Contracts Monitor
Pricing
from $7.00 / 1,000 federal contract opportunity records
🇺🇸 SAM.gov Contracts Monitor
Pull live federal contract opportunities from the official SAM.gov API, enriched with award history from USAspending. For BD teams, capture managers, and AI agents tracking federal procurement. Export, run via API, schedule, or integrate with other tools.
Pricing
from $7.00 / 1,000 federal contract opportunity records
Rating
0.0
(0)
Developer
Skootle
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
0
Monthly active users
18 days ago
Last modified
Categories
Share

TL;DR
Federal capture managers and BD teams refresh SAM.gov 5x a day for new opportunities, then open USAspending in a second tab to research the awarding agency's prior contract history. This delivers one clean record per active U.S. federal contract opportunity with deadlines (ISO 8601), contacts, attachments, agency hierarchy split (department / agency / office), set-aside type (8(a), HUBZone, SDVOSB, WOSB, EDWOSB), NAICS, place-of-performance, AND a joined recentAwards block showing who has won similar work in the last 24 months. Watchlist mode emits only NEW or CHANGED opportunities since the previous run, so a daily schedule becomes a clean diff feed for proposal pipelines and AI proposal-drafting agents.
Try it on a small dataset, then let us know what you think in a review.
What does SAM.gov + USAspending Federal Contracts Intelligence do?
This actor pulls active federal contract opportunities from SAM.gov and joins each one with recent award history from USAspending.gov in a single record. Filter by NAICS, agency, set-aside type, or free-text keywords; get back the notice, solicitation number, deadlines, full agency hierarchy, place-of-performance, attachment URLs, contact emails, and a recentAwards block showing who has won similar contracts in the last 24 months.
Every run writes a briefing ranked by completeness and deadline urgency, so capture managers see the most actionable opportunities first.
Why scrape SAM.gov?
SAM.gov lists every active U.S. federal contract opportunity above the micropurchase threshold, but the UI is built for procurement officers, not BD teams. Capture managers refresh it five times a day looking for matches to their NAICS codes, then open USAspending in a separate tab to research the awarding agency's prior contract history before deciding whether to chase an opportunity. That's two manual workflows running in parallel for every lead.
This actor joins both feeds into one record. A capture team sees the new opportunity AND the last 24 months of awards to that agency in the same row, so the bid/no-bid call happens in seconds instead of an afternoon of tab-switching. Watchlist mode keeps the pipeline clean: only NEW or CHANGED opportunities flow through after the first run, so proposal teams aren't paying to re-ingest yesterday's solicitations.
Who needs this?
- Federal BD and capture managers filtering opportunities by NAICS, set-aside, and agency
- Government contractors monitoring small-business set-asides (8(a), HUBZone, SDVOSB, WOSB, EDWOSB)
- Prime contractors finding teaming partners on new opportunities
- GovCon market analysts measuring opportunity volume by agency, NAICS, set-aside category
- AI proposal-drafting tools consuming the SOW + evaluation criteria as structured input
- Compliance teams tracking which agencies post what, when
- Investors and lobbyists measuring federal spend pipeline by parent agency
How to use SAM.gov + USAspending Federal Contracts
- Get a free SAM.gov API key at https://open.gsa.gov/api/get-opportunities-public-api/ (~3 min)
- Open the Input tab on the actor page, paste your key into
samGovApiKey - Set filters:
naicsCodes,agencies,setAsides, or free-textkeywords - Set
maxItems(default 50) - Optionally enable
joinUsaspending(defaulttrue) for the recent-awards enrichment - Optionally enable
detectChangesfor change-detection mode - Click Start
How much will scraping SAM.gov cost?
This actor is priced per event:
- Actor Start: $0.01 once per run
- Federal opportunity record: tiered, charged per record written
| Apify plan | $/1000 records |
|---|---|
| FREE | $35.00 |
| BRONZE | $29.75 |
| SILVER | $24.50 |
| GOLD | $21.00 |
| PLATINUM | $21.00 |
| DIAMOND | $18.90 |
A daily NAICS-filtered watchlist returns ~50-200 records day 1, then 10-50 per day. Roughly $1-$4 per day on GOLD.
Is it legal to scrape SAM.gov?
Yes, federal contracting opportunities are public-record data published by the U.S. government. Both SAM.gov and USAspending are official .gov APIs explicitly designed for programmatic access. SAM.gov requires a free API key (rate-limit signal, not a content gate). USAspending has no auth requirement.
Examples
Example 1: Daily watchlist on IT services NAICS
{"samGovApiKey": "YOUR_KEY","naicsCodes": ["541512", "541511", "541519"],"watchlistMode": true,"maxItems": 100}
Example 2: 8(a) set-aside opportunities only
{"samGovApiKey": "YOUR_KEY","setAsides": ["8A"],"watchlistMode": true,"maxItems": 100}
Example 3: DOD opportunities
{"samGovApiKey": "YOUR_KEY","agencies": ["DEPT OF DEFENSE"],"maxItems": 200}
Example 4: Free-text AI keyword search
{"samGovApiKey": "YOUR_KEY","keywords": ["artificial intelligence", "machine learning"],"maxItems": 100}
Example 5: Change-detection mode
{"samGovApiKey": "YOUR_KEY","naicsCodes": ["541512"],"detectChanges": true,"maxItems": 200}
Filter for changeStatus: 'updated' to see what shifted overnight.
Example 6: HUBZone + SDVOSB combined
{"samGovApiKey": "YOUR_KEY","setAsides": ["HZC", "SDVOSBC", "WOSB", "EDWOSB"],"maxItems": 200}
Example 7: Posted-this-week opportunities
{"samGovApiKey": "YOUR_KEY","postedFrom": "2026-05-02","postedTo": "2026-05-09","maxItems": 500}
Example 8: Capture-team intelligence
{"samGovApiKey": "YOUR_KEY","naicsCodes": ["541512"],"joinUsaspending": true,"usaspendingLookbackMonths": 24,"maxItems": 50}
The recentAwards block per opportunity gives you "who has won similar work" without a second pipeline.
Input parameters
| Field | Type | Default | Description |
|---|---|---|---|
samGovApiKey | string | required | Free key from https://open.gsa.gov/api/get-opportunities-public-api/ |
naicsCodes | string[] | [] | NAICS code filter |
agencies | string[] | [] | Agency name filter |
setAsides | enum[] | [] | 8A, HZC, SDVOSBC, WOSB, EDWOSB, IEE |
keywords | string[] | [] | Free-text search |
postedFrom, postedTo | YYYY-MM-DD | null | Posted-date window |
joinUsaspending | bool | true | Add recentAwards enrichment |
usaspendingLookbackMonths | int | 24 | How far back lookups go |
detectChanges | bool | false | Add changeStatus + changedFields[] |
watchlistMode | bool | false | Idempotent diff |
maxItems | int | 50 | Hard cap |
Federal Contracts output format
federal_opportunity
| Field | Type | Description |
|---|---|---|
outputSchemaVersion, recordType, recordId | string | Discriminated identity (samgov:opp:<noticeId>) |
noticeId, solicitationNumber, url | string | SAM.gov IDs + URL |
title, description | string | Title + full SOW |
noticeType | enum | Solicitation, Combined Synopsis/Solicitation, Sources Sought, Special Notice |
postedAt, responseDeadline, archiveDate | ISO 8601 | Standard timestamps |
agencyDepartment, agencyName, agencyOffice | string | Full hierarchy split |
setAsideType | enum | 8A, HZC, SDVOSBC, etc. |
naicsCode, naicsDescription | string | Primary NAICS |
placeOfPerformance | object | { city, state, zip, country } |
pointsOfContact | array | [{ name, email, phone, role }] |
attachments | array | [{ name, url, contentType }] |
recentAwards | array | (when joinUsaspending: true) [{ recipient, agency, amountUsd, awardDate, naics }] |
awardHistorySummary | object | { totalAwards, totalUsd, avgAwardUsd, topRecipient } |
fieldCompletenessScore, agentMarkdown | int / string | Quality + LLM-ready summary |
changeStatus, changedFields | enum / string[] | (when detectChanges: true) |
Federal Contracts scraper output example
{"outputSchemaVersion": "2026-05-08","recordType": "federal_opportunity","recordId": "samgov:opp:abc123","noticeId": "abc123","solicitationNumber": "FA8773-26-R-0042","title": "Cloud Engineering Support Services","noticeType": "Combined Synopsis/Solicitation","postedAt": "2026-05-08T13:00:00.000Z","responseDeadline": "2026-06-15T17:00:00.000Z","agencyDepartment": "DEPT OF DEFENSE","agencyName": "DEPT OF THE AIR FORCE","agencyOffice": "AIR FORCE LIFE CYCLE MANAGEMENT CENTER","setAsideType": "SDVOSBC","naicsCode": "541512","recentAwards": [{ "recipient": "Acme Corp", "agency": "DEPT OF THE AIR FORCE", "amountUsd": 4250000, "awardDate": "2025-09-15", "naics": "541512" }],"awardHistorySummary": {"totalAwards": 23,"totalUsd": 84500000,"avgAwardUsd": 3673913,"topRecipient": "Acme Corp"},"fieldCompletenessScore": 95,"agentMarkdown": "**🇺🇸 Cloud Engineering Support Services**\n- 📋 SDVOSBC · NAICS 541512\n- 🏢 DEPT OF THE AIR FORCE / AFLCMC\n- 📅 posted 2026-05-08 · 📆 due 2026-06-15\n- 💰 23 prior awards, $84.5M total, avg $3.7M\n- 🔗 https://sam.gov/opp/abc123"}
During the Actor run
Requires only the free SAM.gov API key (3-minute signup); USAspending needs no auth. The actor honors a 1-second-between-requests cadence on both APIs and a typical NAICS-filtered watchlist run finishes in under a minute.
A run summary lands at the OUTPUT key, a top-opportunities digest ranked by completeness × deadline urgency at AGENT_BRIEFING, and (with watchlistMode: true) seen notice IDs at WATCHLIST_STATE.
FAQ
How does this actor work?
Input: a free SAM.gov API key plus your filters (NAICS, agency, set-aside, keywords, date window). Output: one structured record per active federal opportunity, with the last 24 months of similar awards joined inline so the bid/no-bid call happens in one record. Runs against official .gov sources. Typical NAICS-filtered watchlist finishes in under a minute.
Do I need a SAM.gov API key?
Yes, get it free at https://open.gsa.gov/api/get-opportunities-public-api/ (~3 minutes; email + organization required). USAspending requires no key.
Can I monitor for new opportunities only?
Yes. Set watchlistMode: true. The actor stores seen notice IDs and emits only new opportunities.
Can I see what changed on an opportunity?
Yes. Set detectChanges: true. The actor diffs each record against the previous run and emits changeStatus (new | updated | unchanged) plus changedFields[].
Can I filter by set-aside type?
Yes. setAsides: ["8A", "HZC", "SDVOSBC", "WOSB", "EDWOSB"].
Can I get the full SOW?
Yes, description carries the full SOW from SAM.gov. Attachments are listed in attachments[] with direct URLs.
Can I use this with the Apify API?
Yes. POST to https://api.apify.com/v2/acts/skootle~sam-gov-federal-contracts/runs.
Can I integrate with Make / Zapier / n8n / Slack?
Yes. Click Integrations on the actor page.
Why does this actor cost more than free SAM.gov scrapers?
This actor ships the USAspending join (so you don't run two pipelines), the agency-hierarchy split, set-aside enum, change-detection mode, watchlist diff mode, agent-ready markdown summaries, and continuous maintenance.
Your feedback
Hit a bug or want a feature? Open an issue on the Issues tab rather than the reviews page, and we'll fix it fast (typically within 48 hours).
Why choose SAM.gov + USAspending Federal Contracts
- One pipeline replaces two, SAM.gov opportunity plus USAspending recent-awards history joined per opp, so capture teams stop running parallel pipelines and reconciling notice IDs
- Watchlist mode emits only what's new since last run, plus change-detection mode flags
updatedrows with the exact fields that shifted, so amendment alerts surface automatically - Deadline-urgency ranking built in, per-run briefing ranks opportunities by completeness times deadline urgency so capture teams see the most actionable rows first
- Filter-ready out of the box, agency hierarchy split into department / agency / office, typed set-aside enum (8A, HZC, SDVOSBC, WOSB, EDWOSB), NAICS primary plus description. No client-side string parsing
- No API-key gymnastics, one free SAM.gov key, no OAuth, USAspending needs nothing at all
- AI proposal-drafting agents can drop the record in directly, full SOW, attachments with direct URLs, ready-to-paste markdown summary per record
- Hand-tuned for this source. Fixes ship the same week the source changes, typically within 24-48 hours
- Safe to dedupe across re-runs, stable
samgov:opp:<noticeId>IDs upsert cleanly - Schema doesn't break your pipeline, versioned and date-stamped on every record
Other Skootle actors you might want to check
- Wellfound Jobs Scraper, startup hiring intelligence
- Crexi Commercial Real Estate, CRE listings with 50+ fields
- SEC EDGAR Filings Monitor, public-company filings stream
- Reddit Subreddit Scraper, sentiment + brand monitoring
- Hacker News Watchlist, tech discourse stream
Support and contact
File issues on this actor's page, replies within 48 hours.