SAM.gov Opportunities Scraper avatar

SAM.gov Opportunities Scraper

Pricing

$5.00 / 1,000 opportunity (result)s

Go to Apify Store
SAM.gov Opportunities Scraper

SAM.gov Opportunities Scraper

Use this when you need US federal contract opportunities from SAM.gov: solicitations, sources sought and awards by keyword, NAICS, set-aside, agency, state and date, with deadline, award value and link. Public daily extract, no API key. Pay per result.

Pricing

$5.00 / 1,000 opportunity (result)s

Rating

0.0

(0)

Developer

Hexadata

Hexadata

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Share

SAM.gov Opportunities Scraper returns US federal contract opportunities from SAM.gov (the official System for Award Management) as clean JSON: solicitations, combined synopsis/solicitations, presolicitations, sources sought, special notices and award notices filtered by keyword, NAICS code, set-aside, agency, place-of-performance state and posted date, with response deadline, award amount, awardee and the notice link. It reads the GSA's public daily data extract (no API key, no daily quota), runs incrementally for scheduled alerts, and you pay per result.

What you get

One item per notice, same field names as every Hexadata Actor:

FieldTypeDescription
idstringSAM.gov notice id (32 hex characters), unique
titlestring
solicitationNumberstring | null
agency / subAgency / officestring | nullDepartment, sub-tier and contracting office
noticeType / baseTypestringSolicitation, Combined Synopsis/Solicitation, Presolicitation, Sources Sought, Award Notice, Special Notice, Justification…
countrystringUS
publishedAtstringPosted date-time, ISO 8601 (US Eastern, as published)
deadlinestring | nullResponse deadline, ISO 8601 with offset
archiveDate / archiveTypestring | nullWhen and how SAM.gov will archive the notice
activeboolean
setAsideCode / setAsidestring | nullSBA, SDVOSBC, WOSB, 8A, HZC… and its description
naicsCode / classificationCodestring | nullNAICS and product/service code (PSC)
placeOfPerformanceCity / State / Zip / Countrystring | null
officeCity / officeState / officeZipstring | nullContracting office location
awardNumber / awardDate / awardedValue / currency / awardeemixedAward notices: contract number, date, amount in USD, awardee name and address
descriptionstring | nullNotice description, up to 4,000 characters
url / additionalInfoUrlstringNotice page on sam.gov and additional-info link
source, scrapedAtstringAttribution and extraction timestamp

With includeContacts: true you also get the primary and secondary point of contact (name, title, e-mail, phone). With includeRaw: true the original 47-column extract row is attached as raw.

Use cases

  • Government contractors and capture managers get every new solicitation and sources-sought in their NAICS codes and states each morning, with deadlines, instead of saved searches that expire or e-mails that pile up.
  • Small businesses with a set-aside status (8(a), HUBZone, SDVOSB, WOSB) filter opportunities reserved for them (setAsides: ["SDVOSBC"]) and respond before the competition notices them.
  • GovCon consultants and bid-matching services run the Actor on a schedule with onlyNewSinceLastRun and push results to a CRM, Slack or Google Sheets through an Apify integration, one feed per client profile.
  • Sales teams selling to federal agencies use award notices (noticeTypes: "award") to see who won what, for how much, at which agency, and build a list of primes to partner with.
  • AI agents and RAG pipelines call the Actor as an MCP tool ("find Air Force solicitations for drone detection posted this week") and reason over structured results.

Input

FieldTypeDefaultDescription
searchQueriesstring[][] (prefill ["cybersecurity"])Case-insensitive phrases matched in title, solicitation number and description; OR-ed.
noticeTypesselectallsolicitation, presolicitation, sources-sought, award, special-notice, justification, intent-to-bundle.
naicsCodesstring[][]NAICS codes, prefix match (541512, 5415, 23).
setAsidesstring[][]Set-aside codes: SBA, SBP, 8A, 8AN, HZC, HZS, SDVOSBC, SDVOSBS, WOSB, WOSBSS, EDWOSB, EDWOSBSS, VSA, VSS, LAS, IEE, ISBEE, BICIV, NONE.
agenciesstring[][]Substrings of the department, sub-tier or office name ("VETERANS AFFAIRS", "NASA").
statesstring[][]Two-letter place-of-performance states (office state when none).
dateFrom / dateTodate–Posted-date bounds (YYYY-MM-DD). With no other filter, the last 7 days are used.
onlyActivebooleantrueSkip archived / inactive notices.
onlyNewSinceLastRunbooleanfalseFor schedules: only notices posted since the previous run that were not delivered before (state in the named store hexadata-sam-gov-opportunities).
maxResultsinteger100Hard cap on results and cost. Newest first.
includeContactsbooleanfalseAdd contracting-officer contact fields.
includeRawbooleanfalseAttach the original extract row.
proxyConfigurationobjectoffNot needed.

