DEV Community

Ken-Mutisya
Ken-Mutisya

Posted on

"Every Federal Contract Award Is a Free JSON Row (GovCon Tools Charge $500/mo for This)"

GovCon market intelligence is one of the priciest alert categories in B2B SaaS: GovWin, HigherGov and friends run from hundreds to thousands per month. The primary source under all of them is USAspending.gov, and its API is public JSON with no key, no registration, and no meaningful rate limits. Here is the part that matters.

Search is one POST

POST https://api.usaspending.gov/api/v2/search/spending_by_award/
Content-Type: application/json

{
  "filters": {
    "time_period": [{
      "start_date": "2026-07-03",
      "end_date": "2026-07-10",
      "date_type": "date_signed"
    }],
    "award_type_codes": ["A", "B", "C", "D"],
    "keywords": ["software"],
    "award_amounts": [{ "lower_bound": 250000 }]
  },
  "fields": ["Award ID", "Recipient Name", "Award Amount", "Description",
             "Awarding Agency", "NAICS", "PSC", "recipient_id"],
  "limit": 100, "page": 1,
  "sort": "Award Amount", "order": "desc"
}
Enter fullscreen mode Exit fullscreen mode

Filters compose: naics_codes (prefixes work, 54 = all professional services), agencies by name, recipient_type_names (small_business, veteran owned...). Two gotchas: the sort field must appear in fields or you get a 400, and keyword search can take 30+ seconds cold, so set your timeout accordingly.

date_signed is the whole product

The default date filter, action_date, matches every modification to every old contract: option years, funding bumps, admin changes. Alert products built on it are noise. date_type: "date_signed" returns contracts that were actually signed in the window, which is the event people pay to hear about. A company that signed a $5M federal contract this week is hiring against a start date, buying equipment, and looking for subcontractors right now.

The recipient profile is the lead

Each result carries a recipient_id. One more GET turns the award into an addressable company:

GET https://api.usaspending.gov/api/v2/recipient/{recipient_id}/
Enter fullscreen mode Exit fullscreen mode

That returns the registered street address, UEI, business type flags (small business, veteran owned, minority owned, ...) and lifetime prime award totals. The lifetime number is a free qualifier: a first time winner with a big award is setting up everything at once, while a $1B incumbent is a different sales conversation entirely. The endpoint is transiently flaky under concurrency, so retry once before giving up.

What registries this beats

SAM.gov has the richer entity data but requires an API key and an account. The FPDS ATOM feed is XML from 2007. USAspending is the only corner of the federal procurement stack that is modern JSON with zero signup, and it updates within days of signing.

I packaged the whole flow (keyword/NAICS/agency filters, date_signed windows, recipient enrichment, retry logic) into a pay per row actor: Government Contract Winner Leads. It is free to try until July 24. And if you would rather build your own alert, the two requests above are the entire pipeline.

Top comments (0)