US Government RFP Monitor - SAM.gov + State Portals
Pricing
from $1.60 / 1,000 baseline results
US Government RFP Monitor - SAM.gov + State Portals
Get alerted to every new US government RFP that matches your business. Monitors SAM.gov (official API) plus the Virginia, Texas and Florida portals; filters by keywords, NAICS/PSC, agency and set-aside; alerts only on never-seen opportunities. Clean output, no officer contact data.
Pricing
from $1.60 / 1,000 baseline results
Rating
0.0
(0)
Developer
Lowland Data
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
0
Monthly active users
10 hours ago
Last modified
Categories
Share
US Government RFP Monitor — SAM.gov + State Portals
Get every new government RFP that matches your business — and only the new ones. This actor watches SAM.gov (all US federal opportunities) plus the Virginia, Texas and Florida state procurement portals, matches each notice against your profile (keywords, NAICS/PSC codes, agencies, set-asides, states), and pushes an alert item for every opportunity it has never shown you before. Schedule it daily and plug the dataset into email, Slack or your CRM — bid discovery on autopilot.
Quick start (30 seconds, no account keys needed)
- Put a few words describing what you sell into keywords — e.g.
cybersecurity. - Click Start. The first run shows everything currently open that matches (your baseline) from the three state portals — no API key needed for those.
- Add your free SAM.gov API key (walkthrough below) to include all US federal opportunities, and create a daily Schedule so new matches come to you.
Who uses this
- GovCon business developers monitoring "cybersecurity" + NAICS 541512 across DoD: a daily run surfaces the three new solicitations that matter instead of the ~1,700 notices the government posts every day.
- Proposal teams that keep losing recompetes to faster movers: alert on
sources-soughtandpresolicitationstages to engage before the RFP drops, when the requirements are still shapeable. - B2G consultants running pipelines for several clients: one scheduled task per client profile, each with its own memory — no overlap, no missed notices, no copy-pasting from five portal tabs every morning.
- Small businesses with a set-aside advantage: filter on "8(a)", "WOSB" or "SDVOSB" and see only the opportunities reserved for you.
- Market analysts tracking who wins: switch
noticeTypestoawardand collect award amounts and winning companies per agency.
What you get
One JSON object per matching opportunity:
{"source": "sam.gov","sourceId": "ab12cd34ef56ab12cd34ef56ab12cd34","title": "Cybersecurity Assessment Services for Regional Offices","solicitationNumber": "W912DY-26-R-0042","agency": "DEPT OF DEFENSE.DEPT OF THE ARMY.AMC.ACC.ACC-RSA","noticeType": "solicitation","naicsCode": "541512","pscCode": "D310","setAside": "Total Small Business Set-Aside (FAR 19.5)","postedDate": "2026-07-15","responseDeadline": "2026-08-15T16:00:00-05:00","state": "AL","city": "Huntsville","url": "https://sam.gov/opp/ab12cd34ef56ab12cd34ef56ab12cd34/view","isBaseline": false,"isUpdate": false}
How much does RFP monitoring cost?
Pay per event — you pay for alerts, not for runs that find nothing:
- New matching opportunity (the alert): $0.02 — also for amendment alerts.
- Baseline item (first run only): $0.002.
- Actor start: $0.005. Everything included - there are no separate platform-usage charges, and higher Apify plans get automatic unit-price discounts.
Cost feel: a focused federal profile (one NAICS family) surfaces ~10–30 new opportunities/day → roughly $6–18/month for complete, deduplicated coverage of your niche — with the one-time baseline (say 300 items) costing about $0.60. A run with zero new matches costs $0.005 all-in.
Why an alert costs more than a scraped row
The store's headline ("from $2.00 / 1,000 baseline results") is what a trial costs: a one-time 300-item baseline ≈ $0.60. Apify displays every event per 1,000, so in the pricing table the alert event reads "$20.00 / 1,000" next to raw scrapers at $2–3 per 1,000 records — but that comparison is between two different things:
- A raw scraper sells rows. To monitor with one, you re-download the federal feed every day (~1,700 notices/day), then dedupe and match it yourself: ~50,000 records/month ≈ $150/month in scraping fees before you have written a single line of your own filtering code.
- This monitor sells outcomes: it remembers what you have seen, matches your profile, and charges only for the handful of new opportunities that concern you — the $6–18/month above for the same end result.
You never buy 1,000 alerts at once; nobody's pipeline produces that. The
per-1,000 figure is a display convention, not a bill you will meet. The one
setup that does get expensive is a profile with no filters at all — the
entire federal firehose is 500+ matches/day ($10+/day). If that's genuinely
what you want, set maxItems and your run's maximum cost accordingly;
otherwise add keywords or codes and let the monitor do its job: fewer, better
alerts.
The SAM.gov API key (free; ~10 minutes the first time)
SAM.gov — the official portal for all US federal contract opportunities — gives every user a personal, free API key for its public data API. This actor uses the official API (not website scraping), which SAM.gov's terms require, and the same terms forbid sharing keys — so the actor can't ship with one built in. Each user brings their own:
- Go to sam.gov → Sign In. Accounts run through login.gov, and first-time signup is a real government onboarding: an email confirmation link, a password, a second factor (authenticator app, security key or backup codes), and a couple of confirmation screens bouncing you between login.gov and SAM.gov. Budget ~10 minutes once; no business registration is needed.
- Signed in on sam.gov (not on login.gov — that site only handles the sign-in), open your profile icon (top right) → Account Details (sam.gov/profile/details).
- In the Public API Key section, re-enter your password — the key appears
(it starts with
SAM-). Copy it into the actor'ssamApiKeyinput. It's stored encrypted and never shown in logs. - The key is valid for 90 days. SAM.gov emails you before it expires; renewing is the same page — copy the fresh key into the actor input.
Your key allows 10 API requests/day (SAM.gov's limit for standard accounts).
A typical monitor run uses 1–3 requests, so a daily schedule fits comfortably.
Users with a SAM.gov role (e.g. an entity registration) get 1,000/day. The three
state portals need no key at all — without samApiKey the actor simply monitors
those and reminds you that federal coverage is off.
Not technical? Let your AI assistant set it up
Copy the block below into ChatGPT, Claude, or any AI assistant, add one line about what your company sells, and follow the conversation — it will produce your exact input settings and walk you through the two accounts you need.
Help me set up the "US Government RFP Monitor" actor on Apify(https://apify.com/lowlanddata/us-rfp-monitor). Walk me through it one step ata time, asking me questions where needed.What my company sells / the contracts I want to find: [DESCRIBE IT HERE]Steps to guide me through:1. Ask me about my business, then propose: keywords (matched against noticetitles, descriptions and commodity-code labels), NAICS codes (my industry,2-6 digits), and optionally PSC codes, agencies, set-aside types (like"small business", "8(a)", "WOSB"), and US states.2. Tell me to create a free account at https://sam.gov (sign-in goes throughlogin.gov: expect an email confirmation link, a password, a one-time-codesecond factor, and a few confirmation screens - about 10 minutes). Then, backon sam.gov: profile icon > "Account Details" > re-enter my password > copythe "Public API Key" (starts with SAM-). It is free, it is not a paymentmethod, I should keep it private, and it is valid for 90 days (sam.govemails me before it expires; renewing is copying the fresh key from thesame page).3. Tell me to create an Apify account at https://apify.com if I don't have one.4. Give me the final input as a filled-in list matching the actor's input form:keywords, naicsCodes, samApiKey (I paste my key there), and leave the otherfields on their defaults. Explain that the first run shows everythingcurrently open that matches (the "baseline"), and every run after that onlyalerts on new opportunities.5. Tell me how to create a daily Schedule for the actor in the Apify Console(Schedules > Create new > pick this actor, paste the input), and how to addan email or Slack notification integration on the actor's runs so alertsreach me automatically.6. Warn me: the SAM.gov key allows 10 API calls per day, so one or twoscheduled runs per day is the right cadence; the key expires every 90 daysand sam.gov emails me before that - I just copy the fresh key into theactor input.
How the monitor works
- First run (baseline): the actor fetches everything currently matching your
profile, pushes it flagged
isBaseline: true(so you start with today's full picture), and memorizes what it saw. Baseline items are charged at a fraction of the alert price. Prefer to start silent? SetemitBaseline: false. - Every following run: only opportunities the monitor has never seen before are pushed — that is the alert you pay for. Re-running twice a day never duplicates an alert; deleted or re-fetched runs never replay old notices.
- Amendments: with
alertOn: "new-and-updated"you also get one item (flaggedisUpdate: true) when a seen opportunity changes — deadline moves, addenda, reposts. - Changing your profile (keywords, codes, agencies…) starts a fresh baseline
for the new profile. Cosmetic settings (
maxItems,emitBaseline) don't. - Memory lives in a named key-value store (
rfp-monitor-state) in your Apify account, one record per profile.resetState: truewipes the current profile's memory and re-baselines.
Sources and honest coverage notes
| Source | Coverage | Codes | Description text | Key needed |
|---|---|---|---|---|
| SAM.gov | All US federal opportunities | NAICS + PSC | Linked (on sam.gov) | Your free key |
| Virginia eVA | State of Virginia | Commodity codes | Full text included | No |
| Texas ESBD | State of Texas | NIGP with labels | Linked (on txsmartbuy.gov) | No |
| Florida MFMP | State of Florida | — | Linked (on the portal) | No |
- "New" means new to your profile's monitor state, not "posted today". The first run baselines; later runs alert on anything matching that appears — including notices you'd have missed while the actor wasn't running.
- NAICS/PSC filters apply to SAM.gov records. State portals classify with
NIGP/commodity codes instead, so when you set
naicsCodes/pscCodes, records without those codes (all state-portal records) are excluded. For cross-source profiles usekeywords— they match titles, descriptions and the plain- English commodity-code labels (e.g. "roofing" hits NIGP 91066). - Keyword matching runs on what the list APIs return: full descriptions for Virginia, title + code labels for the others. A keyword hiding only deep in a SAM.gov description PDF won't match — pair keywords with codes for recall.
- More states are on the roadmap; the four sources above are what you get today.
Input reference
| Field | What it does | Default |
|---|---|---|
keywords | Any-of match on title/description/code labels | [] (match all) |
samApiKey | Your SAM.gov key (see above) | — |
sources | Which of the 4 sources to monitor | all |
naicsCodes | NAICS prefix match, e.g. 5415 matches 541511 (SAM.gov) | [] |
pscCodes | PSC exact match (SAM.gov) | [] |
agencies | Substring match on the buying organization | [] |
setAsides | Substring match on the set-aside label | [] |
noticeTypes | Notice stages to alert on | pre-award stages |
states | Two-letter codes; gates portals + SAM place of performance | [] (all) |
lookbackDays | SAM.gov fetch window per run; keep ≥ run cadence | 3 |
alertOn | new or new-and-updated | new |
emitBaseline | Push the current open set on the first run | true |
resetState | One-shot: wipe this profile's memory, re-baseline | false |
maxItems | Per-run push cap; overflow alerts next run | 500 |
stateStoreName | Key-value store holding monitor memory | rfp-monitor-state |
Scheduling (the intended way to run this)
Create an Apify Schedule that runs the actor daily (e.g. 7:00 AM ET, after the previous day's federal notices have settled) with your profile as the input. Then wire the alerts wherever you work:
- Email/Slack: add an Apify integration or webhook on run succeeded; the run status message always says how many new matches were pushed.
- CRM/pipeline import: read the dataset via the API (below) — the output is flat, stable and safe to store (see compliance).
- Two or three profiles? Create one saved task per profile, each on its own schedule. Their memories never interfere.
Use it from your code
curl -s "https://api.apify.com/v2/acts/lowlanddata~us-rfp-monitor/run-sync-get-dataset-items?token=$APIFY_TOKEN" \-X POST -H 'Content-Type: application/json' \-d '{"keywords": ["janitorial"], "sources": ["virginia-eva", "texas-esbd", "florida-mfmp"], "maxItems": 50}'
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('lowlanddata/us-rfp-monitor').call({keywords: ['cybersecurity', 'zero trust'],naicsCodes: ['541512'],samApiKey: process.env.SAM_API_KEY,});const { items } = await client.dataset(run.defaultDatasetId).listItems();
from apify_client import ApifyClientclient = ApifyClient(os.environ["APIFY_TOKEN"])run = client.actor("lowlanddata/us-rfp-monitor").call(run_input={"keywords": ["roofing", "waterproofing"],"states": ["TX", "FL"],})items = client.dataset(run["defaultDatasetId"]).list_items().items
Note for agent/sync use: run-sync-get-dataset-items waits up to 5 minutes. A
multi-source run typically finishes in 1–3 minutes; keep maxItems bounded.
Use it with AI agents (MCP)
Claude, Cursor and other MCP-capable agents can run this monitor as a tool through Apify's hosted MCP server: the agent sets the profile, starts the run and reads the new opportunities — no glue code.
Claude Code:
$claude mcp add apify --transport http "https://mcp.apify.com?actors=lowlanddata/us-rfp-monitor"
Cursor or Claude Desktop (add a custom connector / MCP server with this URL):
https://mcp.apify.com?actors=lowlanddata/us-rfp-monitor
Sign in with your Apify account when prompted — runs are billed to it. Setup details per client: Apify MCP docs, or start from this actor's own MCP page: apify.com/lowlanddata/us-rfp-monitor/api/mcp.
Prompts that work once connected:
- "Check the state portals for new janitorial RFPs matching my profile and summarize deadlines."
- "Run my cybersecurity RFP watch and draft a go/no-go note for each new opportunity."
- "List every new Texas solicitation with NIGP codes related to roofing, sorted by close date."
Is it legal to monitor SAM.gov and state portals?
Yes — and this actor takes the sanctioned route on purpose. SAM.gov is accessed through its official Get Opportunities API with your own free key (scraping the SAM.gov website is prohibited by its terms — several competing tools do it anyway; this one does not). The three state portals are open public-procurement systems whose data exists precisely to be found by vendors. Government procurement data is public information about organizations; the personal-data question is answered structurally — see the compliance section below.
Compliance: safe to store, safe to CRM-import
- Zero personal data in the output fields — by architecture, not by promise. Every field is whitelisted; the contracting-officer and buyer contact fields (names, emails, phone numbers) present in the raw sources are structurally unreachable and covered by an automated test. You can store, share and import the dataset without GDPR headaches. (Data about organizations — agencies, awardee companies — is not personal data.)
- Honest limit: the guarantee covers data fields. Text the publishing agency writes itself (title, description) is delivered as-is — occasionally an agency types a contact into its own description, exactly as it appears on the public notice.
- Officially sanctioned access. SAM.gov is queried exclusively through its documented public API with your own key, as its terms require — never by scraping the website. State portals are queried through the same public, login-free endpoints their own search pages use, at a respectful pace.
- Government procurement notices are public records published to reach vendors; this actor changes the delivery, not the audience.
Troubleshooting
| Run status says | What it means / what to do |
|---|---|
SAM.gov is the only selected source but samApiKey is missing | Add your free key (see the API-key section) or select a state portal source. |
SAM.gov skipped: add your free samApiKey | The run worked, but only state portals were monitored. Add the key for federal coverage. |
SAM.gov rate limit reached | Your key's 10 requests/day are spent. Run once daily, reduce naicsCodes, or lower lookbackDays. Resets daily. |
SAM.gov rejected the API key | Key typo or expired key — SAM.gov keys rotate every 90 days; copy a fresh one from Account Details. |
Monitor state record ... is not readable | State written by a newer actor version. Run once with resetState: true. |
... returned an unexpected response shape | A portal changed its markup/API. The actor fails loudly rather than alerting nothing — check for an updated actor version. |
SAM.gov coverage truncated by the per-run request budget | Your profile needs more than 8 API calls per run. Split it into multiple scheduled tasks or reduce codes. |
N more matched but hit the maxItems cap | Nothing is lost — they alert on the next run. Raise maxItems for bigger batches. |
FAQ
Do I need a SAM.gov account? Only for the federal source — a free account and API key (~10 minutes, walkthrough above). The three state portals work with zero setup, so you can evaluate the monitor before touching SAM.gov.
Why did my second run return nothing? Because nothing new matched — that is the product working. You pay $0.005 for the run instead of re-buying yesterday's opportunities. Check the run status line: it says how many were seen and skipped.
Can I watch multiple profiles? Yes — one Schedule per profile. Each profile keeps its own memory, so a cybersecurity watch and a janitorial watch never cross-alert.
Does it include contracting-officer contact details? No — by design. Officer names, emails and phones are structurally excluded, which is what makes the output safe to store and CRM-import without review.
What happens if a state portal goes down? The run says so loudly and continues with the other sources; the portal's notices alert automatically once it recovers. You never silently miss a window.
Can I export to Excel or my CRM? Yes — CSV, Excel, JSON or XML from the Console or API, and the flat, stable field names import cleanly.
Support
Questions, another state portal you need, or a field you're missing? Open an issue on the actor's page — reports land directly with the maintainer.