Invalid input (unknown set-aside code, NAICS with letters, malformed date) stops the run before the download starts, so it costs nothing.

Output example

Two real items from the runs saved in tests/ (2026-10-27). A solicitation (searchQueries: ["cybersecurity"], noticeTypes: "solicitation"):

{
"id": "1414fc3a5070490c8c53d15644386249",
"title": "Commercial Solutions Opening (CSO) for Space Domain Awareness (SDA) Solutions.",
"solicitationNumber": "FA2518-25-S-C001",
"agency": "DEPT OF DEFENSE",
"subAgency": "DEPT OF THE AIR FORCE",
"office": "FA2518 USSF SPOC/SAIO",
"noticeType": "Combined Synopsis/Solicitation",
"baseType": "Combined Synopsis/Solicitation",
"country": "US",
"publishedAt": "2026-10-26T09:41:29",
"deadline": "2030-01-23T12:00:00-07:00",
"archiveDate": "2030-02-07",
"archiveType": "auto15",
"active": true,
"setAsideCode": "NONE",
"setAside": "No Set aside used",
"naicsCode": "541715",
"classificationCode": "AR12",
"placeOfPerformanceCity": "Colorado Springs",
"placeOfPerformanceState": "CO",
"placeOfPerformanceZip": "80912",
"placeOfPerformanceCountry": "USA",
"officeCity": "PETERSON AFB",
"officeState": "CO",
"officeZip": "80914-4184",
"awardNumber": null,
"awardDate": null,
"awardedValue": null,
"currency": null,
"awardee": null,
"description": "18 Mar 2026 Updated: Space Domain Awareness (SDA) Commercial Solutions Opening (CSO) Phase I. The initial evaluation for phase I has been completed. We received a significant number of responses, and our team has given e…",
"url": "https://sam.gov/workspace/contract/opp/1414fc3a5070490c8c53d15644386249/view",
"additionalInfoUrl": null,
"source": "SAM.gov Contract Opportunities public data extract (U.S. General Services Administration)",
"scrapedAt": "2026-10-27T05:47:09.992Z"
}

An award notice (agencies: ["VETERANS AFFAIRS"], noticeTypes: "award"):

{
"id": "4d263fb52add4a3da471a9a633aeb353",
"title": "F18 PET RADIOPHARMACEUTICALS",
"solicitationNumber": "36C24726P0659",
"agency": "VETERANS AFFAIRS, DEPARTMENT OF",
"office": "247-NETWORK CONTRACT OFFICE 7 (36C247)",
"noticeType": "Award Notice",
"country": "US",
"publishedAt": "2026-10-26T10:33:01",
"active": true,
"setAsideCode": "SBA",
"setAside": "Small Business Set Aside - Total",
"naicsCode": "325412",
"classificationCode": "Q527",
"placeOfPerformanceCity": "Decatur",
"placeOfPerformanceState": "GA",
"awardNumber": "36C24726P0659",
"awardDate": "2026-06-18",
"awardedValue": 1308146.16,
"currency": "USD",
"awardee": "Trillamed LLC Southfield MI 48076 USA",
"description": "The vendor shall provide all labor, supervision, and transportation necessary to provide daily delivery of F-18 FDG (fluorodeoxyglucose), NaF-F18 (sodium fluoride), to the NM Service, located in the Atlanta Veterans Affa…",
"url": "https://sam.gov/workspace/contract/opp/4d263fb52add4a3da471a9a633aeb353/view",
"source": "SAM.gov Contract Opportunities public data extract (U.S. General Services Administration)",
"scrapedAt": "2026-10-27T05:49:02.168Z"
}

Pricing & cost examples

$5.00 per 1,000 opportunities (pay per event, charged only for items saved to the dataset; duplicates, invalid rows and failed runs are never billed). maxResults is a hard cost cap and Apify platform usage is included.

  • A first look: maxResults: 50 ≈ $0.25.
  • A daily alert for one NAICS family in 3 states with onlyNewSinceLastRun (typically 10–40 new notices per business day) ≈ $0.05–0.20 per day, about $3 per month.
  • A market study: every award notice of one department for a quarter (≈ 5,000 notices) ≈ $25.

Use with AI agents (MCP)

