SAM.gov Government Contract Opportunities Monitor avatar

SAM.gov Government Contract Opportunities Monitor

Pricing

from $3.00 / 1,000 scored match returneds

Go to Apify Store
SAM.gov Government Contract Opportunities Monitor

SAM.gov Government Contract Opportunities Monitor

SAM.gov government contracts monitor: US federal contract opportunities (solicitations, RFPs, sources sought, awards) scored to your NAICS, PSC, keywords and set-asides. Amendments merged into one row per solicitation, deadline filters, daily bid alerts. No API key needed.

Pricing

from $3.00 / 1,000 scored match returneds

Rating

0.0

(0)

Developer

Lindenwerk Data

Lindenwerk Data

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

12 hours ago

Last modified

Share

What is SAM.gov Government Contract Opportunities Monitor?

Find US federal government contract opportunities on SAM.gov that actually fit your company. This Actor reads the official SAM.gov Contract Opportunities public extract (no API key, no login), merges amendments into one row per solicitation, filters by NAICS, PSC, set-aside, agency, state and response deadline, and gives every opportunity a relevance score from 0 to 100 with plain-English reasons. Contracting officer names, e-mails and phone numbers are never output.

  • Daily federal bid alerts: schedule monitor mode and get only new or amended solicitations since the last run.
  • 30-day market scan: search mode returns every match posted in the last N days, sorted by score or deadline.
  • Competitor and award tracking: awards mode lists who won what, for how much, in your NAICS codes.
  • Small-business set-asides: filter by SBA, 8(a), HUBZone, SDVOSB, WOSB/EDWOSB, VA veteran set-asides or unrestricted.
  • Cheap and explainable: USD 0.003 per scored match, no LLM, every score explained in matchReasons.

Why this SAM.gov scraper alternative?

This ActorTypical SAM.gov scrapers
SourceOfficial public extract published by GSA for reuse (sam.gov/data-services)Website or internal search API
API keyNot needed (your own key optional, for same-day notices)Often required
AmendmentsCollapsed: one row per solicitation, older versions in relatedNoticeIdsOne row per notice version
RelevancerelevanceScore 0-100 + matchReasons across NAICS, PSC and keywordsKeyword hit or none
MonitorchangeType = new / updated per solicitationRe-sends everything or per notice
Personal dataContracting officer names, e-mails, phones removed, also from descriptionsOften included
PriceUSD 0.003 per scored match, USD 0.0015 per unscored rowUSD 0.001-0.10 per row

What it does

  1. Downloads the daily SAM.gov Contract Opportunities extract (ContractOpportunitiesFullCSV.csv, about 210 MB, ~75,000 active notices). The file is sorted by posting date, newest first, so the Actor stops reading as soon as it has passed your date window: a daily monitor reads about 6 MB, a 30-day scan about 72 MB.
  2. In monitor mode it compares the file's ETag with the last run. If SAM.gov has not published a new file, the body is not downloaded at all and the run ends in about a second.
  3. Groups all notice versions of the same solicitation (same solicitation number and agency) and keeps the newest one. Awards are grouped per contract, so multiple-award contracts list every awardee.
  4. Applies your hard filters (notice type, set-aside, agency, state, deadline window, award amount, exclude keywords, competitor names). Filtered rows are never charged.
  5. Scores the rest against your NAICS codes, PSC codes and keywords and keeps rows at or above minScore.
  6. Removes personal contact data, adds a link to the public SAM.gov notice page and pushes flat rows to the dataset.

Use cases

  • Federal BD teams and GovCon consultants: a daily shortlist of solicitations, presolicitations and sources-sought notices in your NAICS codes, with deadlines and reasons, instead of hand-searching SAM.gov.
  • Small businesses: a feed limited to your set-aside (SDVOSB, 8(a), WOSB, HUBZone) and states.
  • Capture planning: sources-sought and presolicitation notices give you weeks of lead time before the RFP.
  • Competitive intelligence: recent awards in your market with awardee, amount and agency.
  • AI agents and automations: clean, explainable JSON for Make, Zapier, n8n, Slack or an LLM via MCP.

