SAM.gov Contract Opportunities: Daily RFP Alerts, No API Key avatar

SAM.gov Contract Opportunities: Daily RFP Alerts, No API Key

Pricing

from $1.50 / 1,000 contract opportunities

Go to Apify Store
SAM.gov Contract Opportunities: Daily RFP Alerts, No API Key

SAM.gov Contract Opportunities: Daily RFP Alerts, No API Key

Get new federal contract opportunities from SAM.gov as Excel, no API key and no coding: filter by NAICS, set-aside (8(a), WOSB, SDVOSB, HUBZone), notice type, state and keywords. Schedule it daily for government RFP alerts.

Pricing

from $1.50 / 1,000 contract opportunities

Rating

0.0

(0)

Developer

Alpine Data Labs

Alpine Data Labs

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Share

SAM.gov Contract Opportunities: daily RFP alerts and Excel export (no API key)

Get new federal contract opportunities from SAM.gov (solicitations, RFPs, RFQs, sources sought, presolicitations and award notices) as Excel, CSV or JSON. Filter by NAICS code, set-aside (8(a), WOSB, SDVOSB, HUBZone, small business), notice type, state and keywords. You don't need a SAM.gov API key, a login or any coding. Pick your industry, click Start, download. It reads the official SAM.gov public data file, so it does not run into the 10-requests-a-day API limit.

How to use it (no code)

  1. Fill in the form: pick your industry (NAICS code), e.g. 54 – Professional, scientific and technical services or 5415 – IT services. If you like, also pick a set-aside (e.g. 8(a) or SDVOSB) and states. The form already has a working example filled in.
  2. Click Start. A typical run takes 2–10 seconds.
  3. Download: open the Output tab and click Export to download Excel, CSV or JSON.
  4. Optional: get a daily alert. Switch on Only new opportunities since my last run, click Save as a new task, then Schedule (see below).

You never need to write JSON or code: every option is a dropdown, list field or checkbox in the form.

What you get from each federal contract opportunity

SAM.gov contract opportunities example output: federal RFPs with agency, NAICS, deadline and set-aside

PostedDeadlineDays leftTitleTypeAgencyNAICSSet-asideStateLink
2026-10-222026-11-1119SILVAH software codingSources SoughtForest Service541511Small Business Set Aside - TotalWVopen
2026-10-212026-10-307ePMO Support ServicesSources SoughtDept of the Army5416118(a) Set-Aside (FAR 19.8)VAopen
2026-10-212026-10-307Draft RFP for DRPM RAS ME RAS 1.0 and MCM RAS 2.0 Professional SupportPresolicitationDept of the Navy541330Small Business Set Aside - Total–open

(Real rows from a test run on 23 Oct 2026 with the pre-filled example.) Every row also has the solicitation number, department, sub-tier and office, PSC code, place of performance (city, state, ZIP, country), office location, the response deadline with time zone, archive date, a 400-character description snippet and award details (awardee, amount, date) for award notices. See the All details view. The official point of contact and the full description are optional extras.

Daily RFP alert: schedule it

Schedule it daily: click Schedule (or Saved tasks → Schedule), run it every morning at 08:00 with Posted in the last 3 days and Only new opportunities since my last run switched on. Each run then returns only opportunities you have not received before, which gives you a government bid alert without a subscription. Under Integrations you can send the results to email, Slack, Google Sheets, Zapier or Make.

SAM.gov refreshes its public data file once a day (early morning U.S. Eastern time), so one run a day is enough.

Typical uses

  • Daily bid alert for your NAICS codes, e.g. IT services (5415) set aside for SDVOSB firms in Virginia and Maryland
  • Bid/no-bid pipeline: send new solicitations with deadlines to Google Sheets, a CRM, Slack, n8n, Make or Zapier
  • Proposal writers and bid consultants: one alert per client, each with its own NAICS codes and set-asides
  • Market research: switch on Award Notice to see who won which federal contract and for how much

Input fields in plain words

SAM.gov contract opportunities input form: keywords, NAICS codes and notice types

FieldWhat it doesExample
1. Which industry? (NAICS code)A short code includes all longer codes (54 = all professional services). You can type any 2–6 digit code or a word such as janitorial or cybersecurity. Leave it empty for all industries.54, 5415, 236220
2. Posted in the last … daysHow far back to look by posting date. Default and form value: 3 days. Choose All active notices for everything still open on SAM.gov. You can type a whole number from 1 to 3650 (e.g. 45). Text (e.g. abc), 0 or a negative number stops the run with a message and nothing is charged.3
3. Set-aside typeOnly notices reserved for a small-business program. Leave it empty for everything.8(a), SDVOSB
4. Notice typesDefault: notices you can still respond to (Solicitation, Combined Synopsis/Solicitation, Presolicitation, Sources Sought). Add Award Notice to see winners.Solicitation
5. Place of performance: stateWhere the work is done. Virginia and VA both work.VA, MD, DC
6. KeywordsKeeps notices whose title or description mentions any of these words. cloud* matches cloud and clouds.cybersecurity, HVAC
Max opportunities (cost limit)The run stops here, so you never pay more than you expect.100 (max. $0.19)
Only new opportunities since my last runFor daily alerts: skips notices you already received. Skipped notices are free.on
More filters: AgencyDepartment or agency. Short forms work: VA, GSA, Army, NASA, DLA, Forest Service.VA
More filters: Minimum days leftDrops notices whose response deadline is sooner. 0 drops deadlines that have already passed. Days are counted in U.S. Eastern time, like the posting-date window.7
More filters: Exclude keywordsDrops notices that mention these words.brand name
More filters: PSC codeProduct/service code prefix.D3, R4
More filters: Posted fromAn exact start date instead of "last … days".2026-10-01
Output: Contact / full descriptionAdds the official point of contact or the full notice text. Both are off by default.on

