SAM.gov Contract Opportunities Feed: Official Data avatar

SAM.gov Contract Opportunities Feed: Official Data

Pricing

from $2.00 / 1,000 opportunity returneds

Go to Apify Store
SAM.gov Contract Opportunities Feed: Official Data

SAM.gov Contract Opportunities Feed: Official Data

New federal contract opportunities from SAM.gov's official public data file, with no scraping, API key or login. Filter by keyword, NAICS, PSC, set-aside, agency, state and deadline. Monitor mode returns only new notices and doesn't bill repeats. About 1 day behind sam.gov. $2 per 1,000.

Pricing

from $2.00 / 1,000 opportunity returneds

Rating

0.0

(0)

Developer

moo_iscool

moo_iscool

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Share

New federal contract opportunities in your NAICS codes, every morning, without a SAM.gov API key. This actor reads SAM.gov's official public Contract Opportunities data file (the daily CSV extract published for data.gov), filters it by keyword, NAICS, PSC, set-aside, agency, state, and deadline, and saves the matching notices as JSON, CSV, or Excel. It does not scrape the SAM.gov website and needs no login.

  • Who it's for: proposal and capture teams watching a NAICS lane, set-aside, or agency; small businesses that want a daily govcon list without clicking through SAM.gov; analysts loading notices into a spreadsheet, CRM, or webhook.
  • Monitor mode: with Only new since last run, a daily schedule returns only notices you haven't received yet, and repeats are not charged.
  • Price: $2.00 per 1,000 opportunities saved, plus a small per-run start fee.

Quick example

Input (this is the prefilled form):

{
"keywords": ["cybersecurity", "software", "cloud"],
"naicsCodes": ["5415"],
"noticeTypes": ["Solicitation", "Combined Synopsis/Solicitation", "Sources Sought"],
"postedWithinDays": 7,
"maxResults": 50
}

Sample output rows (from a real run on 25 October 2026; a full record is shown further down):

titleagencyNAICSset-asidedeadlinetype
DA01--RFI Action Only Healthcare Data Auditing Billing and C…VETERANS AFFAIRS, DEPARTMENT OF541519–2026-11-06Sources Sought
Mortgage-Backed Securities Operations & Analytics (MBSOA)HOUSING AND URBAN DEVELOPMENT, DEPARTMENT OF541512–2026-11-06Sources Sought
SILVAH software codingAGRICULTURE, DEPARTMENT OF541511SBA2026-11-11Sources Sought

Limits, up front

  • About one day behind sam.gov. SAM.gov rebuilds the public file about once a day (usually around 03:30 UTC). A notice posted today appears in tomorrow's file.
  • No attachment or document links. The public file does not include them. Each row has samUrl, which opens the notice page on sam.gov where files are posted.
  • Active notices only. Archived notices are not in the file, so this is not a historical archive.
  • Not affiliated with SAM.gov or GSA.

How to get SAM.gov opportunities without an API key

The actor reads the official daily Contract Opportunities CSV that SAM.gov publishes for data.gov. It returns one dataset row per matching active notice. You do not need a SAM.gov API key, and the actor does not open or scrape the SAM.gov website.

The file is about 200 MB and lists active notices only. The actor streams it. When you set a posted-date window, it stops reading after 200 rows in a row that are older than that window. A 7-day search reads a few thousand rows, not the whole file, and typically finishes in seconds.

Track new federal contracts by NAICS code

Only new since last run remembers the notice IDs already returned for a saved search. Those notices are not saved again, and they are not charged. The memory lives in the named key-value store sam-gov-opportunities-state. Named key-value stores stay until you delete them; Apify keeps named storage indefinitely on every plan, including the free plan.

What data you get

Each result is one active notice. The extract has no attachment or document links. Open samUrl to see the notice on sam.gov, including any files posted there.