How to get daily SAM.gov bid alerts

  1. Click Start with the prefilled example (IT and cybersecurity, NAICS 5415, posted in the last 7 days). It returns up to 25 scored opportunities, so you see real output before you change anything.
  2. Replace the keywords and NAICS codes with your own. Optionally add PSC codes, set-asides, agencies, states and a response deadline window.
  3. Pick a mode: search for a market scan, monitor for daily alerts that return only new or amended solicitations, or awards for competitor and award tracking.
  4. Look at the results in the Output tab (views "Matches" and "Awards") or download them as JSON, CSV or Excel.
  5. For daily alerts, switch mode to monitor, save the input as a task and add a schedule (for example every weekday at 08:00 US Eastern).
  6. Send new matches on with Apify integrations (Slack, Google Drive, Make, Zapier, n8n or a webhook), or call the Actor from your own code through the Apify API.

Quick start

Daily alert for an IT small business (schedule it once a day, e.g. 08:00 US Eastern):

{
"mode": "monitor",
"profileName": "it-small-business",
"keywords": ["cybersecurity", "software", "cloud", "network", "help desk"],
"naicsCodes": ["541511", "541512", "541519", "518210"],
"pscCodes": ["D", "7A", "7B"],
"setAsides": ["small-business", "8a", "sdvosb", "none"],
"minDaysUntilDeadline": 3,
"minScore": 45
}

30-day market scan for construction in Virginia, Maryland and DC, earliest deadline first:

{
"mode": "search",
"keywords": ["renovation", "roof", "HVAC", "paving"],
"naicsCodes": ["2362", "2382", "237310"],
"pscCodes": ["Z2", "Y1"],
"states": ["VA", "MD", "DC"],
"postedWithinDays": 30,
"deadlineWithinDays": 45,
"sortBy": "deadline"
}

Unscored feed of SDVOSB set-asides at Veterans Affairs from the last 7 days (no NAICS or keywords = plain feed):

{ "mode": "search", "setAsides": ["sdvosb"], "agencies": ["Veterans Affairs"], "postedWithinDays": 7, "sortBy": "postedDate" }

IT awards over USD 100,000 from the last 30 days:

{ "mode": "awards", "naicsCodes": ["5415"], "minAwardAmount": 100000, "postedWithinDays": 30 }

More examples are in the examples/ folder of the source.

The Console form vs. API defaults

  • The Console form opens with a short trial: mode = search over the last 7 days (postedWithinDays 7), the prefilled IT profile (cybersecurity / network / software, NAICS 541512 / 5415) and maxResults = 25. One click shows the 25 best open opportunities for at most USD 0.075. This prefill is also what Apify's daily automated Store test runs. It keeps no state and skips no unchanged files, so it returns rows on any day, US weekends and federal holidays included.
  • Before you schedule it, switch mode to monitor and raise maxResults, or set it to 0 for no limit.
  • API calls, tasks and schedules that leave a field out get the defaults: mode = monitor, lookbackDays = 3, postedWithinDays = 30, maxResults = 200. The prefill values only fill the form.
  • First monitor run on a quiet day: a monitor run with no saved state (the first run for a stateKey, or one with resetState) that finds nothing new in its lookbackDays window looks back firstRunBackfillDays (default 7) posting days once. Everything it returns is remembered, so the next run is a normal monitor run. Set it to 0 to turn this off. It isn't used when you set postedFrom.
  • Quiet days and outages: a monitor run with nothing new, or one whose extract is unchanged since the last run, still ends Succeeded, with 0 rows and a status message. Nothing is charged. If the sam.gov download link fails, the Actor uses the public S3 copy of the same file and reports this as a warning. If neither can be read (or the file is malformed), the run ends Failed with a clear message. Nothing is charged and the monitor state is left unchanged.