Pricing

Pay per result:

  • $0.0019 per opportunity returned, which is $1.90 per 1,000 opportunities ($0.0017 on the Apify Scale plan, $0.0015 on Business and higher)
  • plus $0.002 per run (the fee for downloading and reading the roughly 200 MB SAM.gov file)

There is no monthly fee. Worked example: a daily alert that returns 25 new opportunities costs 25 × $0.0019 + $0.002 = $0.0495 per day, about $1.50 a month. The pre-filled example (max 100 opportunities) costs at most $0.192.

What is free: notices removed by your filters, notices skipped by Only new, and runs that fail. If the input is invalid or the SAM.gov file cannot be downloaded, the run stops and nothing is charged. A valid run that finds 0 new opportunities costs only the $0.002 run fee. Platform usage is included in the price.

These are launch prices. If they change, Apify tells existing users in advance, as its rules require.

FAQ and common mistakes

Do I need a SAM.gov API key or account? No. The Actor reads the official public Contract Opportunities data file that SAM.gov publishes every day for everyone. The SAM.gov API allows non-federal users only about 10 requests a day; this Actor does not use it, so that limit does not apply.

How do I find government contracts for small businesses? Pick your NAICS code and choose Small business set-aside (or 8(a), WOSB, SDVOSB, HUBZone) under Set-aside type. Choose Any set-aside to get every notice reserved for small businesses.

Which NAICS code do I need? Use the one from your SAM.gov registration. If you are not sure, pick a short code from the dropdown: 2 digits is a whole sector (23 = construction), 4 digits a group (5415 = IT services). Words such as janitorial, construction or cybersecurity also work.

How do I get daily government bid alerts? Turn on Only new opportunities since my last run, set Posted in the last … days to 3 and add a daily Schedule. Each different search keeps its own memory, so you can run several alerts side by side.

Is this the same as SAM.gov saved searches? It covers the same notices, but the result is a clean table you can filter in Excel, send to Google Sheets or a CRM, or feed into Zapier/Make. Nothing gets lost in a cluttered email.

I got 0 results. What now? Your filters are too narrow. Try more days (e.g. 14), a 2-digit NAICS sector, fewer keywords, more notice types or no state. Remember that many notices leave the place of performance empty (see Limits).

I typed "Virginia", "8a" or "RFP". Is that OK? Yes. State names and codes, set-aside short forms (8a, SDVOSB, WOSB, HUBZone) and words like RFP, RFQ or RFI are understood. Input that cannot be understood stops the run with a plain-English message, before anything is charged.

Are attachments (SOW, PWS) included? No. The public file has no attachments. Each row links to the notice on SAM.gov, where you can download them.

How fresh is the data? SAM.gov refreshes the file once a day. Notices posted today usually show up the next morning. For same-hour alerts you would need SAM.gov's own API.

Can I get federal contract award data? Yes, for award notices posted on SAM.gov: add Award Notice under Notice types and use the Awards view (awardee, amount, date). For complete spending history, USAspending.gov is the official source.

Limits

  • One update a day: the data is as fresh as the SAM.gov public file (refreshed daily, early morning U.S. Eastern time).
  • The file contains active notices only. Archived and cancelled notices are not in it.
  • Many notices leave the place of performance empty. With the state filter on, the Actor then uses the contracting office's state; you can switch that off under More filters.
  • No attachments, and no state or local (SLED) bids. Federal opportunities only.
  • The description is cut at 32,000 characters, the Excel cell limit.
  • The data is only as good as what agencies publish: deadlines, NAICS codes and set-asides are sometimes missing or wrong.

This Actor uses the official SAM.gov Contract Opportunities public data extract, published by the U.S. General Services Administration for public download (sam.gov/data-services). It does not scrape the SAM.gov website and does not log in. It only uses public U.S. government data, and every row carries a source attribution. Contact details are the official government points of contact published on each notice. They are off by default and should only be used to ask about that procurement. SAM.gov is a U.S. government system. This Actor is not affiliated with, endorsed by, or connected to GSA or SAM.gov. Trademarks belong to their owners.

Support

Found a bug, or need a field or another filter? Open an issue in the Issues tab of this Actor page. Alpine Data Labs answers there, usually within one working day.

Built and maintained by Alpine Data Labs.

