SAM.gov Contract Opportunities API
Pricing
from $1.60 / 1,000 opportunities
SAM.gov Contract Opportunities API
Search US federal contract opportunities on SAM.gov (solicitations, sources sought, awards) with full detail - NAICS, set-aside, deadlines, POC emails/phones, place of performance, attachment links. No API key required.
Pricing
from $1.60 / 1,000 opportunities
Rating
0.0
(0)
Developer
Alex Lin
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
12 hours ago
Last modified
Categories
Share
US federal contract opportunities from SAM.gov as clean JSON — search, full detail, and attachment links in one run. No API key required (SAM.gov's own internal search API is public and keyless), no 10-requests-a-day cap, and it fixes the "no results" problem the existing SAM.gov actors on the Store are stuck with. Point it at a NAICS code, set-aside, or notice type and get solicitations, sources-sought, special notices, and award notices back as flat JSON — ready for a bid-tracking sheet, a daily alert schedule, an integration, or an MCP-connected agent.
Sample output
One dataset item per opportunity. This is real output from a live run of this Actor (default input: NAICS 541511, active only, details on):
{"noticeId": "bb307f8a384045e88bd224d793709109","solicitationNumber": "FA302026Q0087","title": "82 FSS Automated Student System","noticeTypeCode": "k","noticeType": "Combined Synopsis/Solicitation","active": true,"canceled": false,"postedAt": "2026-09-10T21:39:52+00:00","modifiedAt": "2026-09-10T21:39:52+00:00","responseDeadline": "2026-09-16T14:00:00-05:00","responseTimeZone": "America/Chicago","amendmentCount": 2,"agency": "DEPT OF DEFENSE","subAgency": "DEPT OF THE AIR FORCE","office": "FA3020 82 CONS LGC","naicsCodes": ["541511"],"classificationCode": "7A21","setAside": "SBA","placeOfPerformance": { "city": "Sheppard AFB", "state": "TX", "stateName": "Texas", "zip": "76311", "country": "USA" },"descriptionText": "***AMENDMENT 1*** The purpose of this amendment is to update the NAICS code...","pointsOfContact": [{ "type": "primary", "name": "Mason Carl", "email": "mason.carl@us.af.mil", "phone": "9406761604" },{ "type": "secondary", "name": "Steven Taylor", "email": "steven.taylor.63@us.af.mil", "phone": "9406765180" }],"award": null,"attachments": [],"archiveDate": "2026-10-01","url": "https://sam.gov/opp/bb307f8a384045e88bd224d793709109/view","scrapedAt": "2026-09-13T19:52:10.730Z"}
Award notices (noticeTypeCode: "a") fill in award instead:
{ "date": "2026-09-09", "amount": "55892.10", "number": "HE125426PE047", "awardeeName": "DOCOMO PACIFIC, INC.", "awardeeUei": "NENAMR865QN6", "awardeeLocation": { "city": "Tamuning", "state": "GU", "country": "USA" } }attachments: [{ "name": "...", "url": "https://sam.gov/api/prod/opps/v3/... /download", "mimeType": ".pdf", "size": 2861467 }]You can download any run's dataset as JSON, CSV, Excel, or HTML from the Storage tab or the API.
Input
| Field | Type | Default | Notes |
|---|---|---|---|
query | string | "" | Free-text keyword search across titles/descriptions. |
naics | array of strings | ["541511"] | NAICS codes, OR'd together. Empty = all industries. |
setAside | array of strings | [] | Set-aside codes, OR'd together (SBA, WOSB, EDWOSB, SDVOSBC, HZC, 8A, ... see table below). |
noticeTypes | array of strings | [] | Notice type codes, OR'd together (see table below). |
organizationIds | array of strings | [] | SAM.gov internal agency org IDs (advanced - copy one from a result's output, e.g. 100000000 = Dept of Defense). |
popState | string | "" | Two-letter place-of-performance state, e.g. TX. |
activeOnly | boolean | true | Only currently active (non-expired) opportunities. |
postedFrom / postedTo | string (YYYY-MM-DD) | "" | Filters by posted date. Applied client-side after fetching — see limitations. |
maxItems | integer | 25 | Cap on opportunities returned. |
includeDetails | boolean | true | Fetch full detail per item (NAICS, PSC, set-aside, deadlines, POCs, award info). One extra request + charge per item. |
includeAttachments | boolean | false | Fetch attachment links per item. One extra request + one charge per attachment. |
maxConcurrency | integer | 2 | How many opportunities to enrich in parallel. |
samApiKey | string (secret) | — | Optional: your own api.sam.gov key, for real server-side date filtering via the official API instead of the internal one. Falls back to the internal API on any error. Unverified — see limitations. |
Pricing
Pay-per-event, billed only for work actually done:
| Event | Price | When it's charged |
|---|---|---|
| Actor start | $0.005 | Once per run |
| Opportunity | $0.002 | Per opportunity returned (base search data) |
| Opportunity detail | $0.005 | Per opportunity where full detail was fetched (default: on) |
| Attachment link | $0.01 | Per attachment resolved (only if "Include attachment links" is on) |
Worked examples: 25 opportunities with details (the default input) ≈ 25 × ($0.002 + $0.005) + $0.005 ≈ $0.18. 200 opportunities, details on, no attachments ≈ $1.41. 200 opportunities with details and attachments (avg. 3 attachments each) ≈ 200 × ($0.002 + $0.005 + 3 × $0.01) + $0.005 ≈ $7.40. Turn off "Include full detail" for a cheap, search-only feed at $0.002/opportunity.
Why this Actor
The existing SAM.gov actors on the Store are in bad shape: the top one by users (161 users) is rated 1.0 stars with an open issue reporting "No results are shown"; the runner-up has an open issue that a core filter field ("opportunityTypes") doesn't work at all. This Actor:
- Needs no API key and has no daily-request ceiling — it uses SAM.gov's own public internal search API
(the one the sam.gov website itself calls), which is unauthenticated and has a max page size of 100.
The official
api.sam.govAPI, by contrast, requires a key that's capped at roughly 10 requests/day for personal accounts — the likely root cause of "no results" on the broken incumbents. - Returns full detail in the same run: NAICS, PSC, set-aside, response deadlines, place of performance, and named points of contact with direct email/phone — not just the search-result summary.
- Handles award notices as a distinct, correctly-shaped case (amount, date, awardee, awardee location) — most competitors only handle open solicitations.
- Gives you a stable attachment link per document (solicitation packages, SOWs, amendments) instead of nothing.
- Ships with a safe default input (NAICS 541511, active only, max 25 items) that reliably returns real
results in seconds, so it stays off
UNDER_MAINTENANCE.
Notice type codes
| Code | Meaning |
|---|---|
o | Solicitation |
p | Presolicitation |
k | Combined Synopsis/Solicitation |
r | Sources Sought |
a | Award Notice |
s | Special Notice |
g | Sale of Surplus Property |
i | Intent to Bundle Requirements |
u | Justification (J&A) |
o, k, a, and s were confirmed against live SAM.gov responses while building this Actor; the rest are
SAM.gov's standard published codes.
Set-aside codes
Common codes accepted by setAside (per SAM.gov's own documentation — SBA and WOSB were also confirmed
live): SBA (Total Small Business), WOSB (Women-Owned Small Business), EDWOSB (Economically Disadvantaged
WOSB), SDVOSBC (Service-Disabled Veteran-Owned Small Business), HZC (HUBZone Small Business), 8A (8(a)
Sole Source/Competitive). SAM.gov adds new codes occasionally — any code SAM.gov accepts will work here even
if it's not in this list.
Attachments are links, not files
When "Include attachment links" is on, each attachment gets a url pointing at SAM.gov's own redirect
endpoint (.../opportunities/resources/files/{id}/download). That endpoint is permanent and always resolves
to a fresh, working download — but the underlying signed S3 URL it redirects to expires in seconds, so
this Actor does not fetch, cache, or re-host the file bytes. You get a link that works whenever you (or your
script) follow it, at a fraction of the cost and time of proxying every PDF through this Actor.
Limitations
- SAM.gov's internal search API has no working server-side date-range filter (every parameter name we
tried for it either 400s or is silently ignored) —
postedFrom/postedToare applied client-side after fetching, so they narrow the results but don't reduce SAM.gov API calls. SupplyingsamApiKeyswitches to the official API, which does support real date filtering, but that code path could not be tested against a real key while building this Actor — please open an issue if you hit a problem with it. organizationIdsrequires a SAM.gov internal org ID, not an agency name — the easiest way to find one is to run once without it and copyorganizationIdfrom a result in the agency you want.- Point-of-contact emails/phones and awardee names are published by the government for vendor outreach and are not personal data in the GDPR sense; this Actor does not add, infer, or store anything beyond what SAM.gov itself publishes.
- Not affiliated with, endorsed by, or officially connected to SAM.gov or the U.S. General Services Administration.
Support
Found a bug or a SAM.gov API change that broke something? Open an issue on this Actor's Issues tab — reports are read regularly and the fixes tend to be small (this Actor is a thin, honest wrapper around SAM.gov's own JSON, not a scraped/reverse-engineered HTML page).