SAM.gov Contract Opportunities Search & Alerts avatar

SAM.gov Contract Opportunities Search & Alerts

Pricing

from $5.00 / 1,000 results

Go to Apify Store
SAM.gov Contract Opportunities Search & Alerts

SAM.gov Contract Opportunities Search & Alerts

Filter the public SAM.gov Contract Opportunities extract by NAICS, keywords, set-aside, state and agency. Clean JSON, deduplicated, with new/changed tracking. No API key needed.

Pricing

from $5.00 / 1,000 results

Rating

0.0

(0)

Developer

Openwell Data

Openwell Data

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

Turn the government's daily bulk file of federal bid opportunities into a clean, filtered, deduplicated feed. Filter by NAICS code, keywords, set-aside, state and agency, then optionally get only new or changed notices on every scheduled run.

No API key, no SAM.gov account and no login needed. The Actor reads the public Contract Opportunities data extract that the U.S. General Services Administration publishes on SAM.gov and data.gov. It downloads that official bulk file; it does not read or automate SAM.gov web pages.

Use it as a SAM.gov opportunities API: search federal contract opportunities (RFPs, solicitations, sources sought, presolicitations) by NAICS code, keyword, set-aside, state and agency, and get JSON, CSV or Excel out.

Who uses SAM.gov contract opportunity alerts

  • Small businesses and consultancies that bid on federal work and want a daily alert feed for their NAICS codes.
  • Proposal and business-development teams that want structured data to push into a CRM, spreadsheet, Slack or Airtable.
  • Analysts who want a queryable snapshot of what is open right now.

What you get: SAM.gov opportunity data as JSON, CSV or Excel

One dataset row per matching notice, for example:

{
"noticeId": "5e1bed195d704dc189d7a231c4a5ab9c",
"title": "TTS for DTB Pilot - Request for Information",
"noticeType": "Sources Sought",
"department": "LIBRARY OF CONGRESS",
"office": "CONTRACTS SERVICES",
"postedDate": "2026-09-28T15:34:54",
"responseDeadline": "2026-10-12T17:00:00-04:00",
"daysToDeadline": 13,
"naicsCode": "541511",
"pscCode": "DA01",
"setAsideCode": null,
"placeOfPerformance": { "city": "Washington", "state": "DC", "zip": "20540", "country": "USA" },
"matchedKeywords": ["software", "data"],
"changeStatus": "new",
"samUrl": "https://sam.gov/workspace/contract/opp/5e1bed195d704dc189d7a231c4a5ab9c/view"
}

Other fields: solicitation number, sub-tier agency, archive date, set-aside description, a trimmed description, the additional-info link and, for award notices, the award number, date and amount. The awardee name is deliberately not included (it can be an individual). See docs/sample_output.json.

How to search SAM.gov opportunities by NAICS code and keyword

  1. Enter NAICS codes (prefix match, so 5415 covers all 5415xx), and/or keywords, set-aside codes, states or agencies. All filters are combined with AND; the values inside one filter are OR (keywords can be switched to "all").
  2. Set Maximum results. This is your cost cap: results are newest first and you pay per delivered notice.
  3. For a daily alert feed, give the run a watchlist name, tick Only new or changed notices, and put the Actor on a daily Schedule. The Actor remembers what it already delivered under that name (in a key-value store in your account) and marks each row new or updated.
  4. Send results anywhere with Apify integrations, webhooks or the API (see "Use with AI agents and the API" below).

Get federal RFP and bid alerts every day

To turn this into a federal bid alert service: save a task with your NAICS codes, tick Only new or changed notices, give it a watchlist name, and add a daily Schedule (the government file refreshes once a day, so daily is the useful frequency). Connect the run to email, Slack, Google Sheets, Airtable or a webhook, and each morning you receive only what is new or changed since the previous run. You can keep several watchlists (one per NAICS code group, client or region), each remembering its own history.

Pricing (pay per event)

You pay only for what is delivered. Proposed launch prices:

EventPriceWhen
Actor start$0.0001Each run (covers downloading and scanning the ~230 MB daily file)
Result delivered$0.005Each notice added to your dataset, whether new or an update to a notice you already received under the same watchlist name

What $0.005 buys: one complete, deduplicated SAM.gov notice with about 24 structured fields (NAICS, PSC, set-aside, response deadline and days left, place of performance, matched keywords, direct SAM.gov link), with contact details stripped. Nothing else is billed for the notice, and there are no subscription or seat fees.

Examples: a daily watchlist that finds 5 new or updated notices costs about $0.0251 per day ($0.0001 + 5 x $0.005). A one-off pull of 100 notices costs $0.5001. There is no charge for notices that do not match, and Maximum results plus the run's own maximum-cost setting stop spending at the limit.

Use with AI agents and the API

