If you're the owner, the estimator, and the proposal writer, every hour you spend scrolling SAM.gov is an hour you're not billing. Yet most small contractors run opportunity discovery the same way: open SAM.gov a few times a week, type the same keywords, skim a few hundred results, and hope nothing important posted on the days you skipped. This guide replaces that with a system — one you can run manually in about 30 minutes a day, and automate when you're ready.
Why manual SAM.gov triage fails small contractors
SAM.gov publishes thousands of new contract opportunities every week across every agency and every NAICS code. The problem isn't access — the data is free and public. The problem is that relevance is buried in volume, and the failure modes compound:
- Keyword search misses re-worded postings. An agency that called it “janitorial services” last year may post “custodial and related services” this year. Your saved keyword silently misses it.
- Postings update after you've read them. Amendments change deadlines, set-asides, and scope. If you triaged a notice on Monday, you may be working from stale facts by Thursday.
- Triage decays under deadline pressure. The week you're closing out a proposal is exactly the week you stop checking — and exactly when the next opportunity posts.
- No memory between sessions. Without a written record of what you reviewed and why you passed, you re-read the same notices and re-make the same decisions.
None of these are discipline problems. They're structural problems with using a search engine as a monitoring system.
Step 1: Define your filter profile — once, in writing
Before any tooling, write down the four facts that determine whether an opportunity is even theoretically yours:
- NAICS codes — your primary code plus every secondary code you can credibly perform under. Include adjacent codes you'd team on. Most firms under-list; check what codes your past contracts were actually awarded under.
- Set-aside eligibility — which programs you're certified in (8(a), HUBZone, SDVOSB, WOSB/EDWOSB) and, just as important, which set-asides you can't bid, so those notices never cost you a click.
- Size and value range — the smallest award worth your overhead and the largest you can perform without subcontracting yourself into a margin problem.
- Geography — states and installations where you can actually staff the work, unless the work is remote-performable.
This profile is the single highest-leverage artifact in your BD process. Every triage decision becomes a comparison against it instead of a fresh judgment call.
Step 2: Use SAM.gov saved searches — and know their limits
SAM.gov lets you save searches and receive email notifications. Set them up — they're free and better than nothing. Build one saved search per NAICS code (not one giant query), filter by your set-aside types, and set notification frequency to daily.
Then understand what saved searches won't do, because this is where the manual system needs you:
| Saved searches do | Saved searches don't |
|---|---|
| Match keywords and structured filters | Judge how well a notice fits your profile |
| Email you on a schedule | Rank results — you still read everything |
| Cover new postings | Summarize 40-page solicitations in plain English |
| Filter by set-aside and NAICS | Tell you who the incumbent is or whether it's a recompete |
Treat saved-search emails as raw feedstock, not finished intelligence. The next two steps turn feedstock into decisions.
Step 3: Build a scoring rubric — the 5-minute fit test
For every notice that survives your filters, score it against your profile before reading the attachments. A simple 100-point rubric:
- NAICS match (40 pts): exact code = 40; same 4-digit industry group = 25; adjacent = 10.
- Set-aside fit (25 pts): reserved for a certification you hold = 25; full-and-open where you're competitive = 10; reserved for a program you're not in = 0 (and stop scoring).
- Value range (15 pts): inside your sweet spot = 15; stretch but performable = 8.
- Geography (10 pts): in your staffing footprint or remote = 10.
- Scope keywords (10 pts): the statement of work reads like contracts you've completed = 10.
Set a floor — 40 points is a reasonable starting line — and enforce it ruthlessly. Anything below the floor gets logged and skipped without opening attachments. The rubric's job isn't precision; it's making “no” cheap so your hours concentrate on the handful of real candidates.
A worked example
Say a saved search surfaces a janitorial services notice under your primary NAICS code (40 pts), set aside for a certification you hold (25 pts), valued at $180k against your $50k–$300k sweet spot (15 pts), located two states outside your staffing footprint (0 pts), with a scope description that shares maybe a third of your capability keywords (4 pts). Total: 84 out of 100 — well above a 40-point floor, so it moves to Step 4. Now compare that against a notice with a perfect NAICS match (40) but reserved for a set-aside you don't hold (0, and stop scoring per the rule above): that one never gets past minute two, no matter how good the fit looks otherwise. The rubric isn't doing anything you couldn't do in your head — it's forcing you to do it in the same order, every time, instead of reading the whole notice first and rationalizing a fit afterward.
Step 4: Check the incumbent before you commit hours
Before deep-reading any strong match, spend ten minutes on USASpending.gov:
- Search the awarding agency and a few scope keywords to find the predecessor contract.
- Note the incumbent, the award amount, and the period of performance end date.
- Read the signals: an award ending within 6–12 months of the posting date suggests a recompete; a long-tenured incumbent with strong performance is a harder target than a contract that has changed hands.
This single habit prevents the most expensive small-contractor mistake: writing a full proposal into a recompete the incumbent was always going to win, when the same hours could have gone to a winnable bid.
Sometimes there is no predecessor contract to find — a genuinely new requirement, or the agency's first time buying this scope. That's not a dead end; it's a different signal. A new requirement with no award history is higher-risk (you have nothing to benchmark pricing or scope against) but also the closest thing to a level playing field you'll find. If the notice started life as a Sources Sought or RFI, check whether you responded to it — an agency that already has your capability statement on file is one you've already begun positioning with, whether or not you realized it at the time.
Step 5: Decide bid/no-bid in one sitting
Schedule triage as one block — 30 minutes, same time daily. For each surviving notice, record three things in a simple log (a spreadsheet is fine): the score, the decision (bid / watch / pass), and one sentence of reasoning. The log does two jobs: it stops you re-reviewing the same notices, and after a few months it becomes your own dataset — you'll see which score ranges actually turned into wins and tune your floor accordingly.
Where a manual rubric still breaks down
Even a disciplined manual system has real gaps worth knowing about before you rely on it:
- Amendments don't re-trigger review. A saved-search email fires once, on the original posting. If the agency amends the deadline or scope next week, nothing tells you unless you're re-checking notices you already scored — which defeats the point of scoring them in the first place.
- Fiscal year-end creates a volume spike your 30-minute block can't absorb. Federal spending clusters heavily into August and September as agencies use expiring annual funds. The same rubric that takes 30 minutes a day in March can take 90 in September, on the same NAICS codes.
- The rubric only scores what's in the notice. Teaming opportunities, informal agency relationships, and protest-driven re-competes rarely show up as structured data — they're signals a rubric can't see and a person still has to catch.
None of these break the system. They're the reason a manual process eventually hits a ceiling that has nothing to do with discipline — checking for amendments and re-scoring under a volume spike is exactly the kind of always-on, no-day-off work that's worth automating even if everything else stays manual.
Automating the whole loop
Everything above is automatable, and the order of operations maps cleanly to software: monitor the SAM.gov API on a fixed cycle, score each new and amended notice against a stored profile, deliver only the matches above the floor, attach incumbent data, and pre-draft the response outline for the ones you choose to pursue.
That is, transparently, what GovOpp Intel does — every 6 hours, with the same rubric logic this article just taught you to run by hand. But the system matters more than the tool: run this manually for two weeks first. You'll calibrate your profile, learn your real fit floor, and know exactly what you're automating — whether you automate it with us or with a spreadsheet and discipline.
Key takeaways
- Write your filter profile (NAICS, set-asides, size/value, geography) once — it converts every triage decision into a cheap comparison.
- Use SAM.gov saved searches as feedstock; they match keywords but can't judge fit.
- Score every notice against a fixed rubric with a hard floor. Make “no” cheap.
- Check USASpending.gov for the incumbent before committing proposal hours.
- Log every decision. Two weeks of logs will teach you more about your pipeline than any guide.