usaspending · 8 min read · 2026-04-29
USAspending.gov data structure: what every federal contractor should know
A practitioner's guide to the USAspending v2 API — endpoints, filters, gotchas, and the 4 queries every capture lead should run weekly.
What USAspending actually is
USAspending.gov is a federal-data warehouse that aggregates every dollar the US government commits to contractors, grant recipients, and direct payments. It's published under the DATA Act of 2014 (now amended). The v2 API is public, no key required, no rate-limit-as-of-2026.
For federal contractors, USAspending is the single most underrated capture intelligence source. Most pursuit teams pay GovWin $30K-$120K/year for what is, at the level we need, a wrapper around USAspending + a UI.
The 5 endpoints that matter
1. /api/v2/search/spending_by_category/recipient
What you ask: "Who is winning the most contracts at agency X in NAICS Y for FY Z?"
Body:
{
"filters": {
"award_type_codes": ["A","B","C","D"],
"naics_codes": ["541512"],
"agencies": [{"type":"awarding","tier":"toptier","name":"Department of Veterans Affairs"}],
"time_period": [{"start_date":"2025-10-01","end_date":"2026-09-30"}]
},
"limit": 10,
"page": 1
}
Response is a ranked list of recipients with dollar amounts. This is your incumbent map. Run it weekly.
2. /api/v2/search/spending_by_award
What you ask: "What specific contracts has Booz Allen captured at DISA in FY26?"
Body:
{
"filters": {
"award_type_codes": ["A","B","C","D"],
"recipient_search_text": ["BOOZ ALLEN HAMILTON"],
"agencies": [{"type":"awarding","tier":"toptier","name":"Department of Defense"}]
},
"fields": ["Award ID","Recipient Name","Award Amount","Awarding Sub Agency","Description"],
"limit": 25,
"page": 1
}
This is line-item recompete intel. Each row is a specific PIID with end date — that's your recompete window calendar.
3. /api/v2/search/spending_by_category/awarding_subagency
What you ask: "Inside Department of Defense, which sub-agencies are buying NAICS 541512?"
Body:
{
"filters": {
"award_type_codes": ["A","B","C","D"],
"naics_codes": ["541512"],
"agencies": [{"type":"awarding","tier":"toptier","name":"Department of Defense"}],
"time_period": [{"start_date":"2025-10-01","end_date":"2026-09-30"}]
},
"limit": 10,
"page": 1
}
DoD buys through DISA, Army, Navy, Air Force, Space Force, NRO, MDA, and 30+ others. This endpoint tells you which office is the actual buyer — critical for capture-brief workflow.
4. /api/v2/recipient/{uei}/
What you ask: "Tell me everything about this recipient — UEI, parent company, total federal spend, top agencies."
This is your competitor profile. Pair with SAM.gov Entity Management for the live registration data.
5. /api/v2/agency/{agencyCode}/awards/
What you ask: "What's the historical award pattern of this agency over the last 5 years?"
This is your strategic capture data. Run quarterly, not weekly.
Award type codes (the gotcha)
USAspending uses single-letter codes that map to FPDS categories:
| Code | Category | When to include |
|---|---|---|
| A | BPA Call | Always |
| B | Purchase Order | Always (most low-dollar) |
| C | Delivery Order | Always (IDIQ task orders) |
| D | Definitive Contract | Always |
| 02 | Block Grant | Skip (grants, not contracts) |
| 03 | Project Grant | Skip |
| 04 | Cooperative Agreement | Skip |
| IDV (A-E) | IDV variants | Include for IDIQ analysis |
If you forget award_type_codes, the endpoint silently includes grants and direct payments — your "incumbent" results get polluted with university research grants that have nothing to do with your NAICS.
The 4 weekly queries every capture lead should run
- Recipient share-of-wallet for your top 3 agency × NAICS slices (incumbent map).
- Specific awards over $1M in your NAICS in the last 90 days (recompete signals).
- Sub-agency breakdown of your top agency (which office to capture).
- Set-aside-filtered spend (where the SDVOSB / 8(a) / HUBZone money actually flows).
If you build these 4 queries into a Monday-morning dashboard, you replace 80% of GovWin's value at $0/year.
Caching strategy
USAspending data updates daily, but capture decisions don't — weekly is fine. Cache responses for 12 hours minimum, 7 days for historical queries. Our searchUSASpending helper sets next: { revalidate: 60 * 60 * 12 } for exactly this reason.
What USAspending doesn't tell you
- Who is about to win (forecasts, sources sought).
- What internal politics shape the award.
- Bid protest history (use FedScoop or BGA CourtListener).
- Compliance and CPARS scores (use SAM.gov + FAPIIS).
For those, you go back to SAM.gov, agency forecasts, and human-network intel. USAspending is necessary but not sufficient.
What FPDS deprecation means
FPDS-NG decommissioned in February 2026; SAM.gov Contract Awards API is the new system of record. USAspending still works because it ingests SAM.gov directly now. The only change for our workflow is that historical FPDS-only lookups (pre-2020) require a different endpoint — but for active capture, USAspending v2 is the single source.
Try it yourself
curl -X POST "https://api.usaspending.gov/api/v2/search/spending_by_category/recipient" \
-H "Content-Type: application/json" \
-d '{"filters":{"award_type_codes":["A","B","C","D"],"naics_codes":["541512"],"agencies":[{"type":"awarding","tier":"toptier","name":"Department of Veterans Affairs"}],"time_period":[{"start_date":"2025-10-01","end_date":"2026-09-30"}]},"limit":5,"page":1}'
The response is the same data your $30K/year tool returns, formatted as raw JSON instead of a UI. We use it via the search_awards and search_individual_awards agent tools — same API, agent handles the post-processing.