Input

FieldWhat it does
modemonitor (default: only new or updated since the last run), search (last postedWithinDays days; the Console form opens with this) or awards (Award Notices).
keywordsMatched in the title (full weight) and description (lower weight). "cyber" also matches cybersecurity; quote a word for whole-word matching.
naicsCodes6-digit codes (strongest evidence) or prefixes such as 5415.
pscCodesProduct Service Code prefixes: D = IT services, R4 = professional support, Z2 = real property repair, S2 = housekeeping.
setAsidesFamilies (small-business, 8a, hubzone, sdvosb, wosb, veteran, indian, local, none) or exact SAM.gov codes (SBA, 8AN, SDVOSBC ...).
agenciesText in department, sub-tier or office ("Army Corps of Engineers"), or a CGAC / AAC code ("036", "W912DY").
statesPlace of performance, 2-letter codes. Falls back to the contracting office state if none is given.
noticeTypesDefault: solicitation, presolicitation, sources-sought. Also special-notice, justification, intent-to-bundle, surplus-sale, ...
onlyOpen, deadlineWithinDays, minDaysUntilDeadlineDeadline window: drop closed notices, keep only those due soon, or drop those due too soon to bid.
excludeKeywordsDrop notices containing these words.
competitorNames, minAwardAmount, maxAwardAmountAwards mode filters.
minScoreDefault 40. Guide: exact NAICS only = 50, one title keyword only = 46, NAICS + one title keyword = 73.
lookbackDays, postedWithinDays, postedFromDate window. postedWithinDays: 0 reads all active notices.
includeUpdatesMonitor: also return a solicitation again when a newer version is posted (changeType: "updated").
maxResults, sortByCap (best matches first; default 200, the Console form prefills 25) and order of the output.
includeDescription, descriptionMaxLengthDescription text (personal data removed), default 600 characters.
stateKey, resetStateSeparate "already seen" lists per profile or schedule.
firstRunBackfillDaysMonitor only: how far a first run with no saved state looks back if its normal window is empty. Default 7, 0 = off.
samApiKeyOptional: your own SAM.gov public API key, to add notices posted after the daily extract was built.

Output

One flat row per solicitation. A real row from a 30-day IT scan on 5 Oct 2026 (some fields left out). Three earlier versions of this solicitation were merged into it:

{
"noticeId": "07889806966c44b385181aa0cf7c70bf",
"solicitationNumber": "N0018926RL011",
"title": "Enterprise Cloud Support Services",
"noticeType": "solicitation",
"noticeTypeLabel": "Solicitation",
"department": "DEPT OF DEFENSE",
"subTier": "DEPT OF THE NAVY",
"office": "NAVSUP FLT LOG CTR NORFOLK",
"postedDate": "2026-10-01T15:50:30",
"responseDeadline": "2026-10-27T14:00:00-04:00",
"daysUntilDeadline": 23,
"isOpen": true,
"setAsideCode": "SBA",
"setAside": "Small Business Set Aside - Total",
"setAsideFamily": "small-business",
"naicsCode": "518210",
"naicsSector": "Information",
"pscCode": "DG01",
"pscCategory": "IT and Telecom Services",
"placeOfPerformanceState": "VA",
"noticeUrl": "https://sam.gov/opp/07889806966c44b385181aa0cf7c70bf/view",
"relatedNoticeIds": ["1d700fce3d2345f4bf05f7901bf7ad3a", "b8f1b788e44746a8a9fb73367bec0dc1", "292be4c5d0f545f2bbf687e8681af724"],
"versionCount": 4,
"relevanceScore": 89,
"matchReasons": [
"NAICS 518210 matches profile NAICS 518210",
"PSC DG01 matches profile PSC D",
"Keyword 'cloud' in title",
"Keyword 'network' in description",
"Set-aside: SBA",
"Responses due in 23 day(s)"
],
"source": "SAM.gov Contract Opportunities public extract",
"extractUpdatedAt": "2026-10-05T03:30:41+00:00"
}

