SAM.gov Scraper: Federal Contract Opportunities & Contacts
Pricing
from $2.00 / 1,000 opportunity saveds
SAM.gov Scraper: Federal Contract Opportunities & Contacts
Export SAM.gov federal contract opportunities, RFPs and award notices with the contracting officer's name, email and phone, deadline, NAICS, PSC, set-aside, place of performance, awardee and attachment links. Filter by NAICS, agency, state and dates; run daily with only-new results. No API key.
Pricing
from $2.00 / 1,000 opportunity saveds
Rating
0.0
(0)
Developer
Epic Scrapers
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
4 days ago
Last modified
Categories
Share
SAM.gov Scraper: federal contract opportunities, contracting officer contacts and awards
SAM.gov Scraper exports U.S. federal contract opportunities from SAM.gov as clean rows: solicitations, RFQs, sources sought, presolicitations, special notices and award notices. Each row has the response deadline, the buying agency and office, NAICS and PSC codes, the set-aside, the place of performance, the contracting officer's name, title, email and phone, award details (date, amount, awardee and UEI), the full description as text and a direct download link for every attachment.
Filter by keyword, NAICS, PSC, set-aside, notice type, agency or office, state and posted or deadline dates, then put it on a schedule: with Only new notices each run delivers only what was posted since the last one, so you get a daily bid feed for your CRM, Google Sheet, Slack or proposal pipeline and pay for each notice once.
- Contacts you can use. Agencies type phones, titles and labels into the name field ("Jeremy EtringerDSN312-850-9747", "Telephone: 2156972530", "Hall, Jenna"). The Actor splits them into clean name, title, email and phone fields, and every contact of a notice is kept, not just the first.
- All the filters SAM.gov has, as lists. Many NAICS codes (or prefixes like
5415), PSC codes, set-asides, notice types, states, agencies and keywords in one run. - Agencies by name.
Department of Veterans Affairs,Army,DLA,NAVSEA, an office code likeW91CRBor a sam.gov organization ID. Everything below it is included. - Deadline filters. Skip expired bids with
responseDeadlineFrom: "today", or only keep bids due in the next 30 days. Each row hasdaysUntilDeadline. - Amendments flagged. An amended notice (new deadline, Q&A, revised SOW) comes as its latest version with
isAmendment: trueand the original notice ID. - Award research. Award notices with date, amount, contract number, awardee name, UEI and CAGE code, for competitor and teaming research.
- No API key, no SAM.gov account, no proxy. The Actor reads the same JSON data the sam.gov website shows, not the rate-limited public API (which allows 10 requests a day without a registered role).
- More than 10,000 results. SAM.gov returns at most 10,000 records per search; longer date ranges are read day by day, so a full month or year comes back complete.
Who uses it?
| You are | What you do with it | Typical setup |
|---|---|---|
| Small business or BD / capture team | Get every new bid in your NAICS codes and set-asides each morning, with the contracting officer to email. | NAICS + set-asides + open notice types, daily schedule, Only new notices |
| GovCon consultant or proposal shop | Watch opportunities for several clients and send each a shortlist. | One saved task per client, each with its own filters and schedule |
| Lead-gen or market-intelligence agency | Sell contract-award leads (who just won what, for how much) or agency buying signals. | Award notices, active and archived, by NAICS or agency |
| Subcontractor or supplier | Find primes that just won work in your field and pitch teaming. | Award notices in your NAICS, daily schedule |
| Developer or AI agent | Feed SAM.gov data into a bid-matching app, dashboard, RAG index or alerting bot. | API calls with JSON input, webhooks on run finish |
Quick start
- Add your NAICS codes (or keywords).
- Pick notice types: Solicitation, Combined Synopsis/Solicitation, Presolicitation and Sources Sought are the open bids.
- Optional: set-asides, agencies, states, a response deadline range.
- Click Start. Results appear in the Opportunities, Contracting contacts and Awards tables; export them as CSV, Excel or JSON.
- To make it a daily feed: save the input as a task, turn on Only new notices, set Posted in the last N days to
2and add a daily schedule.
What data do you get?
One row per notice. Real example (posted October 16, 2026; description and attachments shortened):
{"noticeId": "3505c1f7e0584df499030ca75a30294e","url": "https://sam.gov/opp/3505c1f7e0584df499030ca75a30294e/view","title": "R602--Medical Courier Services","solicitationNumber": "36C24927B0001","noticeType": "Presolicitation","noticeTypeCode": "p","isActive": true,"isCanceled": false,"isAmendment": false,"originalNoticeId": null,"postedDate": "2026-10-16T15:00:07.313+00:00","modifiedDate": "2026-10-16T15:00:07.313+00:00","responseDeadline": "2026-11-30T11:00:00-06:00","responseTimeZone": "America/Chicago","daysUntilDeadline": 44,"archiveDate": "2027-01-29","department": "VETERANS AFFAIRS, DEPARTMENT OF","agency": "VETERANS AFFAIRS, DEPARTMENT OF","office": "249-NETWORK CONTRACT OFFICE 9 (36C249)","officeCode": "36C249","organizationPath": "VETERANS AFFAIRS, DEPARTMENT OF > VETERANS AFFAIRS, DEPARTMENT OF > 249-NETWORK CONTRACT OFFICE 9 (36C249)","organizationId": "100163849","officeAddress": { "streetAddress": "VISN 9 CONSOLIDATED ACQUISITION, 3400 LEBANON ROAD", "city": "MURFREESBORO", "state": "TN", "zip": "37129", "country": "USA" },"naicsCode": "492110","naicsCodes": ["492110"],"pscCode": "R602","setAsideCode": "SDVOSBC","setAside": "Service-Disabled Veteran-Owned Small Business (SDVOSB) Set-Aside (FAR 19.14)","placeOfPerformance": { "streetAddress": "Robley Rex VA Medical Center (RRVAMC) & its CBOCs", "city": "LOUISVILLE", "state": "KY", "stateName": "Kentucky", "zip": "40206", "country": "USA", "countryName": "UNITED STATES" },"placeOfPerformanceCity": "LOUISVILLE","placeOfPerformanceState": "KY","placeOfPerformanceZip": "40206","primaryContactName": "Sascha Hertslet","primaryContactTitle": "Contracting Officer","primaryContactEmail": "sascha.hertslet@va.gov","primaryContactPhone": "615-225-6664","contacts": [{ "type": "primary", "name": "Sascha Hertslet", "title": "Contracting Officer", "email": "sascha.hertslet@va.gov", "phone": "615-225-6664", "fax": null }],"awardDate": null,"awardAmount": null,"awardNumber": null,"awardeeName": null,"awardeeUei": null,"awardeeCageCode": null,"description": "The Department of Veterans Affairs, Network Contracting Office 9, anticipates issuing a competitive solicitation for medical courier services supporting the Robley Rex VA Medical Center in Louisville, Kentucky…","attachmentCount": 2,"attachments": [{"name": "36C24927B0001-PresolicitationNotice.docx","type": "file","url": "https://sam.gov/api/prod/opps/v3/opportunities/resources/files/265812090240473ca4a082a66515831a/download","mimeType": "docx","sizeBytes": 24716,"postedDate": "2026-10-16T15:00:07.313+00:00","accessLevel": "public","exportControlled": false}],"scrapedAt": "2026-10-17T11:10:59.853Z"}
What to expect, measured on 1,500 open notices (solicitations, combined synopses, presolicitations, sources sought) posted October 11–17, 2026:
| Field | Filled in |
|---|---|
| Contracting contact with email | 100% (1.26 contacts per notice) |
| Contact phone | 41% (many agencies list only an email) |
| Contact title | 6% (most agencies leave it empty) |
| Response deadline | 99% |
| NAICS code | 96% |
| Attachments | 92% (3.5 files or links per notice) |
| Set-aside | 40% (31% Total Small Business, 5% SDVOSB) |
| Place of performance state | 33% |
Field notes:
responseDeadlineis in the notice's own time zone (responseTimeZone);daysUntilDeadlineis counted from the run.postedDateis when the current version was posted; for an amendment that is the amendment date.awardAmountis a number in dollars. Award fields are filled for award notices, andawardeeName/awardeeUeialso for some justifications.- Attachment
urls are permanent sam.gov download links (they redirect to the file). Deleted attachment versions are left out. Files markedexportControlledoraccessLevel: "private"need a SAM.gov login to open. department/agency/officeare the first, second and last levels of the federal hierarchy;organizationPathhas all levels.
Input reference
All list fields take several values; a single value is a one-item list.
| Field | Type | Default | What it does |
|---|---|---|---|
keywords | string[] | – | Words to search in title, description and solicitation number. Each entry is its own search; results are combined. |
keywordMode | ALL / ANY / EXACT | ALL | How the words of one entry match. |
noticeTypes | string[] | all | o Solicitation, k Combined Synopsis/Solicitation, p Presolicitation, r Sources Sought, s Special Notice, a Award Notice, u Justification (J&A), i Intent to Bundle, g Sale of Surplus Property. |
naicsCodes | string[] | – | NAICS codes or prefixes (541512, 5415). |
pscCodes | string[] | – | PSC codes or prefixes (DA01, R4, D). |
setAsides | string[] | all | SBA, SBP, 8A, 8AN, HZC, HZS, SDVOSBC, SDVOSBS, WOSB, WOSBSS, EDWOSB, EDWOSBSS, LAS, IEE, ISBEE, BICiv, VSA, VSS. |
agencies | string[] | – | Department, agency or office names, acronyms, office codes or sam.gov organization IDs. |
states | string[] | – | Place of performance state codes (VA, TX, PR). Notices without a place of performance are left out. |
postedWithinDays | integer | 7 | Posted (or amended) in the last N days, counting today, Eastern time. 0 = any date. |
postedFrom, postedTo | date | – | Exact posted range: 2026-01-01 or relative (30 days = 30 days ago). Overrides postedWithinDays. |
responseDeadlineFrom, responseDeadlineTo | date | – | Deadline range: today, 2026-12-31, 30 days (= 30 days from today). Notices without a deadline are left out. |
activeOnly | boolean | true | Turn off to include archived notices (award history, past solicitations, recompetes). |
includeAmendments | boolean | true | Turn off to drop notices that were amended. |
onlyNewNotices | boolean | false | Skip notices saved by earlier runs of the same task. |
noticeIds | string[] | – | sam.gov URLs or notice IDs to fetch directly; filters are ignored. |
maxResults | integer | 100 | Most notices to save in one run. 0 = no limit. |
Invalid values never fail a run: unknown codes are logged and skipped. If every value of a filter is invalid the run saves nothing, rather than silently returning (and charging for) everything.
Ready-to-run examples
Daily bid feed for an IT small business
{"naicsCodes": ["541511", "541512", "541519", "518210"],"noticeTypes": ["o", "k", "p", "r"],"setAsides": ["SBA", "SDVOSBC", "8A"],"responseDeadlineFrom": "today","postedWithinDays": 2,"onlyNewNotices": true,"maxResults": 0}
Save it as a task and schedule it daily. Two days of overlap make sure nothing posted late in the evening is missed; the memory makes sure nothing is delivered twice.
Everything the VA and the Army want built in Texas and Oklahoma
{"agencies": ["Department of Veterans Affairs", "Army"],"naicsCodes": ["2362", "2371", "2382"],"states": ["TX", "OK"],"noticeTypes": ["o", "k", "p", "r"],"postedWithinDays": 30,"maxResults": 500}
Who won cybersecurity contracts this quarter
{"keywords": ["cybersecurity", "zero trust"],"noticeTypes": ["a"],"activeOnly": false,"postedFrom": "2026-07-01","maxResults": 0}
The Awards table shows award date, amount, awardee and UEI, ready for teaming outreach or a competitor list.
Bids closing in the next two weeks for janitorial services
{"keywords": ["janitorial", "custodial"],"keywordMode": "ANY","noticeTypes": ["o", "k"],"responseDeadlineFrom": "today","responseDeadlineTo": "14 days","postedWithinDays": 0,"maxResults": 300}
Specific notices
{"noticeIds": ["https://sam.gov/opp/3505c1f7e0584df499030ca75a30294e/view"]}
How much does it cost?
You pay per notice saved: $0.003 per opportunity on the free plan, less on paid Apify plans ($0.0027 Bronze, $0.0024 Silver, $0.002 Gold and up). Platform usage is included, and runs that save nothing cost almost nothing. Notices skipped by Only new notices are free.
| Use | Notices | Cost (free plan) |
|---|---|---|
| Daily feed for 4 NAICS codes and small-business set-asides | ~5–20 a day | under $2 a month |
| Every open bid posted in a week (all agencies) | ~3,800 | ~$11.40 |
| Every notice of all types posted in a month | ~25,000 | ~$75 |
Set a maximum cost per run in the run options to cap any run; the Actor stops cleanly at that budget.
Use it from the API or in an AI agent
curl -X POST "https://api.apify.com/v2/acts/epicscrapers~sam-gov-scraper/run-sync-get-dataset-items?token=$APIFY_TOKEN" \-H 'Content-Type: application/json' \-d '{"naicsCodes":["541512"],"noticeTypes":["o","k"],"postedWithinDays":3,"maxResults":50}'
from apify_client import ApifyClientclient = ApifyClient("<APIFY_TOKEN>")run = client.actor("epicscrapers/sam-gov-scraper").call(run_input={"naicsCodes": ["541512"],"setAsides": ["SBA"],"responseDeadlineFrom": "today","maxResults": 100,})for notice in client.dataset(run["defaultDatasetId"]).iterate_items():print(notice["responseDeadline"], notice["title"], notice["primaryContactEmail"])
Connect runs to Google Sheets, Slack, Airtable, HubSpot, Zapier, Make or n8n with Apify integrations, or receive a webhook when each scheduled run finishes.
For AI agents
Call epicscrapers/sam-gov-scraper with a JSON input; every field is optional. Minimal input:
{ "naicsCodes": ["541512"], "noticeTypes": ["o", "k", "p", "r"], "postedWithinDays": 7, "maxResults": 50 }
- Filters:
keywords,naicsCodes,pscCodes,setAsides(codes likeSBA,SDVOSBC),noticeTypes(o,k,p,r,s,a,u,i,g),agencies(names or IDs),states(2-letter),postedWithinDays/postedFrom/postedTo,responseDeadlineFrom/responseDeadlineTo(today,YYYY-MM-DD,30 days),activeOnly,noticeIds. - Key output fields:
noticeId,url,title,solicitationNumber,noticeType,postedDate,responseDeadline,daysUntilDeadline,department,agency,office,naicsCode,pscCode,setAsideCode,placeOfPerformanceState,primaryContactName,primaryContactEmail,primaryContactPhone,contacts[],awardAmount,awardeeName,awardeeUei,description,attachments[].url. - Each saved notice costs $0.003 (free plan). Keep
maxResultssmall for exploratory calls.
How it works
The Actor uses the JSON endpoints behind the sam.gov website: the opportunity search (with SAM.gov's own filters), each notice's detail record (contacts, codes, award, description) and its attachment list. Agency names are resolved through the federal hierarchy. It doesn't need a key, a login or a proxy, and it stays at a modest request rate. It reads public data only: notices behind a SAM.gov login (controlled unclassified attachments) aren't downloaded.
FAQ
How fresh is the data? Live: notices show up as soon as SAM.gov publishes them. Most notices are posted on business days, between 8 am and 11 pm Eastern time.
Why do some rows have no phone or title? The contracting office didn't enter one. The Actor never invents data; it only cleans what the notice lists (and takes the name from the email address when an agency typed only a phone or email into the name field).
Do I need a SAM.gov API key? No.
Can I get more than 10,000 notices? Yes. Set a posted date range; the Actor reads it day by day past SAM.gov's 10,000-record limit per search.
Does "Only new notices" work across different tasks? The memory is per task, so two tasks with overlapping filters each deliver (and charge) the same notice once.
Can it download the attachment files? It gives a direct download link for every file, which works without login for public files. Tell us if you need the files saved in the run storage.
Questions, a missing field or a filter you need? Open an issue on the Actor's Issues tab.
Related Actors
- SEC Form D Scraper: recently funded companies and private fund raises from SEC filings.