How Opportunity Scout ranks state, county, and municipal solicitations for a commercial trade contractor
Opportunity Scout scores each ingested solicitation and pre-solicitation on a 0–93% Win Likelihood scale. This is not a statistical win probability — it's a relative priority rank that surfaces the best-fit, lowest-friction work for a mid-market commercial trade contractor (HVAC, electrical, plumbing, painting, roofing, facility maintenance) in Maryland, Virginia, and the D.C. metro.
Scoring runs entirely server-side in the Cloudflare Worker. All scores are computed fresh on each scan and are refined by Claude's read of the actual solicitation documents.
Every opportunity carries a source tag: state-md (Maryland eMMA), state-va (Virginia eVA), or state-dc (D.C.). When a NIGP or UNSPSC commodity code is present it is auto-detected and stands in for a profile-code match at Step 3. Virginia opportunities are pulled automatically each day from the eVA portal; Maryland and D.C. records are loaded from commodity-code alert emails or a fixed-column upload.
Before scoring, any opportunity whose title matches an exclusion pattern is flagged "off-profile" and scored 5% (hidden from the ranked view by default). The list is deliberately narrow so building trade work always passes — it screens out only structurally out-of-scope categories.
| Category | Example keywords |
|---|---|
| Heavy civil | road / highway / bridge / dam / dredging / earthwork / site grading / paving |
| Aviation / aerospace | aircraft, aviation, airframe, rotor, helicopter |
| Weapons / ordnance | weapon, ordnance, ammunition, missile, artillery |
| Nuclear / CBRN | nuclear reactor, radiological, biological agent, chemical agent |
| Non-construction services | catering / dining / meal preparation / agriculture / livestock |
| Electronics manufacturing | circuit board, PCB, semiconductor, cable assembly |
| Marine vessels | vessel, ship, submarine, destroyer |
| Materials-supply packages | materialman, supply only, furnish and deliver only, equipment procurement package, "no on-site installation" — buyer wants equipment made and delivered, not a contractor to install it |
Note: "Roof replacement", "HVAC upgrade", "electrical service", "building renovation" etc. are not excluded — commercial building trades are the target.
Every non-excluded opportunity starts at 25%.
| Condition | Adjustment |
|---|---|
| Eligible now — SB / unrestricted / SBR (MD) / SWaM (VA) / SBE / CBE (DC) / MBE / DBE | +16% |
| Future eligible — WOSB / SDVOSB / 8(a) / HUBZone (cert gap) | +3% |
| SB set-aside or unrestricted channel (overlaps the row above — kept small) | +6% |
| Bonding requirement (bid / performance / payment bond) — screens out undercapitalized bidders | +4% |
Calibrated for mid-market trade contract sizes. A first pass — per-client bonding-capacity limits refine this once client profiles are added.
| Contract value | Adjustment | Rationale |
|---|---|---|
| Unknown / $0 | +4% | Unpriced |
| ≤ $50K | +8% | Small job — thin estimator ROI for a mid-market firm |
| $50K – $250K | +16% | Mid-market sweet spot |
| $250K – $1M | +14% | Solid project size |
| $1M – $3M | +4% | More bonding, more competition |
| $3M – $6M | −8% | Large |
| > $6M | −18% | Favors regional / national primes |
Complexity (Low −0% / Medium −5% / High −14%) is decoupled from raw dollar value.
| Category | Complexity rule |
|---|---|
| Janitorial, Grounds/Lawn, Painting — labor-scalable, low code/permit friction | Low up to $2M; Medium above — never High from size alone |
| HVAC, Electrical, Plumbing, Roofing, Facility Maintenance, unclassified | Value tiers: Low <$500K, Medium $500K–$2M, High >$2M |
| Any category with a Design-Build, Multi-Site, or Abatement red flag | +1 complexity level (capped at High) |
Complexity also drives sort order — the ranked list is ordered by (WinLikelihood² ÷ Complexity²) × TradeTierWeight, so a High-complexity job ranks well below a Low-complexity one at the same win likelihood, and (see Step 3) a premium-trade job outranks a commodity-trade job that is otherwise equal. The tier weight affects sort order only — never the displayed win likelihood.
The opportunity title is scanned for trade keywords. Every matching trade is recorded (a job can be "Electrical and Plumbing Upgrades"); the highest-tier match applies its boost, labels the opportunity, and sets its tier — which also weights the sort order (Step 2). Two matched trades add +4%, three or more +6% (broader scope). A client counts as "in trade" if any matched trade is in their profile.
| Tier | Trade | Trigger keywords (sample) | Boost | Sort weight |
|---|---|---|---|---|
| Premium higher ticket, license- & bond-gated, fewer qualified bidders | HVAC | hvac, heating, ventilation, air-condition, chiller, boiler, rooftop unit, RTU, AHU, BAS, DDC, mechanical | +22% | 1.0 |
| Electrical | electrical, switchgear, lighting, generator, transformer, power distribution, conduit, wiring | +22% | 1.0 | |
| Plumbing | plumbing, piping, backflow, water heater, fixtures, sewer line, domestic water, grease trap | +22% | 1.0 | |
| Roofing | roof(ing), TPO, EPDM, built-up, membrane, shingle, roof replace/restore/recover/repair, waterproofing | +22% | 1.0 | |
| Recurring | Facility Maintenance | facility/building maintenance, preventive maintenance, repair services, multi-trade, O&M / operations and maintenance | +16% | 0.9 |
| Commodity labor-driven, low barrier, incumbent-heavy, price-competitive | Painting | painting, repaint, coating, surface prep, epoxy floor, protective coating, abrasive blast | +12% | 0.78 |
| Janitorial | janitorial, custodial, cleaning, housekeeping, sanitation | +12% | 0.78 | |
| Grounds/Lawn | lawn, landscape, grounds, mowing, turf, snow removal | +12% | 0.78 |
Records carry a UNSPSC or NIGP code, not a matchable profile-code table. An opportunity whose title matched a trade keyword gets a flat +6% classification credit plus +15 signal points — standing in for a direct commodity-code hit. Applies once, on a keyword match.
Title patterns that signal structural disadvantage for a mid-market trade contractor. Total deduction is capped at −30%. Up to 2 flag labels show in the opportunity row.
| Flag | Trigger keywords (sample) | Deduction |
|---|---|---|
| Design-Build | design-build | −12% |
| Abatement | asbestos, lead abatement, lead-based paint, hazmat abatement, ACM, mold remediation | −12% |
| Incumbent Signal | incumbent, recompete, follow-on, option exercise, continuation of services | −12% |
| PLA/Union | project labor agreement, PLA, union labor required | −8% |
| IDIQ/JOC Vehicle | IDIQ, MATOC, JOC, job order contract, indefinite-delivery, BPA | −8% |
| Multi-Site Scope | district-wide, campus-wide, enterprise-wide, multiple facilities, portfolio of buildings | −8% |
| Site Utility | water/sewer main, water distribution system, force main, lift/pump station, manhole rehab, CIPP, sanitary sewer main/collection, utility relocation, stormwater BMP — underground/heavy-civil work that reads as plumbing but isn't a building contractor's scope | −16% |
Design-Build, Abatement, and Multi-Site also add one complexity level (Step 2).
Each score carries a Signal indicator (High / Med / Low) — how much data supports the score, not whether it's good or bad.
On demand (click "Analyze ✦"), Claude reads the solicitation documents and returns the estimator's decision facts:
.ics calendar button)Analyses are cached 90 days and restored automatically after a re-scan. All analyzed opportunities are stored in the Analysis Archive.
competitorCount input is wired in for a future market-data source (e.g. eVA / Maryland spend data).