🇺🇸 SAM.gov Contracts Monitor avatar

🇺🇸 SAM.gov Contracts Monitor

Pricing

from $7.00 / 1,000 federal contract opportunity records

Go to Apify Store
🇺🇸 SAM.gov Contracts Monitor

🇺🇸 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

Skootle

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

18 days ago

Last modified

Share

SAM.gov Federal Contracts hero

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

  1. Get a free SAM.gov API key at https://open.gsa.gov/api/get-opportunities-public-api/ (~3 min)
  2. Open the Input tab on the actor page, paste your key into samGovApiKey
  3. Set filters: naicsCodes, agencies, setAsides, or free-text keywords
  4. Set maxItems (default 50)
  5. Optionally enable joinUsaspending (default true) for the recent-awards enrichment
  6. Optionally enable detectChanges for change-detection mode
  7. 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.

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
}
{
"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

FieldTypeDefaultDescription
samGovApiKeystringrequiredFree key from https://open.gsa.gov/api/get-opportunities-public-api/
naicsCodesstring[][]NAICS code filter
agenciesstring[][]Agency name filter
setAsidesenum[][]8A, HZC, SDVOSBC, WOSB, EDWOSB, IEE
keywordsstring[][]Free-text search
postedFrom, postedToYYYY-MM-DDnullPosted-date window
joinUsaspendingbooltrueAdd recentAwards enrichment
usaspendingLookbackMonthsint24How far back lookups go
detectChangesboolfalseAdd changeStatus + changedFields[]
watchlistModeboolfalseIdempotent diff
maxItemsint50Hard cap

Federal Contracts output format

federal_opportunity

FieldTypeDescription
outputSchemaVersion, recordType, recordIdstringDiscriminated identity (samgov:opp:<noticeId>)
noticeId, solicitationNumber, urlstringSAM.gov IDs + URL
title, descriptionstringTitle + full SOW
noticeTypeenumSolicitation, Combined Synopsis/Solicitation, Sources Sought, Special Notice
postedAt, responseDeadline, archiveDateISO 8601Standard timestamps
agencyDepartment, agencyName, agencyOfficestringFull hierarchy split
setAsideTypeenum8A, HZC, SDVOSBC, etc.
naicsCode, naicsDescriptionstringPrimary NAICS
placeOfPerformanceobject{ city, state, zip, country }
pointsOfContactarray[{ name, email, phone, role }]
attachmentsarray[{ name, url, contentType }]
recentAwardsarray(when joinUsaspending: true) [{ recipient, agency, amountUsd, awardDate, naics }]
awardHistorySummaryobject{ totalAwards, totalUsd, avgAwardUsd, topRecipient }
fieldCompletenessScore, agentMarkdownint / stringQuality + LLM-ready summary
changeStatus, changedFieldsenum / 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 updated rows 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

Support and contact

File issues on this actor's page, replies within 48 hours.