SAM.gov Contract Opportunities API avatar

SAM.gov Contract Opportunities API

Pricing

from $1.60 / 1,000 opportunities

Go to Apify Store
SAM.gov Contract Opportunities API

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

Alex Lin

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

12 hours ago

Last modified

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" } }
. Turn on Include attachment links and each item also gets
attachments: [{ "name": "...", "url": "https://sam.gov/api/prod/opps/v3/... /download", "mimeType": ".pdf", "size": 2861467 }]
— solicitation packages, SOWs, and amendments, ready to download directly (see Attachments below).

You can download any run's dataset as JSON, CSV, Excel, or HTML from the Storage tab or the API.

Input

FieldTypeDefaultNotes
querystring""Free-text keyword search across titles/descriptions.
naicsarray of strings["541511"]NAICS codes, OR'd together. Empty = all industries.
setAsidearray of strings[]Set-aside codes, OR'd together (SBA, WOSB, EDWOSB, SDVOSBC, HZC, 8A, ... see table below).
noticeTypesarray of strings[]Notice type codes, OR'd together (see table below).
organizationIdsarray of strings[]SAM.gov internal agency org IDs (advanced - copy one from a result's output, e.g. 100000000 = Dept of Defense).
popStatestring""Two-letter place-of-performance state, e.g. TX.
activeOnlybooleantrueOnly currently active (non-expired) opportunities.
postedFrom / postedTostring (YYYY-MM-DD)""Filters by posted date. Applied client-side after fetching — see limitations.
maxItemsinteger25Cap on opportunities returned.
includeDetailsbooleantrueFetch full detail per item (NAICS, PSC, set-aside, deadlines, POCs, award info). One extra request + charge per item.
includeAttachmentsbooleanfalseFetch attachment links per item. One extra request + one charge per attachment.
maxConcurrencyinteger2How many opportunities to enrich in parallel.
samApiKeystring (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:

EventPriceWhen it's charged
Actor start$0.005Once per run
Opportunity$0.002Per opportunity returned (base search data)
Opportunity detail$0.005Per opportunity where full detail was fetched (default: on)
Attachment link$0.01Per 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.gov API, 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

CodeMeaning
oSolicitation
pPresolicitation
kCombined Synopsis/Solicitation
rSources Sought
aAward Notice
sSpecial Notice
gSale of Surplus Property
iIntent to Bundle Requirements
uJustification (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.

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/postedTo are applied client-side after fetching, so they narrow the results but don't reduce SAM.gov API calls. Supplying samApiKey switches 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.
  • organizationIds requires a SAM.gov internal org ID, not an agency name — the easiest way to find one is to run once without it and copy organizationId from 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).