SAM.gov Opportunities Scraper
Pricing
$5.00 / 1,000 opportunity (result)s
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
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
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:
| Field | Type | Description |
|---|---|---|
id | string | SAM.gov notice id (32 hex characters), unique |
title | string | |
solicitationNumber | string | null | |
agency / subAgency / office | string | null | Department, sub-tier and contracting office |
noticeType / baseType | string | Solicitation, Combined Synopsis/Solicitation, Presolicitation, Sources Sought, Award Notice, Special Notice, Justification… |
country | string | US |
publishedAt | string | Posted date-time, ISO 8601 (US Eastern, as published) |
deadline | string | null | Response deadline, ISO 8601 with offset |
archiveDate / archiveType | string | null | When and how SAM.gov will archive the notice |
active | boolean | |
setAsideCode / setAside | string | null | SBA, SDVOSBC, WOSB, 8A, HZC… and its description |
naicsCode / classificationCode | string | null | NAICS and product/service code (PSC) |
placeOfPerformanceCity / State / Zip / Country | string | null | |
officeCity / officeState / officeZip | string | null | Contracting office location |
awardNumber / awardDate / awardedValue / currency / awardee | mixed | Award notices: contract number, date, amount in USD, awardee name and address |
description | string | null | Notice description, up to 4,000 characters |
url / additionalInfoUrl | string | Notice page on sam.gov and additional-info link |
source, scrapedAt | string | Attribution 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
onlyNewSinceLastRunand 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
| Field | Type | Default | Description |
|---|---|---|---|
searchQueries | string[] | [] (prefill ["cybersecurity"]) | Case-insensitive phrases matched in title, solicitation number and description; OR-ed. |
noticeTypes | select | all | solicitation, presolicitation, sources-sought, award, special-notice, justification, intent-to-bundle. |
naicsCodes | string[] | [] | NAICS codes, prefix match (541512, 5415, 23). |
setAsides | string[] | [] | Set-aside codes: SBA, SBP, 8A, 8AN, HZC, HZS, SDVOSBC, SDVOSBS, WOSB, WOSBSS, EDWOSB, EDWOSBSS, VSA, VSS, LAS, IEE, ISBEE, BICIV, NONE. |
agencies | string[] | [] | Substrings of the department, sub-tier or office name ("VETERANS AFFAIRS", "NASA"). |
states | string[] | [] | Two-letter place-of-performance states (office state when none). |
dateFrom / dateTo | date | – | Posted-date bounds (YYYY-MM-DD). With no other filter, the last 7 days are used. |
onlyActive | boolean | true | Skip archived / inactive notices. |
onlyNewSinceLastRun | boolean | false | For schedules: only notices posted since the previous run that were not delivered before (state in the named store hexadata-sam-gov-opportunities). |
maxResults | integer | 100 | Hard cap on results and cost. Newest first. |
includeContacts | boolean | false | Add contracting-officer contact fields. |
includeRaw | boolean | false | Attach the original extract row. |
proxyConfiguration | object | off | Not 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 ApifyClientclient = 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.
Limitations & legal
- 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 asmaxResultsor 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
urlfor documents. - If SAM.gov changes the extract columns, the run fails with
SITE_LAYOUT_CHANGEDand 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.