Every run is a plain Apify Actor, so anything that can call the Apify API can use it.

  • REST API. Start a run and get the results in one call (replace YOUR_TOKEN with your Apify API token):
curl -X POST "https://api.apify.com/v2/acts/federal-contract-opportunity-monitor/run-sync-get-dataset-items?token=YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"naicsCodes":["5415"],"keywords":["cybersecurity"],"placeOfPerformanceStates":["VA"],"maxResults":20}'

(Use the Actor's full username~actor-name ID from its API tab if the short name does not resolve.) The same input works with the Apify JavaScript and Python clients.

  • MCP (Model Context Protocol). Apify's MCP server (https://mcp.apify.com) exposes any Store Actor as a tool, so Claude, ChatGPT-style agents, Cursor and other MCP clients can search federal contract opportunities in plain language. Add this Actor to the server's tool list (for example with the actors URL parameter, https://mcp.apify.com?actors=USERNAME/federal-contract-opportunity-monitor) and give the agent your Apify token. The input schema doubles as the tool description, and Maximum results keeps an agent's spend bounded.
  • Scheduled runs and webhooks. Create a Schedule in Apify Console (for example daily at 09:00), set a webhook on the run's success event, and post the dataset to your CRM or chat. With a watchlist name each run returns only new or changed notices, which is what an alerting agent wants.
  • Spending control. Set the run's maximum cost in the run options and Maximum results in the input; the Actor stops at whichever limit comes first.

Frequently asked questions

Do I need a SAM.gov account or API key? No. The Actor uses the public bulk data extract, so it needs no login and no key.

How fresh is the data? The government file is regenerated once a day (about 03:30 UTC). A notice posted today usually appears in tomorrow's run.

Can I get only new opportunities? Yes. Give the run a watchlist name and tick Only new or changed notices; each row is marked new or updated.

Which notice types are covered? By default: solicitations, combined synopsis/solicitations, presolicitations, sources sought and special notices. Other types, such as award notices, can be added with the noticeTypes input.

Can I filter by NAICS code? Yes, with prefix matching (5415 covers every 5415xx code). You can combine it with keywords, set-aside, state and agency.

Are contracting officer names, emails or phone numbers included? No. They are deliberately left out, and emails or phone numbers inside description text are removed. Open the samUrl for the official contact.

Does it include attachments or the full historical archive? No. Attachments are not included (use samUrl), and the extract holds active notices only.

How much does it cost? $0.0001 per run plus $0.005 per delivered notice. You control the maximum with Maximum results and the run's maximum cost.

Can I export to CSV or Excel? Yes. Any Apify dataset can be downloaded as JSON, CSV, Excel, XML or HTML from the run's Output tab or the API.

Is this official? No. It is an independent tool and is not affiliated with SAM.gov or the U.S. government.

Important limitations (please read)

  • Not real time. The government file is regenerated once a day (roughly 03:30 UTC). A notice posted this afternoon appears tomorrow.
  • Active notices only. The file holds notices that are still active on SAM.gov, not the full historical archive. Use USAspending.gov data for historical awards.
  • Latest version only. You see each notice as currently published. Attachments (the solicitation PDFs) are not included; open the samUrl for those.
  • No contact details. The source file includes contracting officers' names, emails and phone numbers. This Actor deliberately does not output them, and it also removes any email address or phone number that appears inside a notice's free-text description. Follow samUrl to see the official point of contact.
  • Place of performance is often blank in the source. Filtering by state excludes notices that do not state one.
  • Descriptions are trimmed (default 600 characters, configurable). Keyword matching uses the full text.
  • Dates come from SAM.gov as published (posted date has no time zone; the deadline usually carries its own offset).
  • This is a convenience feed, not legal or procurement advice. Always confirm details and deadlines on SAM.gov before you bid.

Data source and attribution

Data: "Contract Opportunities from SAM.gov", published by the U.S. General Services Administration (Federal Acquisition Service) via SAM.gov Data Services and Data.gov. U.S. government data with no access restrictions stated in the dataset metadata. This Actor is an independent tool and is not affiliated with, endorsed by or operated by SAM.gov or the U.S. government.

Privacy and terms

No personal data is collected, stored or output beyond the public business information listed above. The Actor sends no data to third parties, uses no AI or LLM at run time, and makes one download request to the government file per run.

Support

Issues and feature requests go through the Actor's Issues tab. Contact: claudefarmceo@gmail.com. Support is AI-assisted, on behalf of the publisher.

Technical notes

Node.js 22, Apify SDK 3, streaming CSV parsing (memory stays low). Runs in about 40 seconds on 512 MB. Set the CONTACT_EMAIL environment variable (publisher contact, used only in the download User-Agent; optional). Run locally: npm install, then put your input in storage/key_value_stores/default/INPUT.json and run npm start (or apify run). Tests: npm test.