Federal spending rollups
See where federal contract dollars actually go, rolled up three ways: by the agency that spends them, by the product or service bought (PSC), or by the small-business set-aside program the work flows through. Each rollup covers the trailing 12 months of prime contract obligations and is ranked by dollars, so the biggest buyers, markets, and set-aside lanes are at the top. Free with any key.
How to read these rollups (read this first)
- Pick a cut with the path.
by-agency,by-psc, orby-set-aside. Each returns one ranked list; thekeyis the agency name, PSC code, or set-aside code, andlabelis its readable name. obligatedis a net figure. It is the sum of obligations minus de-obligations over the window, the same way the federal government reports spend. A category whose de-obligations outweigh new obligations in the window can be negative; those sort to the bottom.by-set-asideis a floor, not a share. It reports the dollars explicitly coded to each set-aside program. Most federal dollars carry no set-aside code (much of that is order-level activity under a parent vehicle), so this cut shows the identified small-business set-aside spend, not "the percentage of the market that is or isn't set aside."- For spending by industry (NAICS), use the single NAICS market profile (
/api/v1/naics/{code}), which is the richer per-industry view.by-naicsis deliberately not a cut here, so a request for it returns400. - The window block echoes the coverage (trailing 12 months) and
data_as_of.
Quick start
curl -H "Authorization: Bearer YOUR_API_KEY" \
"https://govconapi.com/api/v1/spending/by-agency?limit=3"
Parameters
cut(path): one ofby-agency,by-psc,by-set-aside. Any other value returns400naming the valid set.limit: Results per page. Default 100; maximum 100 on the free trial and 1,000 on paid plans. Over the maximum returns402.offset: pagination offset (0-based).
No other query parameters are accepted.
Response
{
"data": [
{ "key": "Department of Defense", "label": "Department of Defense", "obligated": 354252849993.53, "action_count": 2848750, "recipient_count": 36637 },
{ "key": "Department of Veterans Affairs","label": "Department of Veterans Affairs","obligated": 83133431851.88, "action_count": 97698, "recipient_count": 10513 },
{ "key": "Department of Homeland Security","label": "Department of Homeland Security","obligated": 72243117100.58,"action_count": 50021, "recipient_count": 7841 }
],
"pagination": { "limit": 3, "offset": 0, "total": 69, "total_is_estimate": false, "has_next": true },
"filters_applied": { "cut": "by-agency" },
"window": { "trailing_months": 12, "data_as_of": "2026-08-08" },
"_sources": ["usaspending_fpds"]
}
key/label: the dimension value and its readable name (forby-agency, both are the department; forby-psc,labelis the PSC name; forby-set-aside,labelis the program name).obligated: net obligated dollars over the trailing 12 months (see the primer above).action_count: contract actions carrying the key over the window.recipient_count: distinct awardees.pagination.total: exact (each rollup is small).has_nextis driven by page fullness.window: the coverage window and as-of date.
The three cuts
by-set-aside , identified small-business set-aside spend:
{
"data": [
{ "key": "SBA", "label": "Small Business Set-Aside (Total)", "obligated": 27273198126.01, "action_count": 175352, "recipient_count": 26361 },
{ "key": "SDVOSBC", "label": "Service-Disabled Veteran-Owned Small Business Set-Aside", "obligated": 9277774028.54, "action_count": 23319, "recipient_count": 2512 },
{ "key": "8AN", "label": "8(a) Competitive", "obligated": 7482072348.14, "action_count": 18547, "recipient_count": 2972 }
],
"pagination": { "limit": 3, "offset": 0, "total": 19, "total_is_estimate": false, "has_next": true },
"filters_applied": { "cut": "by-set-aside" },
"window": { "trailing_months": 12, "data_as_of": "2026-08-08" },
"_sources": ["usaspending_fpds"]
}
by-psc , spend by product or service, labeled from the PSC catalog:
{
"data": [
{ "key": "Q201", "label": "MEDICAL- MANAGED HEALTHCARE", "obligated": 37987187431.44, "action_count": 9386, "recipient_count": 492 },
{ "key": "1510", "label": "AIRCRAFT, FIXED WING", "obligated": 33814865212.96, "action_count": 1356, "recipient_count": 87 },
{ "key": "Y1PZ", "label": "CONSTRUCTION OF OTHER NON-BUILDING FACILITIES", "obligated": 28187460354.56, "action_count": 1545, "recipient_count": 515 }
],
"pagination": { "limit": 3, "offset": 0, "total": 2313, "total_is_estimate": false, "has_next": true },
"filters_applied": { "cut": "by-psc" },
"window": { "trailing_months": 12, "data_as_of": "2026-08-08" },
"_sources": ["usaspending_fpds"]
}
Errors
- 400:
cutis not one ofby-agency/by-psc/by-set-aside(the body names the valid set;by-naicsreturns this, pointing you to the NAICS market profile), or an unknown query parameter. - 422:
limitbelow 1, negativeoffset, or a non-integer value. Alimitabove your plan maximum returns 402. - 401: missing API key. 429: rate limit exceeded.
Examples
Top small-business set-aside programs:
curl -H "Authorization: Bearer YOUR_API_KEY" \
"https://govconapi.com/api/v1/spending/by-set-aside"
Biggest product/service markets, page 2:
curl -H "Authorization: Bearer YOUR_API_KEY" \
"https://govconapi.com/api/v1/spending/by-psc?limit=25&offset=25"
Related
- Single NAICS market profile , spending and competition by industry (the NAICS axis).
- Search PSC codes , resolve a
by-psccode to its full description. - Contract pricing benchmark , what work in a market actually goes for.
- Find teaming partners , who wins and who to team with in a market.