SAM.gov Opportunity Monitor — New Bids Daily, No Login avatar

SAM.gov Opportunity Monitor — New Bids Daily, No Login

Pricing

from $10.00 / 1,000 opportunities

Go to Apify Store
SAM.gov Opportunity Monitor — New Bids Daily, No Login

SAM.gov Opportunity Monitor — New Bids Daily, No Login

Schedule it daily and get only the NEW or UPDATED SAM.gov opportunities matching your keywords, NAICS codes, set-asides, states and agencies. Remembers what it has seen, flags changes, posts to your webhook. No API key. No login or API key. MCP-ready for AI agents. $10 per 1,000 alerts.

Pricing

from $10.00 / 1,000 opportunities

Rating

0.0

(0)

Developer

Khrystyna Skotte

Khrystyna Skotte

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

SAM.gov Opportunity Monitor — daily new & updated federal contracts

Get a daily feed of only the new or updated SAM.gov opportunities that match your profile — keywords, NAICS codes, notice types, set-asides, place-of-performance states and agencies. The monitor remembers every notice it has already reported, so a scheduled run emits just the delta (marked new or updated), posts a summary to your webhook, and costs you only for what actually changed. No SAM.gov API key needed.

Use it instead of re-scraping the whole search every morning and diffing spreadsheets yourself.

How it works

  1. Queries SAM.gov's public search for notices modified in the last lookbackDays matching your filters.
  2. Compares each notice against the monitor's saved state (noticeId → modifiedDate).
  3. Emits a record when the notice is unseen (changeType: "new") or its modified date advanced (changeType: "updated"), enriched with NAICS, PSC, set-aside, place of performance and a description snippet from the notice detail page.
  4. Saves the updated state, then POSTs a run summary to webhookUrl if set.

State lives in a named key-value store samgov-monitor-<hash of monitorId> in your Apify account, capped at 50,000 notices (oldest by modified date are dropped). Delete the store to reset a monitor.

Input

FieldDefaultNotes
keywords["cybersecurity"]OR-ed full-text terms. Empty = no keyword restriction
naicsCodes[]e.g. ["541512", "541519"]
noticeTypes["o","p","k"]Codes or names: o Solicitation, p Presolicitation, k Combined Synopsis/Solicitation, r Sources Sought, s Special Notice, a Award Notice, u Justification, i Intent to Bundle, v Consolidate/Bundle, g Surplus Sale. Empty = all
setAsides[]SBA, 8A, 8AN, HZC, SDVOSBC, WOSB, EDWOSB, VSA, …
states[]Place-of-performance state codes, e.g. ["VA","MD","DC"]
agencies[]Case-insensitive substring match on department / sub-agency / office names
lookbackDays3Notices modified within N days. 2–3 gives a safe overlap for a daily schedule
maxNewOpportunities10Cap per run; anything beyond stays unseen and comes out next run
firstRunModeemitAllemitAll reports every current match on the first run; baseline records them silently
webhookUrl""Optional POST target for the run summary
monitorIddefaultOne state store per ID — run several watchlists side by side
  1. Create a task with your filters and set monitorId to something meaningful (it-services-va).
  2. First run: set firstRunMode to baseline and lookbackDays to 30. This records everything currently on SAM.gov that matches, emits nothing, and stops your first day from being a 500-row backlog.
  3. Switch firstRunMode back to emitAll (it only matters when the state is empty anyway), set lookbackDays to 3 and maxNewOpportunities to 200+.
  4. Schedule the task daily at 06:00 America/New_York. SAM.gov posts most notices during the East Coast business day, so a 06:00 ET run catches everything from the previous day before your team starts.
  5. Point webhookUrl at Slack (incoming webhook), Zapier, Make, or your own endpoint.

The default settings ({}) run in emitAll mode with the cybersecurity keyword so you see real output on the first try.

Example: NAICS watchlist for an IT services small business

{
"keywords": [],
"naicsCodes": ["541511", "541512", "541519", "518210"],
"noticeTypes": ["o", "p", "k", "r"],
"setAsides": ["SBA", "8A", "SDVOSBC"],
"states": [],
"agencies": ["Veterans Affairs", "Health and Human Services"],
"lookbackDays": 3,
"maxNewOpportunities": 200,
"firstRunMode": "baseline",
"webhookUrl": "https://hooks.slack.com/services/XXX/YYY/ZZZ",
"monitorId": "it-smallbiz-va-hhs"
}

Other quick profiles:

  • Construction in Texas: naicsCodes: ["236220","237310"], states: ["TX"], noticeTypes: ["o","p","k"]
  • Award intelligence (who is winning what): noticeTypes: ["a"], naicsCodes: [...], keywords: []
  • Sources Sought only (shape the requirement early): noticeTypes: ["r"], keywords: ["cloud", "zero trust"]

Output

One record per new or updated notice:

{
"noticeId": "45970579afdb4df89b2dd61c5f38e007",
"title": "Antennas",
"solicitationNumber": "N6660426Q0264",
"noticeType": "Combined Synopsis/Solicitation",
"noticeTypeCode": "k",
"agency": "DEPT OF DEFENSE",
"subAgency": "DEPT OF THE NAVY",
"office": "NUWC DIV NEWPORT",
"naicsCode": "334419",
"pscCode": "5985",
"setAside": "SBA",
"postedDate": "2026-09-28T18:36:52+00:00",
"modifiedDate": "2026-09-28T18:36:52+00:00",
"responseDeadline": "2026-10-28T18:00:00+00:00",
"placeOfPerformance": { "city": "Newport", "state": "RI", "stateName": "Rhode Island", "zip": "02841", "country": "USA" },
"description": "This is an amended combined synopsis and solicitation for commercial items …",
"samUrl": "https://sam.gov/opp/45970579afdb4df89b2dd61c5f38e007/view",
"changeType": "new",
"firstSeenAt": "2026-09-28T19:02:11.412Z",
"matchedKeywords": ["cybersecurity"],
"monitorId": "default"
}

firstSeenAt is set on new records; updated records carry null there and the new modifiedDate. matchedKeywords lists which of your keywords appear in the title, solicitation number or description snippet (SAM.gov also matches attachments and full text, so an empty list does not mean a false positive).

Webhook payload

POSTed once per run as application/json, also saved as the SUMMARY record in the run's key-value store:

{
"monitorId": "it-smallbiz-va-hhs",
"runAt": "2026-09-29T10:00:03.118Z",
"newCount": 4,
"updatedCount": 1,
"scanned": 137,
"seenTotal": 812,
"baseline": false,
"opportunities": [ { "...first 50 records, same shape as the dataset..." } ]
}

The full list is always in the run's dataset; use the Apify API or an integration to pull it if a run produces more than 50.

Pricing

Pay per event: a small start fee plus a per-opportunity fee only for records emitted. A daily monitor that finds nothing new costs just the start fee.

Notes

  • Only active notices are considered (is_active=true), which is what a bid team wants; archived notices never appear.
  • A run scans at most 2,000 notices (sorted newest-modified first). Narrow filters or a shorter lookback if your profile exceeds that.
  • SAM.gov's search is public but rate-limited; the actor paces requests and retries transient errors.