How to get SAM.gov contract opportunities as webhooks

SAM.gov has no webhooks. The public API is pull-only and rate-limited; the official email alerts are for humans. If you want opportunity changes pushed into code — a CRM, a bid pipeline, a queue — you need something watching the daily data and POSTing to you.

The shape of the problem

  1. Fetch the daily Contract Opportunities bulk extract (free, public, no key).
  2. Diff it against yesterday: new notice IDs, changed fields, cancellations, awards.
  3. Filter changes by NAICS / set-aside / keyword.
  4. POST each match, signed, with retries and a dead-letter path.

The 5-minute version with SamHooks

curl -X POST https://api.samhooks.com/v1/filters \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"naics":["541511"],"set_asides":["SBA"],"keywords":["software"],
       "webhook_url":"https://example.com/hooks/sam"}'

Every matching change then arrives as one JSON POST with X-SamHooks-Signature (HMAC-SHA256) — verification snippet here. Deliveries retry 5 times, land in a visible log, and your per-filter RSS feed keeps flowing even if your endpoint is down.

Comparing tools first? Start with SamHooks vs GovConAPI, then the quickstart.