Federal Contract Market Map — Who Wins, HHI & Agency Mix
Pricing
from $4.00 / 1,000 contractors
Federal Contract Market Map — Who Wins, HHI & Agency Mix
Map any US federal contracting market from official USAspending data: vendors ranked by obligated dollars, market concentration (HHI), top-5 and top-10 share, agency mix, outlay ratio, median contract length and contracts expiring within a year. Server-side aggregation, no API key.
Pricing
from $4.00 / 1,000 contractors
Rating
0.0
(0)
Developer
宗諭 楊
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
10 days ago
Last modified
Categories
Share
Pick a federal contracting market — by NAICS code, keyword, agency, or vendor name — and get the map: who holds the dollars, how concentrated the market is, which agencies are buying, and which incumbents have contracts running out.
The data is official USAspending.gov. No API key, and the vendor ranking is aggregated server-side across the whole filtered universe, not estimated from a sample of awards.
What you get per vendor
| Field | Example |
|---|---|
rank / recipientName / uei | 1 / GENERAL DYNAMICS INFORMATION TECHNOLOGY / 067641597 |
obligatedAmount | 1,370,000,000 |
totalOutlays / outlayRatio | how much has actually been paid out against what was committed |
shareOfFiltered / cumulativeShare | 0.1842 / 0.1842 |
medianContractMonths | typical contract length in this market |
agencyCountInSample / topAgencyInSample / topAgencyShareInSample | 4 / Department of Defense / 0.81 — single-agency dependence |
activeContractsInSample / expiringWithin12Months | incumbency and what is coming up for rebid |
And in SUMMARY:
| Field | What it tells you |
|---|---|
totalContractsInUniverse | how many contracts match your filters at all |
concentration.hhi + hhiReading | Herfindahl–Hirschman index with the DOJ/FTC reading: under 1500 unconcentrated, 1500–2500 moderate, over 2500 highly concentrated |
top1Share / top5Share / top10Share | the shape of the market in one line |
topAgencies | which agencies are actually buying |
Two dataset views: Market map (the ranking and shares) and Incumbency (active and expiring contracts, agency concentration).
Uses
- Market entry — HHI and top-5 share answer "is there room here" before you write a capture plan.
- Competitor profile — put a vendor name in
recipientsand get its whole federal book of business: dollars, agency mix, contract lengths. - Teaming and subcontracting —
topAgencyShareInSamplefinds the vendors locked into one agency and the ones spread across several. - Rebid timing —
expiringWithin12Monthspoints at incumbents with work coming up.
Input example
{"naicsCodes": ["541511"],"agencies": ["Department of Defense"],"startDate": "2024-10-01","endDate": "2026-09-30","dateType": "new_awards_only","topRecipients": 200}
At least one of naicsCodes, keywords, agencies or recipients is required — an
unfiltered query is a request to aggregate the entire federal market, which is not a
meaningful question.
The two things that make naive queries wrong
The date filter matches transactions, not contract periods. Filter on fiscal 2025–26 and
you will still see a contract whose period of performance ended in 2017, because it
received a modification inside your window. That is the API behaving as designed, and it is
why dateType exists: choose New awards only when you mean "awarded in this period".
Different endpoints count different things. The contract count is measured in awards;
the agency breakdown is measured in transactions. Dividing one by the other produces a
number that looks like a percentage and means nothing. The levels each endpoint used are
reported in SUMMARY.spendingLevels, and the Actor stops if one comes back unexpected.
How it handles its own limits
| Check | What it catches |
|---|---|
| No filters | Rejected with the reason, rather than attempting a whole-market aggregate. |
| Empty universe | Zero matching contracts is never returned as "this market has no vendors". A control query (NAICS 541511, same period) decides why: if it finds contracts, your filters are the problem and the run is refused with an explanation (no rows, so no per-row charge); if it finds none, the source is down and the run fails. Measured: an unknown NAICS code, a nonsense keyword and a misspelled agency name all come back from the API as 200 with zero contracts. |
| Start date too early | The search API reaches back only to 2007-10-01 and truncates silently before that, so an earlier startDate is refused. |
| Pagination ignored | If page N returns page 1 again, the run stops. Page paging is verified to work here, but the same parameter is silently ignored by other public APIs, so it is checked rather than assumed. |
| Spending-level mismatch | An endpoint returning a different measurement level than expected stops the run instead of producing a mixed denominator. |
| Request failure | A non-200 response is raised, not returned as an empty market. |
Notes on the data
shareOfFilteredandhhicover the vendors returned (topRecipients). The long tail is outside the denominator, so the concentration figures are an upper bound. RaisetopRecipientsfor a tighter one.- Fields ending in
InSamplecome from the sampled award pages, ordered by amount, not from every contract a vendor holds. The suffix is there to keep that visible in every row. - The NAICS field on individual awards is frequently empty, even when filtering by NAICS, so no derived field is built from it.
- Dollar figures are obligations, not payments.
outlayRatiois where payments show up. - This is a market-analysis tool, not bid advice.