SAM.gov Federal Contract Opportunities Scraper
Pricing
from $9.23 / 1,000 results
SAM.gov Federal Contract Opportunities Scraper
Scrape US federal contract opportunities from SAM.gov across all agencies. Extract title, notice type, NAICS code, set-aside, solicitation number, response deadline, place of performance, award and point of contact. Export JSON, CSV or Excel.
Pricing
from $9.23 / 1,000 results
Rating
5.0
(2)
Developer
Scrapers Lat
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
21 hours ago
Last modified
Categories
Share
SAM.gov Federal Contract Opportunities Scraper
Here is one real result, with every field the actor returns (the description is trimmed to its first lines here to keep the example short; live records carry the full text, and the source – entities are kept exactly as returned):
{"title": "RFI Notice: MGA Thomas Hall Security","type": "Sources Sought","baseType": "Sources Sought","uiLink": "https://sam.gov/opp/af87a6d729e14c2584d6ea16bebff217/view","noticeId": "af87a6d729e14c2584d6ea16bebff217","solicitationNumber": "FA857926Q0000_","fullParentPathName": "DEPT OF DEFENSE.DEPT OF THE AIR FORCE.AIR FORCE MATERIEL COMMAND.AIR FORCE SUSTAINMENT CENTER.FA8579 SOFTWARE SPRT AFSC PZIM","parentNoticeId": "471475ac4d3c4804bbc26f6614cd9ced","postedDate": "2026-08-10T13:08:18.152+00:00","responseDeadLine": "2026-08-12T16:00:00-04:00","modifiedDate": "2026-08-10T13:08:18+00:00","isActive": true,"isCanceled": false,"award": {"amount": null,"number": null,"date": null,"awardee": { "name": null, "uei": null }},"naicsCode": "238990","classificationCode": "Z2AA","setAside": "NONE","archiveDate": "2026-08-27","placeOfPerformance": {"city": "Warner Robins","state": "Georgia","stateCode": "GA","country": "UNITED STATES","countryCode": "USA","zip": "31093","streetAddress": null},"pointOfContact": [{"type": "primary","name": "Jonathon VanBrunt","title": null,"email": "jonathon.vanbrunt@us.af.mil","phone": null,"fax": null}],"description": "Request for Information (RFI) – Thomas Hall Security FAR Part 10 – Market Research Only\n\nNAICS: 238990 – All Other Specialty Trade Contractors ...","attachments": [{"name": "MGSU Security SOW.pdf","type": "file","mimeType": ".pdf","sizeBytes": 477957,"postedDate": "2026-08-10T13:08:18.152+00:00","url": "https://sam.gov/api/prod/opps/v3/opportunities/resources/files/f8e5327abb994a699ba3a5d5f2325d9d/download"}],"observedAt": "2026-08-10T14:18:24.558Z","error": null}
The most complete SAM.gov opportunities scraper available. It returns every field each federal notice exposes, from title, notice type and solicitation number to NAICS and classification code, set-aside, response deadline, place of performance, award block, points of contact with email and phone, and downloadable attachments, and lets you filter across every agency by keyword, NAICS, set-aside and posted date.
📥 Input · 📤 Output · 💰 Pricing · ▶️ Examples
Table of contents
- What it does
- Quickstart
- Input reference
- Output reference
- Example output record
- Run via API and CLI
- Fetch results
- Billing and limits
- FAQ and troubleshooting
What it does
The actor searches SAM.gov federal contract opportunities across all agencies using the keyword and filters you pass, paginates through the matching notices, and writes one normalized record per opportunity to the run's dataset. Each record includes the title, notice type, solicitation number, the full agency path, posted and response-deadline dates, active and canceled flags, the award block, and the place of performance. When withDetails is on (the default), it also opens each notice to add the NAICS and classification code, set-aside, full description, points of contact with email and phone, and any attachments with download URLs.
Data covers US federal opportunities published on SAM.gov. Filter by keyword, notice type, NAICS code, set-aside program, and posted-date range.
Quickstart
Open the actor, paste this into the input, and press Run. It returns active opportunities matching "software" with full details.
{"maxOpportunities": 10,"withDetails": true,"searchTerm": "software","activeOnly": true,"setAside": ""}
Every input field is optional. Add a naics code, a setAside program, specific noticeTypes, or a postedFrom/postedTo range to narrow the results.
Input reference
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
searchTerm | string | no | software | Free-text keyword searched across notice title and content, for example cybersecurity, janitorial, HVAC. |
maxOpportunities | integer | no | 10 | Maximum opportunities to collect this run. |
withDetails | boolean | no | true | When on, open each notice to add NAICS, classification code, set-aside, full description, points of contact and attachments. Slower but richer. |
noticeTypes | string[] | no | (all) | Types of notice to include. Any of o (Solicitation), k (Combined Synopsis/Solicitation), p (Presolicitation), r (Sources Sought), a (Award Notice), s (Special Notice), g (Sale of Surplus Property), i (Intent to Bundle), u (Justification). Leave empty for all. |
naics | string | no | (any) | Six-digit NAICS industry code, for example 541511 for custom computer programming. |
setAside | enum | no | (any) | Restrict to a set-aside program, for example SBA, 8A, WOSB, SDVOSBC, HZC. Empty for any. |
postedFrom | string | no | (any) | Earliest posted/updated date (MM/DD/YYYY or YYYY-MM-DD). |
postedTo | string | no | (any) | Latest posted/updated date (MM/DD/YYYY or YYYY-MM-DD). |
activeOnly | boolean | no | true | When on, only currently active (not archived) notices are returned. Turn off to include archived notices. |
Output reference
One dataset item per opportunity. Types: string, boolean, object, object[], or null when the source value is absent. Fields marked (details) are populated only when withDetails is on.
| Field | Type | Description |
|---|---|---|
title | string | Opportunity title. |
type | string | Current notice type, for example Sources Sought. |
baseType | string | Original (base) notice type. |
uiLink | string | Public SAM.gov view URL for the notice. |
noticeId | string | SAM.gov notice ID (unique per notice). |
solicitationNumber | string | Solicitation number, or null. |
fullParentPathName | string | Full agency hierarchy path. |
parentNoticeId | string | Parent notice ID, or null. |
postedDate | string | Date the notice was posted (ISO 8601). |
responseDeadLine | string | Response deadline (ISO 8601), or null. |
modifiedDate | string | Last modification date (ISO 8601). |
isActive | boolean | Whether the notice is currently active. |
isCanceled | boolean | Whether the notice was canceled. |
award | object | Award block: amount, number, date, and awardee (name, uei). Values are null until awarded. |
archiveDate | string | Date the notice is archived, or null. |
placeOfPerformance | object | Place of performance: city, state, stateCode, country, countryCode, zip, streetAddress. |
naicsCode | string | NAICS industry code (details), or null. |
classificationCode | string | Product/service classification code (details), or null. |
setAside | string | Set-aside program on the notice (details), for example NONE, SBA, 8A. |
description | string | Full notice description text (details). |
pointOfContact | object[] | Contacts (details). Each has type, name, title, email, phone, fax. |
attachments | object[] | Attachments (details). Each has name, type, mimeType, sizeBytes, postedDate, url. |
observedAt | string | ISO 8601 timestamp of when the record was collected. |
error | string | null on success. |
Example output record
Real record from a live run (input {"searchTerm":"software","activeOnly":true,"withDetails":true}), with description and attachments trimmed for length; live records carry the full values:
{"title": "RFI Notice: MGA Thomas Hall Security","type": "Sources Sought","baseType": "Sources Sought","uiLink": "https://sam.gov/opp/af87a6d729e14c2584d6ea16bebff217/view","noticeId": "af87a6d729e14c2584d6ea16bebff217","solicitationNumber": "FA857926Q0000_","fullParentPathName": "DEPT OF DEFENSE.DEPT OF THE AIR FORCE.AIR FORCE MATERIEL COMMAND.AIR FORCE SUSTAINMENT CENTER.FA8579 SOFTWARE SPRT AFSC PZIM","postedDate": "2026-08-10T13:08:18.152+00:00","responseDeadLine": "2026-08-12T16:00:00-04:00","isActive": true,"isCanceled": false,"naicsCode": "238990","classificationCode": "Z2AA","setAside": "NONE","archiveDate": "2026-08-27","placeOfPerformance": {"city": "Warner Robins","state": "Georgia","stateCode": "GA","country": "UNITED STATES","countryCode": "USA","zip": "31093","streetAddress": null},"pointOfContact": [{"type": "primary","name": "Jonathon VanBrunt","title": null,"email": "jonathon.vanbrunt@us.af.mil","phone": null,"fax": null}],"observedAt": "2026-08-10T14:18:24.558Z","error": null}
Run via API and CLI
Start a run and wait for it to finish, then read the dataset. Replace <TOKEN> with your Apify API token.
Run synchronously and get dataset items in one call:
curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~sam-gov-opportunities-scraper/run-sync-get-dataset-items?token=<TOKEN>" \-H "Content-Type: application/json" \-d '{"searchTerm":"cybersecurity","naics":"541511","withDetails":true,"maxOpportunities":50}'
Start a run asynchronously:
curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~sam-gov-opportunities-scraper/runs?token=<TOKEN>" \-H "Content-Type: application/json" \-d '{"searchTerm":"janitorial","setAside":"WOSB","noticeTypes":["o","k"],"maxOpportunities":200}'
Apify CLI:
apify call scrapers_lat/sam-gov-opportunities-scraper \--input '{"searchTerm":"software","maxOpportunities":25}'
Fetch results
Every run writes to a dataset. Fetch items as JSON, CSV, or Excel by changing format:
# JSONcurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=json"# CSVcurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=csv"# Paginate large datasetscurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&offset=1000&limit=1000"
<DATASET_ID> is returned as defaultDatasetId in the run object. Use offset and limit to page through large result sets. clean=true drops empty and internal fields.
Billing and limits
- Pay per result. You are charged per opportunity returned (
resultevent). See the pricing tab for the current per-result price. - No charge on failure. Searches that match no notice do not push billable records, so empty runs cost nothing.
- Spend cap respected. Set
maxTotalChargeUsdon the run; once reached, the actor stops emitting and charging further billable results. - Free Apify plans are capped at 10 opportunities per run. Upgrade for higher
maxOpportunities. - Detail fetches add a page request per notice. Turn
withDetailsoff for faster, lighter runs when you only need core fields.
FAQ and troubleshooting
A run returned 0 records. Why?
The keyword plus filters matched no active notices. Loosen a filter (drop naics or setAside, widen the date range), turn activeOnly off to include archived notices, or try a broader keyword. Zero-result runs are not charged.
How do I filter by industry?
Pass a six-digit naics code, for example 541511 for custom computer programming.
How do I find set-aside opportunities?
Set setAside to the program code, for example 8A, WOSB, SDVOSBC, or HZC.
Why are the NAICS, description and contacts missing?
Those fields come from each notice's detail page. Turn withDetails on (the default) to include them.
Do award notices include the awardee?
Yes. For awarded notices, the award block carries the amount, number, date, and awardee name and UEI. Before award, those values are null.
Is this an official SAM.gov tool? No. This actor is independent and has no affiliation with SAM.gov or the US government. It reads only publicly available opportunity data. Use it in accordance with SAM.gov's terms.
Related scrapers
- Grants.gov Opportunity Scraper: US federal grant opportunities.
- USAspending Federal Award Scraper: US federal prime awards.
- Federal Register Document Scraper: US Federal Register documents.
- GovDeals Auctions Scraper: government surplus auction listings.
- FMCSA Carriers Scraper: US motor carrier registration data.
- SEC EDGAR Company Filings Scraper: SEC filings by ticker or CIK.
More scrapers at scrapers.lat
Built and maintained by scrapers.lat, where we publish scrapers for US and Latin American public platforms: company registries, government data, finance, e-commerce and more. Browse the catalog or request a custom scraper at scrapers.lat.
Independent tool, not affiliated with SAM.gov or the US government. Accesses only publicly available opportunity data. Use in accordance with SAM.gov's terms of service.