FieldMeaning
noticeIdSAM.gov notice ID
titleNotice title
solicitationNumberSolicitation number
noticeTypeNotice type, such as Solicitation or Sources Sought
baseTypeBase type from the file
agencyDepartment or independent agency
subTierSub-tier
officeContracting office
agencyPathAgency, sub-tier, and office joined with >
naicsCodeNAICS code
pscCodeProduct or service code
setAsideCodeSet-aside code. ["SBA"] becomes SBA. Blank, [""], and NONE become null
setAsideSet-aside description. NONE is reported as No set aside used
postedDateTimePosted timestamp as published
postedDatePosted date, YYYY-MM-DD
responseDeadlineDeadline. A clock time keeps its timezone, such as 2026-10-26T06:00:00-04:00
responseDeadlineDateDeadline date, or null
daysLeftWhole days until the deadline. Null when there is no deadline. Negative when it has passed
archiveDateArchive date as published
placeOfPerformanceStreet, city, state, ZIP, and country
awardAward number, date, amount as a number, and awardee, or null
primaryContactName, title, email, phone, and fax. Omitted when Include contacts is off
secondaryContactSame shape as the primary contact. Omitted when Include contacts is off
officeAddressOffice city, state, ZIP, and country
linkSame address as samUrl
samUrlLink from the file, or https://sam.gov/workspace/contract/opp/<noticeId>/view
additionalInfoLinkExtra link from the file, or null
descriptionIncluded only when you turn descriptions on. A blank description is null
sourceSAM.gov Contract Opportunities public extract
extractDateLast-Modified time of the CSV, in ISO format
scrapedAtTime the run read the file, in ISO format

Empty text fields are null.

How to use

  1. Set Posted within days. The usual value is 7. Use 30 for about a month. Set it to 0 and leave Posted since empty to read the whole active file.
  2. Add keywords, NAICS codes, notice types, or a set-aside. A set-aside entry can be a code such as WOSB or a label such as Women-Owned, Small Business, SDVOSB, 8(a), or HUBZone. Leave a list empty to skip that filter.
  3. Set Maximum results. The actor stops once it has that many matches, or once it is past the posted-date window.
  4. Run it and check the dataset. Turn Include contacts off if you do not want names, emails, and phone numbers.
  5. For a daily feed, turn on Only new since last run and set a Monitor name for this search.

Give each saved search its own monitor name. The only-new memory is one list of notice IDs per name. If two searches share default, a notice returned by the first search is hidden from the second. The store is sam-gov-opportunities-state, and the key inside it is SEEN_ plus the monitor name. The list keeps the most recent 200,000 notice IDs. Named key-value stores stay until you delete them; Apify keeps named storage indefinitely on every plan, including the free plan.

Posted since is the advanced date field. A value such as 2026-10-01 or 14 days replaces Posted within days.

Deadline after accepts today or a date such as 2026-11-01. today keeps deadlines after the start of today, US Eastern. Notices with no deadline stay in the results unless you turn on Require response deadline.

Input example

{
"keywords": ["cybersecurity", "software", "cloud"],
"naicsCodes": ["5415"],
"noticeTypes": ["Solicitation", "Combined Synopsis/Solicitation", "Sources Sought"],
"postedWithinDays": 7,
"maxResults": 50,
"includeContacts": true,
"onlyNew": false
}

A notice matches if the title or the description contains cybersecurity, software, or cloud, the NAICS code starts with 5415, the type is one of those three, and the notice was posted within the last 7 days. Description search is on by default. The description field itself is omitted until you set includeDescription to true.

Output example

