SAM.gov Scraper: Federal Contract Opportunities & RFP Alerts avatar

SAM.gov Scraper: Federal Contract Opportunities & RFP Alerts

Pricing

from $2.40 / 1,000 opportunity returneds

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

SAM.gov Scraper: Federal Contract Opportunities & RFP Alerts

SAM.gov scraper for U.S. federal government contract opportunities and RFPs. Filter by keyword, NAICS, PSC, set-aside, agency, state and response deadline, and get daily alerts for new and updated bids. Official public data, no API key.

Pricing

from $2.40 / 1,000 opportunity returneds

Rating

0.0

(0)

Developer

Jason

Jason

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Share

Get a clean feed of new and updated U.S. federal contract opportunities from SAM.gov, filtered to what your company can bid on. Schedule it daily and each run returns only the notices you haven't seen yet, so you can send them to e-mail, Slack, a spreadsheet or your CRM.

SAM.gov Scraper: Federal Contract Opportunities & RFP Alerts - sample output

  • ✅ Official data, no API key. It reads SAM.gov's own public Contract Opportunities daily extract, the file SAM.gov publishes for data sharing. It avoids the 10-requests-a-day API limit, scraping and logins.
  • ✅ Monitor mode returns only new notices, plus notices whose deadline, description, set-aside or award changed.
  • ✅ Real filters:
    • boolean keywords (cyber AND (cloud OR "zero trust") NOT training)
    • NAICS and PSC codes or prefixes
    • set-aside (SBA, 8(a), HUBZone, SDVOSB, WOSB…)
    • agency or office
    • notice type
    • state
    • posted date
    • response deadline within N days
    • award amount
  • ✅ Ready-to-send digest. Each run also saves an HTML and CSV summary that your integration can e-mail.
  • ✅ Privacy-safe. Contracting-officer names, e-mails and phone numbers are dropped, and e-mails and phone numbers are scrubbed from all text.
  • ✅ Fast and reliable. It downloads the ~200 MB file, verifies it is complete, then scans it with bounded memory, so a scan takes seconds. Broken or interrupted downloads are resumed or restarted automatically (nothing is returned from a partial file), and it falls back to the public S3 copy if needed. Small input mistakes (an unknown mode, a malformed date, a dangling AND/OR) are corrected with a warning instead of failing the run.

Who it's for

  • Small businesses and 8(a)/HUBZone/SDVOSB/WOSB firms that want a daily list of bids that match their NAICS codes.
  • BD and capture teams, and proposal consultants, who track agencies, competitors and recompetes.
  • GovCon newsletters, analysts and lead-gen agencies that need structured opportunity and award data.

How to use

  1. Set your filters, for example:
    • NAICS codes: 541511, 5415 (a prefix covers the whole group).
    • Set-aside types: e.g. Small Business Set-Aside (Total), SDVOSB Set-Aside.
    • Keywords: one query per line. Supports AND, OR, NOT, parentheses, "exact phrases" and prefix*.
    • Response due within (days): e.g. 21, to see only bids you still have time for.
    • Optional: agency/office, notice types, states, posted within N days, award amount range.
  2. Set Mode to New and updated notices (monitor). The form opens on All matching notices so your first test run always shows results.
  3. Schedule the Actor daily (SAM.gov refreshes the extract once a night, around 11:30 PM ET). Connect the dataset or the DIGEST_HTML record to e-mail, Slack, Google Sheets, Zapier or Make.

First run: every matching notice counts as new. Enable First run: record baseline only to start fresh without paying for the backlog. Several saved searches? Use a different Monitor ID for each. Same file as last time? If SAM.gov hasn't published a new extract yet, the run stops in under a second, and you aren't charged the run fee.

Output

One item per notice:

