SAM.gov Scraper: Federal Contract Opportunities & Contacts avatar

SAM.gov Scraper: Federal Contract Opportunities & Contacts

Pricing

from $2.00 / 1,000 opportunity saveds

Go to Apify Store
SAM.gov Scraper: Federal Contract Opportunities & Contacts

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

Epic Scrapers

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

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 like W91CRB or 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 has daysUntilDeadline.
  • Amendments flagged. An amended notice (new deadline, Q&A, revised SOW) comes as its latest version with isAmendment: true and 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 areWhat you do with itTypical setup
Small business or BD / capture teamGet 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 shopWatch 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 agencySell 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 supplierFind primes that just won work in your field and pitch teaming.Award notices in your NAICS, daily schedule
Developer or AI agentFeed 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

  1. Add your NAICS codes (or keywords).
  2. Pick notice types: Solicitation, Combined Synopsis/Solicitation, Presolicitation and Sources Sought are the open bids.
  3. Optional: set-asides, agencies, states, a response deadline range.
  4. Click Start. Results appear in the Opportunities, Contracting contacts and Awards tables; export them as CSV, Excel or JSON.
  5. 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 2 and 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:

FieldFilled in
Contracting contact with email100% (1.26 contacts per notice)
Contact phone41% (many agencies list only an email)
Contact title6% (most agencies leave it empty)
Response deadline99%
NAICS code96%
Attachments92% (3.5 files or links per notice)
Set-aside40% (31% Total Small Business, 5% SDVOSB)
Place of performance state33%

Field notes:

  • responseDeadline is in the notice's own time zone (responseTimeZone); daysUntilDeadline is counted from the run.
  • postedDate is when the current version was posted; for an amendment that is the amendment date.
  • awardAmount is a number in dollars. Award fields are filled for award notices, and awardeeName / awardeeUei also for some justifications.
  • Attachment urls are permanent sam.gov download links (they redirect to the file). Deleted attachment versions are left out. Files marked exportControlled or accessLevel: "private" need a SAM.gov login to open.
  • department / agency / office are the first, second and last levels of the federal hierarchy; organizationPath has all levels.

Input reference

All list fields take several values; a single value is a one-item list.

FieldTypeDefaultWhat it does
keywordsstring[]–Words to search in title, description and solicitation number. Each entry is its own search; results are combined.
keywordModeALL / ANY / EXACTALLHow the words of one entry match.
noticeTypesstring[]allo 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.
naicsCodesstring[]–NAICS codes or prefixes (541512, 5415).
pscCodesstring[]–PSC codes or prefixes (DA01, R4, D).
setAsidesstring[]allSBA, SBP, 8A, 8AN, HZC, HZS, SDVOSBC, SDVOSBS, WOSB, WOSBSS, EDWOSB, EDWOSBSS, LAS, IEE, ISBEE, BICiv, VSA, VSS.
agenciesstring[]–Department, agency or office names, acronyms, office codes or sam.gov organization IDs.
statesstring[]–Place of performance state codes (VA, TX, PR). Notices without a place of performance are left out.
postedWithinDaysinteger7Posted (or amended) in the last N days, counting today, Eastern time. 0 = any date.
postedFrom, postedTodate–Exact posted range: 2026-01-01 or relative (30 days = 30 days ago). Overrides postedWithinDays.
responseDeadlineFrom, responseDeadlineTodate–Deadline range: today, 2026-12-31, 30 days (= 30 days from today). Notices without a deadline are left out.
activeOnlybooleantrueTurn off to include archived notices (award history, past solicitations, recompetes).
includeAmendmentsbooleantrueTurn off to drop notices that were amended.
onlyNewNoticesbooleanfalseSkip notices saved by earlier runs of the same task.
noticeIdsstring[]–sam.gov URLs or notice IDs to fetch directly; filters are ignored.
maxResultsinteger100Most 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.

UseNoticesCost (free plan)
Daily feed for 4 NAICS codes and small-business set-asides~5–20 a dayunder $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 ApifyClient
client = 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 like SBA, 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 maxResults small 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.