Every Apify Actor is available as a tool through the Apify MCP server. Add this server to Claude, Cursor, VS Code or any MCP client (OAuth sign-in on first use, or an Authorization: Bearer <APIFY_TOKEN> header):

{
"mcpServers": {
"apify": {
"url": "https://mcp.apify.com?tools=hexadatalabs/sam-gov-opportunities-scraper"
}
}
}

Then ask, for example:

"Which small-business set-aside solicitations for IT services in Virginia or Maryland were posted this week, and when do they close?"

The agent calls the Actor with {"naicsCodes":["5415"],"setAsides":["SBA"],"states":["VA","MD"],"noticeTypes":"solicitation","dateFrom":"2026-10-20"} and reads deadline, setAside and url from the results. The Actor description and every input field start with "Use this when…" so tool selection works without extra prompting.

API & integrations

curl -X POST "https://api.apify.com/v2/acts/hexadatalabs~sam-gov-opportunities-scraper/run-sync-get-dataset-items?token=<APIFY_TOKEN>" \
-H "Content-Type: application/json" \
-d '{"searchQueries":["cybersecurity"],"noticeTypes":"solicitation","maxResults":50}'
from apify_client import ApifyClient
client = ApifyClient("<APIFY_TOKEN>")
run = client.actor("hexadatalabs/sam-gov-opportunities-scraper").call(run_input={
"agencies": ["VETERANS AFFAIRS"], "noticeTypes": "award", "dateFrom": "2026-10-01", "maxResults": 200,
})
for opp in client.dataset(run["defaultDatasetId"]).iterate_items():
print(opp["awardDate"], opp["awardee"], opp["awardedValue"], opp["url"])
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: '<APIFY_TOKEN>' });
const run = await client.actor('hexadatalabs/sam-gov-opportunities-scraper').call({
naicsCodes: ['5415'], states: ['VA', 'MD', 'DC'], onlyNewSinceLastRun: true, maxResults: 500,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items.map((o) => `${o.deadline ?? 'no deadline'} · ${o.title}`).join('\n'));

Schedules and webhooks: create a Schedule in Apify Console (e.g. every weekday at 09:00 UTC; the extract is refreshed overnight US time) with onlyNewSinceLastRun: true, then add a webhook or integration (e-mail, Slack, Google Sheets, Make, Zapier, HTTP) on the ACTOR.RUN.SUCCEEDED event. Each run delivers only the notices posted since the previous one.

  • Source: the GSA's public Contract Opportunities daily data extract from sam.gov/data-services (ContractOpportunitiesFullCSV.csv, about 200 MB, refreshed daily). The Actor streams the file and stops as soon as maxResults or the date cut-off is reached, so most runs read a few megabytes; a keyword-only search over the whole file takes about a minute. No API key, no daily quota, no HTML scraping.
  • Freshness: the extract is produced once a day, so notices posted today appear in tomorrow's run. Posted times are US Eastern without offset.
  • Licence: SAM.gov data is published by the US government for public reuse (US federal government works are not subject to copyright); keep the attribution in source. Hexadata is not affiliated with GSA.
  • Personal data: contracting-officer names, e-mails and phones are excluded unless includeContacts: true; use them only to ask the agency about the notice.
  • Keyword matching is a plain case-insensitive substring in title, solicitation number and description (no stemming); add variants ("cyber security", "cybersecurity").
  • Coverage: the notices present in the current extract (active notices plus recently archived ones). Attachments are not downloaded; open url for documents.
  • If SAM.gov changes the extract columns, the run fails with SITE_LAYOUT_CHANGED and nothing is charged.

Changelog

  • 0.1.0 (2026-10-27): first release. Keyword, notice-type, NAICS, set-aside, agency, state and date filters; incremental mode; award fields; dataset table view; MCP-ready descriptions.

Support

Open an issue in the Issues tab of this Actor (or e-mail Hexadata through the Apify profile). Issues are answered within 24 hours and confirmed bugs are fixed in a beta build within 48 hours.

En español

SAM.gov Opportunities Scraper extrae oportunidades de contratación del gobierno federal de EE.UU. desde SAM.gov (licitaciones, sondeos de mercado, avisos previos y adjudicaciones) a partir del extracto público diario de la GSA, sin clave de API. Filtra por palabra clave, código NAICS, reserva para pequeñas empresas (set-aside), agencia, estado y fecha, y devuelve plazo, monto adjudicado, adjudicatario y enlace en JSON limpio, con modo incremental para alertas diarias. Precio: $5.00 por cada 1,000 resultados; maxResults limita el costo. Sin datos personales por defecto.