{
"noticeId": "abbeb9ff66624ee880a67d9120638145",
"samUrl": "https://sam.gov/opp/abbeb9ff66624ee880a67d9120638145/view",
"solicitationNumber": "36C10B26Q0610",
"title": "DA10--PUPPET ENTERPRISE SOFTWARE (VA-26-00062749)",
"noticeType": "Justification",
"agencyPath": "VETERANS AFFAIRS, DEPARTMENT OF > TECHNOLOGY ACQUISITION CENTER NJ (36C10B)",
"naicsCode": "541519",
"pscCode": "DA10",
"setAsideCode": null,
"postedDate": "2026-10-18T20:04:35",
"responseDeadline": null,
"officeState": "NJ",
"awardNumber": "NNG15SD27B",
"awardAmount": 518996.0,
"awardee": "V3GATE, LLC COLORADO SPRINGS 80921",
"description": "Puppet Enterprise Platform",
"changeType": "new",
"firstSeenAt": "2026-10-20T00:15:20+00:00"
}

Full field list:

  • Notice: noticeId, samUrl, solicitationNumber, title, noticeType, baseType, active
  • Agency: department, subTier, office, agencyPath, cgac, fpdsCode, aacCode
  • Dates: postedDate, responseDeadline, responseDeadlineUtc, archiveType, archiveDate
  • Classification: setAsideCode, setAside, naicsCode, pscCode
  • Place of performance: popStreet, popCity, popState, popZip, popCountry
  • Contracting office: officeCity, officeState, officeZip, officeCountry
  • Award: awardNumber, awardDate, awardAmount, awardAmountText, awardee
  • Content: additionalInfoLink, description, descriptionTruncated
  • Monitoring: changeType, firstSeenAt, scrapedAt, monitorId

Download it as JSON, CSV, Excel, XML or RSS, or use the API. The dataset has an Opportunities view and an Awards view.

Unbilled extras in the run's key-value store:

  • OUTPUT: run summary with the file date, rows scanned, matches, and new/changed/removed counts.
  • ERRORS
  • DIGEST_HTML and DIGEST_CSV: the first 500 returned notices, ready to e-mail.

Pricing (pay per event)

EventPrice
Opportunity returned (each notice written to the dataset)$3.00 per 1,000. Volume tiers: $2.70 (Bronze), $2.55 (Silver), $2.40 (Gold)
Daily extract processed (once per run that scans a new file)$0.02
Actor startApify's standard start fee

In monitor mode you pay only for new or updated notices. A typical small business that checks daily and gets about 20 matches a day pays about $0.08/day, or about $2.40/month. Set Max cost per run to cap spending. Max notices per run defaults to 1,000 so that a first run without filters can't return all ~70,000 notices. Anything not returned because of either limit is returned on the next run.

Good to know

  • Freshness: SAM.gov publishes the extract once a day, so notices posted after that night's file was built appear the next day. For same-hour alerts, use SAM.gov's own saved searches alongside this Actor.
  • Coverage: the extract contains active notices (about 70,000, including recent award notices). Archived notices are not in it.
  • Descriptions: SAM.gov truncates very long descriptions in the extract (about 32,000 characters). descriptionTruncated tells you when, and samUrl opens the full notice with its attachments.
  • State filter: about 3 in 4 notices have no place-of-performance state, so the contracting office's state is used for those by default. You can switch this off.
  • Dates: postedDate is shown exactly as SAM.gov publishes it. responseDeadlineUtc normalizes deadlines that carry a timezone.

The Actor uses only SAM.gov's public Contract Opportunities data extract, which is published by the U.S. General Services Administration for public reuse. It doesn't log in, call rate-limited APIs or scrape web pages. Personal contact details of contracting officers are removed. This Actor is not affiliated with or endorsed by GSA or SAM.gov.

FAQ

Do I need a SAM.gov account or API key? No.

Why did a run return nothing? Either SAM.gov hasn't published a new file since your last run (see OUTPUT.status = "file-unchanged"), or nothing new matched your filters.

I changed my filters. Why is everything "new"? Monitor memory is per Monitor ID. Use a new Monitor ID for a new search, or enable First run: record baseline only.

Can it read attachments or the full description? Not in this version. Open samUrl. An optional bring-your-own-API-key mode is planned.