Output fields

GroupFields
IdentitynoticeId, solicitationNumber, noticeType, noticeTypeLabel, baseType, changeType, relatedNoticeIds, versionCount
Contenttitle, description (personal data removed)
Agencydepartment, subTier, office, agencyCode (CGAC), officeCode (AAC), officeCity, officeState, officeZip, officeCountry
DatespostedDate, responseDeadline, daysUntilDeadline, isOpen, archiveDate
ClassificationsetAsideCode, setAside, setAsideFamily, naicsCode, naicsSector, pscCode, pscCategory
Place of performanceplaceOfPerformanceCity, placeOfPerformanceState, placeOfPerformanceZip, placeOfPerformanceCountry
AwardsawardNumber, awardDate, awardAmount, awardee (company name only)
Links and matchingnoticeUrl, additionalInfoLink, relevanceScore, matchReasons, profileName, source, extractUpdatedAt, retrievedAt

Each run also writes a RUN_SUMMARY record (bytes read, rows read, early stop, ETag skip, filter counts, matches). The dataset has two views: Matches (score, deadline, link, reasons) and Awards (awardee, amount, date).

Pricing (pay per event)

EventPrice
Actor startUSD 0.00005
scored-match: a solicitation that matched your profile at or above minScoreUSD 0.003
opportunity: a row of an unscored feed (no NAICS, PSC, keyword or competitor profile)USD 0.0015

Filtered notices, notices below minScore, older versions and solicitations already delivered by an earlier monitor run are never charged. Platform compute is included. Cap your cost with maxResults and the run's maximum total charge: the Actor stops cleanly when the limit is reached and, in monitor mode, delivers the rest next run.

Real runs on 5 Oct 2026 (inputs in examples/):

RunRows returnedYour cost
Daily monitor, IT small business, first run (3 posting days)18USD 0.054
Same monitor the next day (weekend postings, nothing new above minScore)0USD 0.00005
Same monitor again before SAM.gov published a new file (ETag skip)0USD 0.00005
30-day search, IT small business, minScore 4568USD 0.20
7-day unscored feed, SDVOSB set-asides at Veterans Affairs77USD 0.12
30-day awards, NAICS 5415, at least USD 100,000114USD 0.34

A daily monitor for a typical profile costs a few US dollars per month at most. You pay only for matches.

Use with AI agents (MCP)

The input schema is written so that an LLM can call the Actor without guessing: plain-English descriptions, enums, defaults and examples. Add it to the Apify MCP server in Claude Desktop, Cursor, VS Code or any other MCP client:

{
"mcpServers": {
"apify": {
"url": "https://mcp.apify.com?tools=actors,lindenwerk/sam-gov-contract-matcher"
}
}
}

Then ask, for example: "Find open SDVOSB set-aside solicitations for janitorial services in Texas posted in the last two weeks, due in at least 7 days, and list the five best matches." The agent maps this to mode: search, naicsCodes: ["561720"], keywords: ["janitorial", "custodial"], setAsides: ["sdvosb"], states: ["TX"], postedWithinDays: 14, minDaysUntilDeadline: 7 and can quote matchReasons to explain each result.

