---
name: sam-gov-monitor
description: Monitor SAM.gov federal contract opportunities (and follow-on awards) by NAICS, PSC, agency, set-aside, and keyword — produces a daily pipeline report with pursue/no-pursue scoring, capture-management cadence, RFI / Sources-Sought pre-RFP signal tracking (engaging early on draft-stage notices wins later), team-incumbent intelligence (look up prior awardees via USAspending and SAM contract data), small-business set-aside eligibility check, and proposal-readiness scoring (Pwin × value × strategic fit). Generates: SAM.gov API client with rate-limit-aware paging, saved-search definitions, slack/email digests, BD pipeline CSV import, color/teaming proposal cover sheet, and FAR clause flagging for first-time GovCons. TRIGGER on "SAM.gov", "federal contracts", "GovCon", "RFP monitoring", "government contracting", "set-aside", "NAICS code search", "Sources Sought", "RFI", "8(a)", "WOSB", "SDVOSB", "HUBZone", "capture management", "proposal pipeline".
version: "1.0.0"
category: analysis
platforms:
  - CLAUDE_CODE
---

# SAM.gov Federal Contract Opportunity Monitor

You generate a complete capture-management pipeline anchored on SAM.gov as the source of truth. Saved searches beat email alerts (email rolls in 24-72 hours late). Pre-RFP engagement (RFI, Sources Sought) is where the bid is won — by the time the solicitation drops, the requirement is often written around an incumbent.

============================================================
=== PRE-FLIGHT ===
============================================================

Verify:

- [ ] **NAICS codes**: at minimum primary code; ideally a full list (most companies are credible across 3-8 NAICS). Incomplete NAICS limits which opportunities surface.
- [ ] **PSC codes**: Product Service Codes — narrower than NAICS, helps eliminate noise.
- [ ] **Set-aside status**: small business, 8(a), WOSB / EDWOSB, SDVOSB, HUBZone, none. If certified, restrict searches; if not, expand.
- [ ] **Geographic preferences**: any place-of-performance restrictions?
- [ ] **Capacity**: what's your annual capture bandwidth (number of proposals you can credibly write)? Default 12-20/year for a mid-size GovCon.
- [ ] **SAM.gov API key**: register at api.sam.gov; free tier 1,000 requests/day.

Recovery:

- Without API key, fall back to RSS feed at https://sam.gov/rss/ and HTML scraping (lower fidelity, no full-record retrieval).
- If no PSC codes provided, derive from primary NAICS using NAICS→PSC crosswalk.

============================================================
=== PHASE 1: SAM.GOV API CLIENT ===
============================================================

Generate `sam_client.py` (or Node equivalent):

```python
class SAMClient:
    BASE = "https://api.sam.gov/opportunities/v2"

    def search(self, *, posted_from, posted_to, naics=None, psc=None,
               keyword=None, set_aside=None, agency=None, limit=1000):
        """Returns list of opportunities. Handles pagination + rate limit."""
        params = {
            "limit": min(limit, 1000),  # API max per page
            "postedFrom": posted_from.strftime("%m/%d/%Y"),
            "postedTo": posted_to.strftime("%m/%d/%Y"),
            "api_key": self.api_key,
        }
        if naics: params["ncode"] = ",".join(naics)
        if psc:   params["ccode"] = ",".join(psc)
        if keyword: params["q"] = keyword
        if set_aside: params["typeOfSetAside"] = set_aside
        if agency: params["organizationCode"] = agency
        # Paginate, respect 429s with exp backoff, dedupe by noticeId
        ...

    def get_details(self, notice_id):
        """Full opportunity record including attachments URL list."""
        ...
```

Cache responses to local SQLite — re-running same search shouldn't burn quota.

VALIDATION: Client paginates correctly past 1000 results. 429 (rate limit) triggers exp backoff, not crash. Dedupes by `noticeId`.

============================================================
=== PHASE 2: SAVED SEARCHES ===
============================================================

Generate `searches.yaml` — one entry per pursuit profile:

```yaml
searches:
  - name: "IT modernization at HHS"
    naics: [541511, 541512, 541513, 541519, 518210]
    psc: [DA01, DA02, DA10, DA12, DJ01]
    keywords: ["modernization", "legacy", "cloud migration", "FedRAMP"]
    agencies: [HHS, CMS, FDA, NIH]
    set_aside: ["SBA", "8A", "TOTAL_SMALL"]

  - name: "Cyber assessments DoD"
    naics: [541511, 541512, 541513, 541690, 541990]
    psc: [DA10, R425, R408]
    keywords: ["pentest", "red team", "RMF", "ATO", "FedRAMP"]
    agencies: [DOD, USAF, USN, USA, USMC, DISA]
```

Run searches daily via cron. Surface deltas (new notices, amended notices, awarded notices).

VALIDATION: Search YAML is human-editable. Cron runs without intervention. Deltas dedupe against prior runs.

============================================================
=== PHASE 3: PRE-RFP SIGNAL TRACKING ===
============================================================

The bid is often won before the RFP is published. Track notice types:

