SAM.gov Opportunity Monitor
Pricing
Pay per event
SAM.gov Opportunity Monitor
Monitors SAM.gov federal contract opportunities by NAICS, keyword, notice type and set-aside. Delta mode emits only new/modified notices (incl. deadline changes and cancellations) since your last run.
Pricing
Pay per event
Rating
0.0
(0)
Developer
Vic
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Monitors SAM.gov — the U.S. government's single publication point for federal contract opportunities — by NAICS code, keyword, notice type and set-aside. Delta mode (the default) remembers what it has already shown you and emits only notices that are new or changed since your last run, including deadline moves and cancellations. Award notices are covered too, so you can watch who won.
Quickstart
- Set
naicsCodes(e.g.["541511"]) and/orkeywords, keepdeltaMode: true. - Run once to seed the baseline (first run emits everything matching as
"new"). - Schedule it daily — every later run emits only what changed, with
deltaType,prevModifiedDateanddeadlineChanged.
Why delta mode
Capture/BD teams do not need 600 unchanged rows every morning; they need the 12 that are new, amended, extended, or canceled. Delta state is kept per filter-combination in a named key-value store (sam-gov-monitor-state) in your Apify account, so runs are small, fast and cheap. Turn deltaMode off to get a full snapshot instead.
What it does NOT do
- No login-gated data, no entity registrations or exclusions, no bid submission.
- No consumer PII. Contracting-officer point-of-contact fields (official business contacts published by the government) are off by default; set
includePointOfContact: trueto include them. naicsDescriptionis currently alwaysnull— the SAM.gov search/detail responses don't carry it. The field is kept for forward compatibility.
Input example
{"naicsCodes": ["541511"],"noticeTypes": ["Solicitation", "Combined Synopsis/Solicitation", "Award Notice"],"modifiedSinceDays": 2,"deltaMode": true,"maxResults": 1000}
Recipes:
- Daily NAICS watch:
naicsCodes: ["541511"],deltaMode: true, schedule daily. - Keyword watch:
keywords: ["zero trust", "SIEM"]— each keyword is queried separately and results are deduplicated before you are charged. - Award-notice feed:
noticeTypes: ["Award Notice"],activeOnly: false,modifiedSinceDays: 1. - Set-aside filter:
setAsideCodes: ["SBA", "SDVOSBC", "WOSB", "8A"].
Notice types accept either full names (Solicitation, Presolicitation, Award Notice, Sources Sought, Special Notice, Combined Synopsis/Solicitation, Justification, Sale of Surplus Property) or SAM one-letter codes (o, p, a, r, s, k, u, g, i).
Output example (real row from a test run, 2026-08-29)
{"noticeId": "ff5d8bbd2fdf4b6490b25bfb23e18a67","solicitationNumber": "HC101926R0005","title": "Virtual Reality Training System for Gas Turbine Generator - Pearl Harbor, HI","noticeType": "Solicitation","noticeTypeCode": "o","department": "DEPT OF DEFENSE","subTier": "DEFENSE INFORMATION SYSTEMS AGENCY (DISA)","office": "DITCO-PAC","naicsCode": "541511","naicsDescription": null,"pscCode": "DA01","setAside": "SDVOSBC","placeOfPerformance": { "city": "JBPHH", "state": "HI", "zip": "96860", "country": "USA" },"postedDate": "2026-08-29T00:48:37.000Z","modifiedDate": "2026-08-29T00:48:37.000Z","responseDeadline": "2026-09-10T19:00:00.000Z","isActive": true,"isCanceled": false,"url": "https://sam.gov/opp/ff5d8bbd2fdf4b6490b25bfb23e18a67/view","descriptionSnippet": "The Defense Information Systems Agency - Pacific (DISA - PAC) is seeking a qualified contractor to develop a Virtual Reality Training System for a Gas Turbine Generator ... (truncated here; the actor emits up to 2,000 characters)","award": null,"enriched": true,"deltaType": "new","prevModifiedDate": null,"deadlineChanged": false,"scrapedAt": "2026-08-29T14:29:31.011Z"}
Award notices additionally carry award: { "awardeeName": "...", "awardeeUeiSAM": "..." } when SAM.gov publishes it.
By default each emitted row is enriched with one extra detail request to fill naicsCode, pscCode, setAside, placeOfPerformance and the full description snippet (SAM.gov's list API does not include those). Set enrichDetails: false for faster, lighter rows with those fields null.
Pricing (pay-per-event)
| Event | Price | When |
|---|---|---|
| Run start | $0.005 | once per run |
| Opportunity row | $0.003 | per row, when deltaMode is off |
| Delta row | $0.004 | per row, when deltaMode is on (charged instead of, never on top of, the opportunity-row price) |
You are only charged for rows actually written to the dataset — duplicates are removed first, unchanged notices in delta mode cost nothing, and an empty day costs just the run start. Worked examples: a full daily pull of ~500 notices ≈ $45/month; a delta watch that surfaces ~100 changes/day ≈ $12/month.
How long does a run take / recommended timeout
Measured on the Apify platform (4 GB, default build). The cost driver is per-notice
detail enrichment (enrichDetails: true, ~1 request/s to stay polite):
| run shape | duration (measured 2026-09-03) | recommended timeout |
|---|---|---|
| Delta run, few changes (typical nightly) | ~30-60 s | default 3600s |
~150 notices with enrichDetails: true | ~2 min | default 3600s |
~1000 notices with enrichDetails: true | ~15-20 min | 3600s |
Same but enrichDetails: false | ~2-3 min | default 3600s |
Bound time and cost with maxResults, tighter naicsCodes/keywords, or
modifiedSinceDays. enrichDetails: false is 5-10x faster if you only need
list-level fields.
Timeouts, partial runs, and resurrection (no double billing)
The Actor watches its own run timeout and stops gracefully ~20-30s before the
platform would kill it: it flushes a delivery checkpoint into the run's key-value
store, finishes as SUCCEEDED, and sets a status message like
Partial: N of ~M rows delivered....
- Resurrect the same run (Runs > resurrect, pick a longer timeout) and it continues where it left off - already-delivered rows are never re-pushed and never re-charged. The flat run-start fee is charged at most once per run.
- Rows are charged strictly after they are written to the dataset: a row that never reached your dataset is never billed.
- In delta mode, even a fresh follow-up run continues cleanly: delivered notices are recorded in your delta state, so they are not billed again unless they change.
Data source & respect
Data comes from SAM.gov's public search API — U.S.-government public-domain data, readable without login or API key. The actor is deliberately polite: sequential requests with a fixed delay (under 2 requests/second), a descriptive User-Agent, and exponential backoff on 429/5xx responses. The endpoints used are not disallowed by SAM.gov's robots.txt. POC fields are official business contacts published by the government and are opt-in.
Limitations
- SAM.gov caps any single query's pagination at 10,000 records; the actor scans the most-recently-modified records first and auto-slices large date windows per day, logging coverage warnings when a query exceeds the cap. Use
modifiedSinceDaysand filters to stay well under it. - The primary endpoint is SAM.gov's internal site API and can change without notice. Every run starts with a contract test; on drift or hardening the actor falls back to the official Get Opportunities API if you supply a free api.data.gov key in
apiDataGovKey(the fallback has coarser filtering — posted-date windows, no modified-date filter — and lower daily quotas). Report breakage in the Issues tab; the goal is a response within 24 hours and a fix well inside 14 days. modifiedSinceDayswindows are anchored to US-Eastern dates (as SAM.gov's API expects); all output timestamps are normalized to UTC ISO 8601.