SAM.gov Opportunity & Amendment Change Tracker
Pricing
from $4.00 / 1,000 opportunity delivereds
SAM.gov Opportunity & Amendment Change Tracker
Track federal contract opportunities from SAM.gov public data and see exactly what changed when a notice is amended: deadline moves, set-aside, NAICS, place of performance, contacts and description text.
Pricing
from $4.00 / 1,000 opportunity delivereds
Rating
0.0
(0)
Developer
Christopher Hulsey
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
Federal contract opportunities from SAM.gov, filtered your way, with a plain-English answer to the question SAM.gov's own notifications leave open: what actually changed in this amendment?
When an agency amends a notice, SAM.gov tells you that it changed, not what changed. You have to reopen the notice and compare it by eye. This Actor does the comparison for you. Every amended opportunity comes with a field-by-field diff against its previous version.
Response deadline moved later by 5 day(s): Oct 23, 2026 12:00 PM (UTC-5) → Oct 28, 2026 12:00 PM (UTC-5);Description: 2 sentence(s) added, 2 removed (first addition: "...An amendment to this Request for Quoteseffective 10/22/2026 extends the due date to 10/28/2026, changes the period of performance...")
(Real output for a VA HVAC solicitation in Nashville, TN, from the Oct 22, 2026 data.)
What it does
- Filters opportunities by NAICS code (or prefix), set-aside type, place-of-performance state, keywords, exclude-keywords, notice type and posting window.
- Groups versions. SAM.gov posts each amendment as a new notice. The Actor links the versions of one opportunity (same agency, office and solicitation number) and compares the latest with the one before it.
- Diffs these fields: response deadline (with the shift in days), notice type (for example Presolicitation → Solicitation), set-aside, NAICS, product/service code, title, place of performance, archive date, primary and secondary points of contact, award details, and the description text. For the description you get the sentences that were added and removed, not just "text changed."
- Flags noise. Changes that are only case, punctuation or whitespace are marked
cosmetic.hasMaterialChangetells you whether anything that matters changed. - Remembers between runs. Schedule it daily and each run outputs only opportunities that are new or changed since the last run. It also catches notices edited in place under the same notice ID.
- Skips runs when there's no new data. SAM.gov refreshes its data file about once a day. If the file hasn't changed since your last run, the Actor exits in seconds with one free run-summary row and no charges.
Data source
All data comes from the SAM.gov "Contract Opportunities" public data extract, the official bulk file the U.S. General Services Administration publishes for public use. No login, no scraping of web pages, no proxies.
Optional: if you add your own free api.sam.gov API key, the Actor also calls the official SAM.gov Opportunities API to compare attachment lists for amended notices (files added or removed).
This Actor is an independent tool. It is not affiliated with, endorsed by, or sponsored by the U.S. General Services Administration or SAM.gov. Always confirm details on the official notice before you bid. Each result links to it.
Quick start
- Enter your NAICS codes (for example
561720janitorial,238220HVAC/plumbing, or a prefix such as23for all construction). - Optionally pick set-asides (for example Any small-business set-aside), states and keywords.
- Run it once to see the current picture. Every currently amended opportunity already shows its diff on the first run, because the SAM.gov file still contains earlier versions.
- Schedule it daily (for example 7:00 AM ET) with Posted within days set to 2. Later runs return only what's new or changed.
Use Only amended / changed opportunities if you only want the amendment feed.
Input
| Field | What it does |
|---|---|
naicsCodes | NAICS codes or prefixes. Empty = all. |
setAsideTypes | SAM.gov set-aside codes (SBA, 8A, HZC, SDVOSBC, WOSB, …) or ANY_SMALL_BUSINESS. |
states | Two-letter place-of-performance states. Falls back to the contracting office's state when the notice has no place of performance (can be turned off). |
keywords / excludeKeywords | Searched in title and description. |
postedWithinDays | The latest version was posted within N days. Default 7. |
noticeTypes | Defaults to biddable types. Add Award Notice to follow awards. |
onlyChanged | Output only opportunities with an earlier version to compare against. |
openOnly | Skip notices whose response deadline has passed. Default on. |
skipAlreadyDelivered | Don't re-output (or re-charge) an unchanged opportunity this tracker already delivered. Default on. |
trackerName | Keeps separate watchlists separate. |
maxResults | Upper limit per run (default 1,000). |
includeDescription, descriptionMaxChars, includeContacts | Control output size and content. |
samApiKey, maxAttachmentLookups | Optional attachment comparison through the official API. |
Output
One item per opportunity (its latest version). Key fields:
{"noticeId": "588009fe95064eefaa0bed9bdceeeeeb","title": "Solicitation - BWT Operation and Maintenance","solicitationNumber": "W9127826RA005","noticeType": "Solicitation","agency": "DEPT OF DEFENSE","postedDate": "2026-10-21T13:34:35","responseDeadline": "2026-11-09T09:00:00-06:00","naicsCode": "561210","setAside": "Total Small Business Set-Aside","placeOfPerformance": {"city": null, "state": null, "zip": "35401", "street": "Black Warrior-Tombigbee, Tuscaloosa, Alabama ..."},"samUrl": "https://sam.gov/opp/588009fe95064eefaa0bed9bdceeeeeb/view","changeStatus": "amended","versionCount": 6,"previousNoticeId": "4465b0dcae314d1990f554c6bd9204f3","hasMaterialChange": true,"changeSummary": "Response deadline moved later by 24 day(s): Oct 16, 2026 2:00 PM (UTC-6) → Nov 9, 2026 9:00 AM (UTC-6); ...","changes": [{"field": "responseDeadline", "from": "2026-10-16T14:00:00-06:00", "to": "2026-11-09T09:00:00-06:00", "shiftDays": 24, "shiftHours": 571.0}],"descriptionDiff": {"addedSentences": ["... *****Amendment 0004*****"], "removedSentences": ["... *****Amendment 0003*****"], "similarity": 0.952},"attachmentsDiff": null}
changeStatus values:
new: no earlier version known.amended: a newer notice replaced an earlier version.updated: the same notice ID was edited since your last run.unchanged: only returned if you turn offskipAlreadyDelivered.
Runs with nothing new. Every result row has "type": "opportunity". If a run has nothing new to deliver (SAM.gov hasn't published a new file, everything matching was already delivered, or nothing matches your filters), the dataset gets exactly one row with "type": "run-summary", "newOrChanged": 0, a plain-language message and the file's fileLastModified. That row is never charged. Filter on type == "opportunity" in integrations if you only want results.
The Overview and Changes only dataset views show the most useful columns. Export to JSON, CSV or Excel, or connect to Google Sheets, Slack, email or Zapier with Apify integrations.
Limits (please read)
- Attachments. The public bulk file has no attachment lists. Attachment changes are reported only if you supply your own api.sam.gov key. Without a key,
attachmentsDiffisnull. Some amendments change only an attachment (a revised SOW PDF or a Q&A file). In those cases the summary says no published field changed and that the change may be in attachments. - Attachment contents (PDF and Word text) are not diffed.
- Long descriptions. SAM.gov's file caps description text at about 32,000 characters. Results flag this with
descriptionPossiblyTruncatedBySource. - Freshness. SAM.gov regenerates the file about once a day (recently around 03:30 UTC). This tool is for daily tracking, not minute-by-minute alerts.
- Version grouping relies on agency, office and solicitation number. Notices without a solicitation number are grouped by title, which is less reliable.
- Contact details are the government points of contact SAM.gov publishes with each notice. Turn them off with
includeContacts: false.
Reliability
- Reads the official file only (no page scraping), so site redesigns and bot-blocking don't break it.
- Streams the file (about 215 MB) to disk with retries, then checks the size and header.
- Refuses to run on a file with far fewer rows than normal rather than reporting false "removals."
- Memory: about 100 MB for a typical filtered run. A worst case (every notice type, nationwide, no filters, with stored history) peaked at about 660 MB, so the default memory is 1 GB.
Pricing
Pay per event:
- $0.004 per opportunity returned ($4 per 1,000).
- $0.05 per run that processes a new SAM.gov file. Each such run downloads the full official file. Runs skipped because SAM.gov published nothing new are not charged at all.
- Typical cost: a daily tracker that returns 10 opportunities costs about $0.09 a day.
FAQ
Why do I see changes on my very first run? SAM.gov's file keeps earlier versions of amended notices, so the Actor can compare versions right away.
Can I track several unrelated searches? Yes. Give each one its own trackerName.
Where is the history stored? In a named key-value store in your Apify account (samgov-change-tracker-<trackerName>). Delete it to start fresh.