You can also call the Actor through the Apify API (POST https://api.apify.com/v2/acts/lindenwerk~sam-gov-contract-matcher/run-sync-get-dataset-items), the Python or JavaScript clients, or connect it to Make, Zapier, n8n, Google Sheets or Slack through Apify integrations.

Data source, terms and attribution

  • Source: SAM.gov, U.S. General Services Administration (GSA), Data Services, extract "Contract Opportunities / datagov" (privacy=Public), https://sam.gov/data-services. GSA publishes it as a daily electronic download "in order to promote data sharing". The Actor downloads one public file per run (often only its first few MB), honours the file's ETag and never touches the SAM.gov website, its internal search API or any login. No scraping, no proxies.
  • SAM.gov's terms of use point to the public extracts and APIs for downloading data. Works of federal employees are in the public domain in the U.S.; SAM.gov asks for a citation and a link back, so every row links to its public SAM.gov notice page and carries source. Data: SAM.gov, U.S. General Services Administration.
  • Dun & Bradstreet restriction: award notices with an award date before 4 April 2022 may contain D&B data that must not be used commercially. For these rows awardee is left empty and matchReasons says why.
  • The extract is rebuilt once a day (extractUpdatedAt) and contains active notices only, so the newest notices can be about one day old. With your own SAM.gov public API key (samApiKey, generated in your SAM.gov account under Account Details) the Actor also fetches notices posted since the file was built (at most 2 API requests per run). Your key is stored encrypted by Apify, used only inside your run and never logged or output. SAM.gov's terms say you must not share your key with others.
  • This is an independent tool, not an official GSA or SAM.gov service. Always read the original notice and its attachments on SAM.gov before you bid. The official notice prevails.

Privacy and responsible use

SAM.gov notices name contracting officers and specialists (name, e-mail, phone) in contact columns and, very often, again in the description. This Actor:

  • never outputs the contact columns;
  • removes personal e-mail addresses, all phone and fax numbers, and contact names from titles and descriptions (replaced by [email removed], [phone removed], [name removed]);
  • keeps functional mailboxes such as contracting@ or ...solicitationinbox@ because bidders need them;
  • outputs awardees as company names only, without address.

In our checks on 5 Oct 2026 (about 14,000 output rows, including all 13,811 active award notices) no personal e-mail address and no phone number remained, and all 808 awards dated before 4 April 2022 had awardee withheld. Use the output to find and bid on contracts, not for contact harvesting.

Limits

  • The extract lags about one day and drops archived notices. For older history use postedWithinDays: 0 (all active notices) or a SAM.gov archive.
  • Attachments (RFP PDFs) are not downloaded. Open noticeUrl for documents and Q&A.
  • API rows (only with samApiKey) have no description, so keywords match their titles only.
  • Scores are rule-based and depend on the words in each posting window, so a borderline row can score a point or two differently between runs. Monitor mode delivers it once it reaches minScore.

FAQ

How is relevanceScore calculated? Code evidence (exact NAICS 0.50, NAICS prefix 0.45, PSC prefix 0.35) and keyword evidence (title hits weigh about three times description hits, rare words weigh more) are combined as 100 × (1 − (1 − codes) × (1 − keywords)). With NAICS codes and keywords in the profile: NAICS only = 50, one title keyword only = 46, NAICS + one title keyword = 73, NAICS + two title keywords = 85 or more. A NAICS-only profile scores 100 for an exact code. matchReasons lists every contribution and every filter passed.

What does "one row per solicitation" mean? SAM.gov posts a new notice for every amendment and stage (presolicitation, solicitation, amendment 1, 2, ...). In the active extract about 8,900 solicitation numbers have two or more versions. The Actor returns the newest version once and lists the older notice ids in relatedNoticeIds; versionCount says how many versions it saw.

How does monitor mode work? Each stateKey (default: profileName) keeps an "already seen" list in the named key-value store sam-gov-matcher-state for 180 days. A solicitation is returned once as new; if SAM.gov posts a newer version later it comes back as updated (switch off with includeUpdates: false). If no new file was published since the last run, the run ends without downloading anything.

What does a run with no matches cost? Only the Actor start event (USD 0.00005).

Do I need a SAM.gov account or API key? No. The key is optional and only adds same-day notices.

Can I monitor several profiles? Yes. Create one saved task per profile, each with its own profileName or stateKey.

Other countries? See our German & EU Tenders Monitor (Germany and any EU country via TED) and France Tenders Monitor (BOAMP + TED).

Examples

Other Lindenwerk Data Actors


Made by Lindenwerk Data. Data: SAM.gov, U.S. General Services Administration.