For developers / API & integrations

Everything in the form is also available through the API, so the Actor fits into your own workflows, websites and scripts. The input field names, their formats and the output fields are stable: inputs that worked before keep working.

Minimal JSON input (all other fields use the form defaults):

{
"naicsCodes": [
"5415"
],
"maxItems": 10
}

Full example input:

{
"naicsCodes": ["5415", "541330"],
"postedWithinDays": "3",
"setAside": ["sdvosb", "8a"],
"noticeTypes": ["solicitation", "combined", "sources_sought"],
"states": ["VA", "MD", "DC"],
"keywords": ["cybersecurity", "cloud*"],
"maxItems": 200,
"onlyNew": true
}

cURL (runs the Actor and returns the dataset rows as JSON):

curl -X POST "https://api.apify.com/v2/acts/alpine-data~sam-gov-contract-opportunities/run-sync-get-dataset-items" \
-H "Authorization: Bearer <YOUR_APIFY_TOKEN>" \
-H "Content-Type: application/json" \
-d '{"naicsCodes": ["5415"], "maxItems": 10}'

JavaScript (npm install apify-client):

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });
const run = await client.actor('alpine-data/sam-gov-contract-opportunities').call({"naicsCodes": ["5415"], "maxItems": 10});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

Python (pip install apify-client):

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("alpine-data/sam-gov-contract-opportunities").call(run_input={"naicsCodes": ["5415"], "maxItems": 10})
items = client.dataset(run["defaultDatasetId"]).list_items().items
print(items)

Example output row:

{
"noticeId": "4924a9998b8444c3ace265513047df72",
"title": "SILVAH software coding",
"solicitationNumber": "12760426Q0195",
"noticeType": "Sources Sought",
"postedDate": "2026-10-22",
"responseDeadline": "2026-11-11",
"responseDeadlineFull": "2026-11-11T15:00:00-05:00",
"daysUntilDeadline": 19,
"department": "AGRICULTURE, DEPARTMENT OF",
"subTier": "FOREST SERVICE",
"office": "USDA FOREST SERVICE",
"naicsCode": "541511",
"naicsSector": "Professional, Scientific, and Technical Services",
"pscCode": "DA01",
"setAside": "Small Business Set Aside - Total",
"setAsideCode": "SBA",
"placeOfPerformance": "Parsons, WV, USA",
"awardAmount": null,
"descriptionSnippet": "The United States Department of Agriculture (USDA) Forest Service (FS) is conducting market research to identify capable sources to repair SILVAH version 8 in C++ code …",
"samUrl": "https://sam.gov/opp/4924a9998b8444c3ace265513047df72/view"
}

The input is forgiving: "states": ["Virginia", "md"], "setAside": "8(a), WOSB", "naicsCodes": "541511 - Custom Computer Programming", "noticeTypes": ["RFP", "RFI"] or "days": 7 work as well. Output field names (noticeId, title, responseDeadline, samUrl, …) do not change between versions.

Input field names (API) and accepted alternatives:

Form fieldAPI fieldAlso accepted
Which industry? (NAICS)naicsCodesnaics, naicsCode, naicsSectors, industry, sector; codes or words like "janitorial"
Posted in the last … dayspostedWithinDays (string, e.g. "3", or "all"; default "3"; 1–3650; text, 0 or negative fail with $0)days, daysBack, postedLastDays, lastDays; numbers work
Set-aside typesetAsidesetAsides, setAsideTypes, setAsideType, set_aside; "8a", "SDVOSB", "WOSB"
Notice typesnoticeTypesnoticeType, types, type; "RFP", "RFQ", "RFI"
Place of performance: statestatesstate, placeOfPerformance, popStates; codes or names
Keywords / exclude keywordskeywords, excludeKeywordskeyword, query, search, searchTerms, q / excludeKeyword, exclude
Max opportunitiesmaxItemsmaxResults, limit, max, maxRecords, count, maxOpportunities
Only new since my last runonlyNew–
Alert namestateKeymonitorName, alertName
Agencyagenciesagency, departments
Minimum days leftminDaysUntilDeadlineminDaysLeft
PSC codepscCodespsc, pscCode
Posted frompostedFromfrom, dateFrom
Contact / full descriptionincludeContacts, includeFullDescriptioncontacts, fullDescription

Integrations:

  • Schedules: save your input as a Task and add a Schedule (Apify Console → Schedules). Every scheduled run uses the same input.
  • Webhooks: under Integrations → Webhooks, call your URL on "Run succeeded" and fetch the rows from https://api.apify.com/v2/datasets/<datasetId>/items?format=json (or format=xlsx / csv).
  • Make, Zapier, n8n: use the Apify app/node, "Run Actor" or "Run task", then "Get dataset items". Google Sheets, Slack and email integrations are available in the Integrations tab without any code.
  • Apify MCP: AI agents can call this Actor through the Apify MCP server (mcp.apify.com) as the tool alpine-data/sam-gov-contract-opportunities.

Do not put your API token into public code or web pages. Keep it on your server or in the integration's credentials.