{
"noticeId": "4924a9998b8444c3ace265513047df72",
"title": "SILVAH software coding",
"solicitationNumber": "12760426Q0195",
"noticeType": "Sources Sought",
"baseType": "Sources Sought",
"agency": "AGRICULTURE, DEPARTMENT OF",
"subTier": "FOREST SERVICE",
"office": "USDA FOREST SERVICE",
"agencyPath": "AGRICULTURE, DEPARTMENT OF > FOREST SERVICE > USDA FOREST SERVICE",
"naicsCode": "541511",
"pscCode": "DA01",
"setAsideCode": "SBA",
"setAside": "Small Business Set Aside - Total",
"postedDateTime": "2026-10-22 13:26:33",
"postedDate": "2026-10-22",
"responseDeadline": "2026-11-11T15:00:00-05:00",
"responseDeadlineDate": "2026-11-11",
"daysLeft": 17,
"archiveDate": "2026-11-26",
"placeOfPerformance": {
"street": null,
"city": "Parsons",
"state": "WV",
"zip": null,
"country": "USA"
},
"award": null,
"primaryContact": {
"title": null,
"name": "Brandon Newland",
"email": "brandon.newland@usda.gov",
"phone": null,
"fax": null
},
"secondaryContact": null,
"officeAddress": {
"city": "Albuquerque",
"state": "NM",
"zip": "87102",
"country": "USA"
},
"link": "https://sam.gov/workspace/contract/opp/4924a9998b8444c3ace265513047df72/view",
"samUrl": "https://sam.gov/workspace/contract/opp/4924a9998b8444c3ace265513047df72/view",
"additionalInfoLink": null,
"source": "SAM.gov Contract Opportunities public extract",
"extractDate": "2026-10-24T03:30:42.000Z",
"scrapedAt": "2026-10-24T22:55:14.046Z"
}

This record came from the input example above. Description is omitted because include description is off. daysLeft was 17 on 24 October 2026.

How much does it cost?

$2.00 per 1,000 opportunities ($0.002 each) plus a small per-run start fee. Notices you've already received in 'only new' mode are never charged.

You only pay for opportunities that are saved to the dataset. Notices the filters skip are not results. The start fee is a small flat charge for the run itself.

On a pay-per-event run the actor charges the opportunity event for each saved notice. It stops when your max charge limit is reached, and it says so in the log.

Tips

Schedule the actor every day after 04:00 UTC. The public file is usually replaced around 03:30 UTC, so a same-day notice appears the next day. Pair the schedule with Only new since last run and a stable monitor name.

Use one monitor name per saved search. A NAICS 5415 search and a construction search should not share a name.

Leave descriptions off unless you need the text. Blank descriptions in the extract come back as null. Set descriptionMaxLength to 0 only when you want the full field.

Turn Include contacts on when you want the buyer's name and email. Turn it off when the dataset should stay smaller.

Apify can deliver the dataset to Google Sheets, a webhook, Make, or Zapier when the run succeeds. The default key-value store also gets a SUMMARY record with rows scanned, rows matched, rows saved, the file Last-Modified time, and the input that was used.

FAQ

The actor reads a public CSV that SAM.gov publishes for data.gov. It does not scrape the SAM.gov website, and it does not use the SAM.gov API. The notices are public contracting records. This actor is not a SAM.gov or GSA product, and it is not affiliated with either one.

Why is a notice missing?

The extract lists active notices only. Archived notices drop off when the file is rebuilt. A notice posted after the day's file was generated shows up in the next file, so the feed is about one day behind the sam.gov website.

A filter can hide it. Keyword, NAICS, set-aside, agency, state, posted date, and deadline are combined. Any keyword can match, but every filter you set has to match. Only new since last run hides notice IDs already returned for that monitor name.

The file has no attachment or document links. Open samUrl for the notice page.

Why is the description null?

Many rows in the public file have an empty Description column. Those results use description: null. The field is omitted entirely when Include description is off. Contact fields are omitted when Include contacts is off.

How often is the data updated?

SAM.gov rebuilds the public extract about once a day, usually around 03:30 UTC. Each run logs the Last-Modified header of the file it actually read. The same value is stored on every result as extractDate and in the run summary.

Is SAM.gov data free to use?

The Contract Opportunities extract is a public file that anyone can download from SAM.gov and data.gov without an account. You pay only for this actor's processing ($2.00 per 1,000 saved opportunities plus the start fee), not for the data itself.

Can I get the attachments?

No. The public extract has no attachment or resource links. Open samUrl on each row to see the notice and its files on sam.gov.

What does postedDateTime mean?

It is the posted timestamp exactly as written in the file. The file does not state a time zone. postedDate is the date part.

What happens if the download fails partway?

Rows saved before the failure stay in the dataset and count as results, and their notice IDs are remembered for only-new mode. The run then fails with an error message. Run it again to continue; already-sent notices are skipped in only-new mode.

Support

Questions or a field that looks wrong? Open an issue on the actor page in Apify Console. Include the run ID and the input you used.