US Government RFP Monitor - SAM.gov + State Portals avatar

US Government RFP Monitor - SAM.gov + State Portals

Pricing

from $1.60 / 1,000 baseline results

Go to Apify Store
US Government RFP Monitor - SAM.gov + State Portals

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

Lowland Data

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

0

Monthly active users

10 hours ago

Last modified

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)

  1. Put a few words describing what you sell into keywords — e.g. cybersecurity.
  2. Click Start. The first run shows everything currently open that matches (your baseline) from the three state portals — no API key needed for those.
  3. 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-sought and presolicitation stages 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 noticeTypes to award and 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:

  1. Go to sam.govSign 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.
  2. 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).
  3. In the Public API Key section, re-enter your password — the key appears (it starts with SAM-). Copy it into the actor's samApiKey input. It's stored encrypted and never shown in logs.
  4. 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 at
a 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 notice
titles, 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 through
login.gov: expect an email confirmation link, a password, a one-time-code
second factor, and a few confirmation screens - about 10 minutes). Then, back
on sam.gov: profile icon > "Account Details" > re-enter my password > copy
the "Public API Key" (starts with SAM-). It is free, it is not a payment
method, I should keep it private, and it is valid for 90 days (sam.gov
emails me before it expires; renewing is copying the fresh key from the
same 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 other
fields on their defaults. Explain that the first run shows everything
currently open that matches (the "baseline"), and every run after that only
alerts 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 add
an email or Slack notification integration on the actor's runs so alerts
reach me automatically.
6. Warn me: the SAM.gov key allows 10 API calls per day, so one or two
scheduled runs per day is the right cadence; the key expires every 90 days
and sam.gov emails me before that - I just copy the fresh key into the
actor 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? Set emitBaseline: 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 (flagged isUpdate: 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: true wipes the current profile's memory and re-baselines.

Sources and honest coverage notes

SourceCoverageCodesDescription textKey needed
SAM.govAll US federal opportunitiesNAICS + PSCLinked (on sam.gov)Your free key
Virginia eVAState of VirginiaCommodity codesFull text includedNo
Texas ESBDState of TexasNIGP with labelsLinked (on txsmartbuy.gov)No
Florida MFMPState of FloridaLinked (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 use keywords — 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

FieldWhat it doesDefault
keywordsAny-of match on title/description/code labels[] (match all)
samApiKeyYour SAM.gov key (see above)
sourcesWhich of the 4 sources to monitorall
naicsCodesNAICS prefix match, e.g. 5415 matches 541511 (SAM.gov)[]
pscCodesPSC exact match (SAM.gov)[]
agenciesSubstring match on the buying organization[]
setAsidesSubstring match on the set-aside label[]
noticeTypesNotice stages to alert onpre-award stages
statesTwo-letter codes; gates portals + SAM place of performance[] (all)
lookbackDaysSAM.gov fetch window per run; keep ≥ run cadence3
alertOnnew or new-and-updatednew
emitBaselinePush the current open set on the first runtrue
resetStateOne-shot: wipe this profile's memory, re-baselinefalse
maxItemsPer-run push cap; overflow alerts next run500
stateStoreNameKey-value store holding monitor memoryrfp-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 ApifyClient
client = 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."

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 saysWhat it means / what to do
SAM.gov is the only selected source but samApiKey is missingAdd your free key (see the API-key section) or select a state portal source.
SAM.gov skipped: add your free samApiKeyThe run worked, but only state portals were monitored. Add the key for federal coverage.
SAM.gov rate limit reachedYour key's 10 requests/day are spent. Run once daily, reduce naicsCodes, or lower lookbackDays. Resets daily.
SAM.gov rejected the API keyKey typo or expired key — SAM.gov keys rotate every 90 days; copy a fresh one from Account Details.
Monitor state record ... is not readableState written by a newer actor version. Run once with resetState: true.
... returned an unexpected response shapeA 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 budgetYour 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 capNothing 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.