| Notice Type       | Stage             | Action                                                     |
| ----------------- | ----------------- | ---------------------------------------------------------- |
| Special Notice    | Pre-pre-RFP       | Read. Mark agency for future intel.                        |
| RFI               | Market research   | RESPOND. Get on agency's vendor list. Free intel ride.     |
| Sources Sought    | Market research   | RESPOND. Strongest signal of upcoming SOL. Capture begins. |
| Presolicitation   | RFP draft         | Engage agency BD POC. Influence requirements (legal!).     |
| Solicitation      | RFP issued        | Decide pursue/no-pursue NOW.                               |
| Combined Synopsis | Simplified acq    | Often a sole-source workaround — investigate.              |
| Award             | Won by competitor | Read winning company. Track who has the work.              |
| Justification     | Sole-source       | Read carefully — sometimes contestable.                    |

Generate `pre_rfp_pipeline.csv` that surfaces all RFI / Sources Sought / Presolicitation notices in your saved-search domain, with response deadlines.

VALIDATION: RFI / Sources Sought items get auto-flagged as P0 in the digest. Deadlines tracked.

============================================================
=== PHASE 4: CAPTURE-MANAGEMENT SCORING ===
============================================================

Each opportunity scores on Pwin × value × strategic fit:

| Dimension              | Score 1-5                                                      |
| ---------------------- | -------------------------------------------------------------- |
| Incumbent strength     | 1 = strong incumbent, low Pwin. 5 = no incumbent or weak.      |
| Customer intimacy      | 1 = no prior touch. 5 = sold-to in last 12 months.             |
| Set-aside fit          | 1 = full + open. 5 = your set-aside category restricted.       |
| Past performance match | 1 = adjacent. 5 = exact past work.                             |
| NAICS / PSC fit        | 1 = secondary code. 5 = primary code.                          |
| Solution maturity      | 1 = new build. 5 = productized.                                |
| Bid value (annual)     | (raw $).                                                       |
| Strategic value        | 1 = no follow-on. 5 = pipeline gate for $10M+ multi-year work. |

Composite **Pwin** = average of first 6, multiplied by strategic-value adjustment.

**Pursue threshold**: Pwin ≥ 3.5 AND capacity available AND no calendar conflict with higher-Pwin pursuit.

VALIDATION: Each scored opp produces a single pursue/hold/no-pursue decision with rationale.

============================================================
=== PHASE 5: INCUMBENT + COMPETITOR INTELLIGENCE ===
============================================================

For each opportunity, query USAspending.gov + SAM.gov contract-data API for:

- Prior awards with same NAICS + agency + matching scope.
- Top 5 competitors by revenue in that lane.
- Their typical award size + win rate.
- GSA Schedule holders (if applicable).

Output `competitor_dossier.md` per pursuit.

VALIDATION: Each pursuit has a competitor dossier with ≥ 3 named competitors and their prior award value.

============================================================
=== PHASE 6: SMALL BUSINESS ELIGIBILITY CHECK ===
============================================================

If the opportunity is set-aside, verify your company's eligibility _automatically_:

- SBA Dynamic Small Business Search (DSBS) registration current?
- 8(a) program: in program & not within 9-year graduation window?
- WOSB / EDWOSB: SBA-certified (no longer self-cert as of 2020)?
- SDVOSB: VA-verified via SBA after 2023 transition?
- HUBZone: SBA-certified AND principal office in HUBZone AND 35% workforce in HUBZone?
- Size standards: revenue & employee count below NAICS-specific cap?

Generate `eligibility_check.md` per pursuit — green/yellow/red per dimension.

VALIDATION: Real-time SBA DSBS check or fallback to user-supplied certs.

============================================================
=== PHASE 7: PROPOSAL READINESS PACKAGE ===
============================================================

Once a "pursue" decision is made, generate the proposal-readiness scaffold:

- **Color teaming template**: Pink team (concept review), Red team (writeable), Gold team (final).
- **Proposal compliance matrix**: maps each RFP requirement (Section L instructions, Section M evaluation criteria, FAR clauses) to a proposal section + owner.
- **Pricing prep template**: BOE format (Basis of Estimate), labor categories, indirect rates.
- **Past performance template**: 3-5 contracts maximum, with CPARS reference if applicable.
- **Tech volume outline**: aligned to Section M factors.
- **Capability statement** (one-pager, agency-specific tailoring).

VALIDATION: Compliance matrix has 100% coverage of RFP requirements (no orphan Section L instructions).

============================================================
=== SELF-REVIEW ===
============================================================

Score 1–5:

- **Complete**: API client + searches + pre-RFP tracker + scoring + intel + eligibility + proposal scaffold?
- **Robust**: Handles pagination + rate limits? Respects set-aside semantics correctly?
- **Clean**: Pursue decisions traceable to scoring rubric?
- **GovCon-credible**: Would a capture manager at a $50M-$500M GovCon recognize the workflow?

Common gap: chasing every RFP. The discipline is no-bid more than bid.

============================================================
=== LEARNINGS CAPTURE ===
============================================================

Append to `~/.claude/skills/sam-gov-monitor/LEARNINGS.md`:

## <YYYY-MM-DD> — <NAICS focus, agency cluster>

- **What worked:**
- **What was awkward:**
- **Suggested patch:**
- **Verdict:** [Smooth / Minor friction / Major friction]

============================================================
=== STRICT RULES ===
============================================================

- Never bid every RFP. Win rate × proposal cost is the real metric.
- Never miss the response deadline on RFIs / Sources Sought — those are the cheapest seat at the agency table.
- Never reveal incumbent intelligence sources (USAspending data) in client deliverables. Synthesize, don't cite raw export.
- Never assume set-aside eligibility — verify against SBA real-time data.
- Capacity discipline: if you're at proposal capacity, raise the pursue threshold rather than over-commit.
