The federal buyer you actually target is a contracting office, not a department. This returns the specific offices that buy a given NAICS, ranked, each carrying its own competition and set-aside facts, because the market-wide average hides how any one office really buys.
GET /api/v1/offices/{office_code} profiles one office: how it buys overall and the NAICS it actually buys. Factual only, no score. Reads federal award data (FPDS via USASpending). GET /api/v1/offices, JSON, free on every plan.
There is a well-worn piece of advice in federal business development: pick one agency and learn it deeply rather than chasing everything. The sharper version of that advice, the one practitioners who actually win repeat, adds a metric: before you commit to a target, look at the average competition per contract there, because an agency that buys a lot of your NAICS but always draws a crowd is a worse target than a smaller one that consistently buys from two or three vendors. That is a sound way to choose where to spend a small team's time.
The data to do it exists, and several sites publish part of it: search a NAICS and you can find "top buying agencies" lists (DoD, GSA, VA, HHS, and so on, with dollar totals). Those lists answer a real question and they stop in the same place: the agency. But nobody awards a contract as "the VA." A contract is run by a specific contracting office, and that is the unit you actually target, build a relationship with, and respond to. Two offices inside the same department, buying the exact same NAICS, will differ on the only things that decide whether you should pursue them: how contested their awards are, and whether they buy small.
This endpoint closes that gap. It takes the buyer question one level deeper than the agency lists, to the contracting office, and it attaches to each office the two facts the "pick your target" advice actually turns on: how competed that office's buys are (average offers and single-bidder share) and how much it sets aside. One JSON call, free on every plan.
One principle throughout, the same as everywhere in this API: we surface facts, never a score. There is no "office fit: 82%." Every number on the row is pulled from the award record; the "is this a good target for me" call is yours, because you are the one who knows your certifications, your past performance, and your capacity.
Our own market endpoints made this gap concrete, which is why we built the fix. Ask /api/v1/naics/541512 who buys IT services and the top buyers come back as departments ("Department of Veterans Affairs"). Ask /api/v1/naics/541512/competition how contested it is and you get one market-wide number for the whole NAICS. Both are useful for sizing a market. Neither tells you which office to walk into, and the single market-wide competition figure is an average across hundreds of offices that individually look nothing like it.
The award data supports the finer cut. Every action carries an awarding office code, an offer count, and a set-aside type. Rolled up per office over the trailing three years, that is a direct read on how each office buys. As of August 21, 2026, the rollup holds 108,508 office-and-NAICS combinations across 2,920 contracting offices and 1,144 NAICS codes (34,980 of those combinations clear the $250,000 floor the discovery list uses). IT services alone (NAICS 541512) is bought by 559 distinct offices above that floor. "Which agency" collapses all of that into four or five names; "which office" is where the targeting decision actually lives.
All of this comes from FPDS, the Federal Procurement Data System (still the system of record for contract actions), as republished through USASpending. The key thing to know: it does not store contracts, it stores award actions. Every modification, option-year exercise, and de-obligation is its own row, so a single contract can appear many times, a heavily-modified one a few hundred. Count raw rows and you count the same contract over and over, so the first step is always collapsing actions back to the contract before any number means anything.
From there, four things make an honest office-level read harder than it looks:
None of this is exotic, but every step is a place to get a number quietly wrong, and a wrong number looks exactly as confident as a right one. What you get back is the facts. What we spend is the part that makes them trustworthy.
Give the endpoint a NAICS. Here are the three biggest IT-services buyers, by obligations:
curl -H "Authorization: Bearer YOUR_API_KEY" \
"https://govconapi.com/api/v1/offices?naics=541512&limit=3"
Real response:
{
"naics_code": "541512",
"sort": "biggest",
"offices": [
{
"office_code": "36C10B",
"office_name": "TECHNOLOGY ACQUISITION CENTER NJ (36C10B)",
"sub_agency": "Department of Veterans Affairs",
"department": "Department of Veterans Affairs",
"obligated": 6724467870.0,
"contracts": 292,
"vendors": 68,
"avg_offers": 4.0,
"single_bidder_pct": 17,
"setaside_pct": 33
},
{
"office_code": "47QFCA",
"office_name": "GSA FAS AAS FEDSIM",
"sub_agency": "Federal Acquisition Service",
"department": "General Services Administration",
"obligated": 6472942132.0,
"contracts": 86,
"vendors": 29,
"avg_offers": 3.5,
"single_bidder_pct": 8,
"setaside_pct": 0
},
{
"office_code": "75FCMC",
"office_name": "OFC OF ACQUISITION AND GRANTS MGMT",
"sub_agency": "Centers for Medicare and Medicaid Services",
"department": "Department of Health and Human Services",
"obligated": 3573609704.0,
"contracts": 198,
"vendors": 93,
"avg_offers": 4.0,
"single_bidder_pct": 32,
"setaside_pct": 44
}
],
"_sources": ["usaspending_fpds"]
}
How to read these three rows. All three are top-tier IT buyers, and they buy in three different ways. VA's Technology Acquisition Center put $6.7B through 292 contracts to 68 vendors, sets aside a third of it, and runs low single-bidder (17%): a large office with a real small-business lane and genuine competition. CMS obligated $3.6B but spread it across 93 vendors and sets aside 44%: the widest small-business door of the three. GSA FEDSIM buys full-and-open (0% set-aside) from a narrow bench of 29 vendors with the lowest single-bidder share (8%): a large, genuinely contested, full-and-open arena where a set-aside will not help you. Same NAICS, three different pursuit decisions, and none of that is visible at the agency level.
This is the reason the office cut matters, stated as plainly as it can be. Take janitorial services, NAICS 561720. Ask the market-wide question and it looks moderately competitive: our market-wide competition view reports that 35% of competed awards drew a single bidder, at an average of 7.6 offers. That single number is the whole NAICS compressed into one figure.
Now split the same NAICS by office, and the average turns out to describe almost no one:
| Contracting office | Department | 3-yr obligated | Single-bidder | Avg offers | Set-aside |
|---|---|---|---|---|---|
| Office of the Chief Procurement Officer | Treasury | $16M | 100% | 1.0 | 0% |
| NCR Regional Contracting | Interior | $7M | 100% | 1.0 | 0% |
| Network Contract Office 7 (36C247) | Veterans Affairs | $2M | 0% | 10.7 | 100% |
| GSA PBS R7 Services & Facilities | GSA | $2M | 0% | 4.2 | 63% |
The market-wide "35% single-bidder" is an artifact of averaging offices that sit at the extremes. Treasury's procurement office bought $16M of janitorial and every competed dollar drew exactly one bidder: that work is effectively locked, and walking in cold is a waste of a small team's quarter. VA's Network Contract Office 7 bought the same NAICS, set aside 100% of it, and drew almost eleven offers per award: a wide-open, small-business-only fight. If you sell janitorial services, those two offices are not the same opportunity with the same odds. They are opposite decisions, and the market-wide number tells you neither. Per-office is the only resolution at which "average competition per contract," the metric the good BD advice tells you to lead with, is actually true.
The discovery list sorts three ways, one for each question a targeting decision asks:
sort=biggest (default): where the money is. Rank offices by obligations in the NAICS. Answers "who spends the most on what I sell."sort=most_open: rank by the lowest single-bidder share first. Answers "where is the work actually contested," so you spend your capture effort where a well-run proposal can win rather than where an incumbent is effectively wired in.sort=most_setaside: rank by the highest set-aside share first. Answers "which offices route this NAICS through small-business programs," which is the whole ballgame if you hold a certification.The read you draw depends on which side of an award you sit. A high single_bidder_pct at an office is a warning if you are trying to break in (someone else owns it) and a green light if you are the incumbent (your position is defensible). A high setaside_pct is an open door if you are certified and a closed one if you are not. The endpoint states the fact; you supply the context that turns it into a decision.
Once an office is on your list, profile it. Pass its code:
curl -H "Authorization: Bearer YOUR_API_KEY" \
"https://govconapi.com/api/v1/offices/36C10B"
Real response (top NAICS abbreviated for length):
{
"office_code": "36C10B",
"office_name": "TECHNOLOGY ACQUISITION CENTER NJ (36C10B)",
"sub_agency": "Department of Veterans Affairs",
"department": "Department of Veterans Affairs",
"obligated": 13934976994.0,
"contracts": 1744,
"avg_offers": 3.0,
"single_bidder_pct": 38.0,
"setaside_pct": 49.0,
"top_naics": [
{ "naics_code": "541512", "obligated": 6724467870.0, "contracts": 292 },
{ "naics_code": "541519", "obligated": 3963242705.0, "contracts": 1066 },
{ "naics_code": "541511", "obligated": 1385423547.0, "contracts": 73 },
{ "naics_code": "511210", "obligated": 1200921077.0, "contracts": 51 }
],
"data_as_of": "2026-08-21",
"_sources": ["usaspending_fpds"]
}
This is the office in one view. VA's Technology Acquisition Center is a $13.9B IT shop across 1,744 contracts, sets aside nearly half of what it buys (49%), and runs a moderate 3.0 offers per competed award. Its top_naics tells you what it actually buys, in order: it is an IT-services and custom-programming office (541512, 541519, 541511) with a software-publishing line (511210). If your NAICS is not on that list, this office is not your buyer no matter how large it is. The office_code is the same awarding_office you see on award records and on the Recompete Watchlist, so any award or recompete hands you straight into this profile.
For a certified small business, the highest-value read on this endpoint is which offices actually route a NAICS through set-asides, because national spending totals say nothing about whether you can compete. Sort a NAICS by most_setaside and the small-business-heavy offices surface. In facilities support (NAICS 561210), for example, the USCIS contracting office (ERBUR, within Homeland Security) obligated $141M with 100% of actions set aside and drew an average of 5.4 offers: a large, entirely small-business, genuinely contested market at a single office. That is a targeting decision you can make from one row, and it is invisible in a national "top agencies for 561210" total that mixes full-and-open mega-contracts in with it.
The set-aside share is a share of actions carrying any set-aside type. It tells you the office's lean, not the specific program; pair it with the actual set-aside types on that office's awards (via the Awards API) when you need to confirm the exact program you qualify under.
An office is targetable only if you can reach the people in it. Every response carries the office_code and office_name, and that is the hinge into GovCon Contacts, the people layer for federal procurement. The motion is short: this endpoint tells you which office is worth your time and how it buys; Contacts turns that office into its active contracting officers, each with their buying patterns and the vendors they award to most, which is both your outreach list and your read on who you would be competing with or teaming alongside. The office is the join key between the two.
| Approach | What it gives you | The gap |
|---|---|---|
| "Top buying agencies for NAICS X" lists | The agencies that spend the most on a NAICS, with dollar totals | Stops at the agency; you still cannot tell which office to target or how contested it is |
| Raw USASpending by agency | Every award action, filterable by awarding office if you build it | You write the per-office rollup, the competition math, and the set-aside math yourself |
| Market-wide competition figures | One average offer count / single-bidder rate per NAICS | The average describes almost no individual office (561720: 35% market-wide, 0% to 100% by office) |
| Contracting Office Intelligence | The offices that buy a NAICS, ranked, each with its own obligations, competition, and set-aside facts, plus a per-office profile | The "good target for me" conclusion is yours to draw |
| Field | Meaning |
|---|---|
office_code | The FPDS contracting-office code (e.g. 36C10B). Stable identifier; matches awarding_office on awards and recompetes, and keys into the profile endpoint and GovCon Contacts. |
office_name | The office's name as reported on its awards (passthrough). |
sub_agency / department | The sub-agency and top-level department the office sits under. |
obligated | Sum of positive federal obligations (USD) over the trailing three years: for the office in this NAICS (discovery) or across everything the office buys (profile). |
contracts | Distinct contracts (by contract award unique key). |
vendors | Distinct vendors (by UEI) the office bought this NAICS from. Discovery rows only. |
avg_offers | Average offers received over actions that recorded competition. A read on how contested the office's buys are. |
single_bidder_pct | Share of competed actions that drew exactly one offer. High = effectively locked to one bidder; low = genuinely contested. |
setaside_pct | Share of actions carrying any set-aside. High = a small-business-heavy office. |
top_naics | Profile only: the NAICS the office buys most, by obligations (up to eight). Tells you what the office actually buys. |
data_as_of | The date the rollup was last rebuilt. |
_sources | Always ["usaspending_fpds"]. |
| Parameter | Notes |
|---|---|
naics | Discovery only. 2 to 6 digits, required. Matched as stored on the award (6 digits is the normal case). A bad shape returns 400. |
sort | Discovery only. biggest (default), most_open (lowest single-bidder first), or most_setaside (highest set-aside first). Any other value returns 400 with the valid list. |
limit | Discovery only. 1 to 100, default 25. |
{office_code} | Profile path parameter. An unknown code returns 404. The profile takes no query parameters; passing any returns 400. |
Those lists resolve the buyer to the agency (DoD, GSA, VA). This resolves it to the contracting office inside the agency, which is the unit you actually target and respond to, and it attaches each office's own competition and set-aside facts. The agency total cannot tell you which of an agency's offices to pursue or how contested any of them are.
Because competition is set at the office, not the department. In janitorial services (NAICS 561720) the market-wide single-bidder rate is 35%, but individual offices in that same NAICS run from 0% to 100%. Targeting on the market-wide average would point you at offices that look competitive and are effectively locked, and away from offices that are wide open. The per-office number is the one that reflects your real odds.
That the office's competed awards in the NAICS tend to draw exactly one offer, which usually means the work is effectively held by an incumbent. It is a warning if you are trying to break in and a reassurance if you are defending. It is a fact about the office's history, not a prediction about a specific future award.
Sort a NAICS by most_setaside to surface the offices that route that work through small-business programs, then read each office's avg_offers and single_bidder_pct to see how contested that small-business market is. A high set-aside share with a healthy offer count (like USCIS in facilities support, 100% set-aside at 5.4 offers) is a real, competable small-business market at a single office.
Task orders are often competed at the vehicle level, so the order itself records no offer count. Those actions are excluded from the single-bidder and average-offers math rather than being treated as single-bidder. The competition read is strongest at offices that award standalone contracts; it is more partial at IDIQ-heavy offices.
No. Every field is a fact from the award record. Which office is a good target depends on your certifications, past performance, and capacity, which only you know, so the endpoint gives you the facts and leaves the call to you.
Take the office_code or office_name into GovCon Contacts, which returns the office's active contracting officers, their buying patterns, and the vendors they award to most. This endpoint tells you which office and how it buys; Contacts turns it into named people.
Both endpoints are free and included on every plan, including the free tier. See the API reference for the full field and error catalogue.