Skip to content

NAICS competition & market dynamics

How contested a federal market is, and whether a newcomer can break into it. The whole-market picture in /api/v1/naics/{code} tells you the size, the concentration, and who the incumbents are, but not how many bidders an award actually draws, where the work sits, whether the market is growing, or how spread out the winners are. Those are the facts that decide whether a market is worth pursuing, and they are only in the award record.

This endpoint reads them for one NAICS over the federal prime-award record: the average number of offers per award and the share that drew a single bidder (the least-contested buys), the states where the work is performed, the award volume by quarter, and the share of the last year's winners that hold only one or two awards in the market, the long tail that shows whether the field is open or captured. Factual, never scored: the counts are the output, and you read whether a market is contested, concentrated, or open. Pair it with /api/v1/naics/{code}/simplified-acquisition (the small-buy value bands) and /api/v1/naics/{code}/positioning (the language buyers search on). Free with any key.

Path parameter

  • code (path): a NAICS code, 2 to 6 digits (e.g. 561720). A malformed code returns 400; a code with no prime-award activity in the last 12 months returns 404.

This endpoint takes no query parameters; any query string returns 400.

Response

{
  "naics_code": "561720",
  "competition": {
    "avg_offers": 7.7,
    "single_bidder_awards": 1234,
    "single_bidder_pct": 35,
    "awards_with_offers": 3526,
    "awards": 4785,
    "basis": "number_of_offers_received is reported on a minority of awards (~30%); competition reads that subset"
  },
  "geography": [
    { "state": "CA", "awards": 322, "obligated": 292386813 },
    { "state": "WA", "awards": 258, "obligated": 141801821 },
    { "state": "TX", "awards": 241, "obligated": 571337966 },
    { "state": "FL", "awards": 171, "obligated": 207903126 },
    { "state": "MD", "awards": 157, "obligated": 435873520 },
    { "state": "NY", "awards": 149, "obligated": 249055855 }
  ],
  "trend": [
    { "quarter": "2024 Q4", "awards": 494 },
    { "quarter": "2025 Q1", "awards": 747 },
    { "quarter": "2025 Q2", "awards": 943 },
    { "quarter": "2025 Q3", "awards": 1141 },
    { "quarter": "2025 Q4", "awards": 658 },
    { "quarter": "2026 Q1", "awards": 1485 },
    { "quarter": "2026 Q2", "awards": 1076 }
  ],
  "accessibility": {
    "recent_vendors": 1557,
    "low_incumbency_vendors": 1035,
    "low_incumbency_pct": 66,
    "basis": "share of the last year's winners holding <= 2 distinct awards in this NAICS (our record)"
  },
  "socioeconomic": {
    "basis": "share of positive federal obligations by set-aside family, trailing 3 years market-wide",
    "small_business_pct": 36.2,
    "families": [
      { "family": "8a", "obligated_pct": 16.0 },
      { "family": "vosb", "obligated_pct": 13.4 },
      { "family": "sdvosb", "obligated_pct": 10.6 },
      { "family": "wosb", "obligated_pct": 8.3 },
      { "family": "edwosb", "obligated_pct": 5.9 }
    ],
    "_sources": ["usaspending_fpds"]
  },
  "market_profile": "/api/v1/naics/561720",
  "simplified_acquisition": "/api/v1/naics/561720/simplified-acquisition",
  "positioning": "/api/v1/naics/561720/positioning",
  "window": {
    "since": "2025-08-13",
    "trend_since": "2024-10-01",
    "basis": "FPDS prime awards, deduped to award; the record is complete from FY2025 (October 2024)"
  },
  "_sources": ["usaspending_fpds"]
}

competition reads the offers-received field over the last 12 months, deduped to one row per award: avg_offers is the average number of bidders per award, single_bidder_awards and single_bidder_pct are how many, and what share, drew exactly one offer (the least-contested buys, the openings a focused newcomer wins), awards_with_offers is how many awards carried an offer count, and awards is the total awards in the window. Offers are reported on a minority of awards, so the competition figures read that subset, stated in basis.

geography lists the states where the work is performed, ordered by award count, each with net dollars (obligated). trend is the award volume by complete calendar quarter; the current quarter is partial and is omitted. accessibility measures how open the field is: recent_vendors is how many distinct firms won in the last year, and low_incumbency_vendors (with low_incumbency_pct) is how many of them hold only one or two distinct awards in the market. A high share is the long tail of newcomers and occasional winners, the sign a market is not locked up by a few incumbents. It is a low-repetition read over the award record, not a claim that any firm is a first-time federal winner.

socioeconomic is the winner-cert set-aside mix: the share of the market's positive obligations that went to firms holding each certification (8a, sdvosb, vosb, wosb, edwosb, hubzone, sdb), plus small_business_pct, the share going to firms the contracting officer recorded as small. It is winner-based, so it counts a certified firm that won full-and-open work, not just work formally set aside. The families therefore overlap (a firm holding two certifications counts in both, and every service-disabled veteran firm is also a veteran firm), so they are not meant to sum to 100. It answers whether your certification actually wins share in this market, distinct from the set-aside type breakdown on /api/v1/naics/{code}, which is how the work was competed. Best-effort: on a very large NAICS this block may be null rather than delay the response.

market_profile, simplified_acquisition, and positioning cross-link to the whole-market picture, the small-buy value bands, and the language buyers use.

Errors

  • 400: code is not a 2-to-6-digit NAICS, or a query string was sent.
  • 404: no prime-award activity for that NAICS in the last 12 months.

Example

curl -H "Authorization: Bearer YOUR_API_KEY" \
  "https://govconapi.com/api/v1/naics/561720/competition"

GET /api/v1/naics/561720/competition (Janitorial Services) shows a contested but open market: awards draw about 8 bidders on average, roughly a third still go to a single bidder, and two thirds of the year's winners hold only one or two awards. Security Guard Services (561612) is the opposite shape, awards average under two bidders and the large majority go to a single bidder, a far less contested market. The data is the same in both cases; what it means for you is yours to read.

Data notes

  • prime_awards covers FY2025 onward (roughly the last 20 months). competition, geography, and accessibility read the trailing 12 months; trend runs the full record from FY2025, so its earliest quarter is the start of that record, not the start of the market.
  • Offers are sparsely reported. The number_of_offers_received field is present on a minority of awards, so avg_offers and the single-bidder share read that subset; they describe the awards that carry an offer count, not every award.
  • Award counts are distinct awards (deduped to one row per award), not the underlying modification records, so a heavily-amended award counts once.

A REST API and MCP server for U.S. federal procurement data.

Get a free key, emailed instantly, or follow the quickstart.

Found something wrong, missing or confusing on this page?

Press Ctrl + Enter to send a note. Highlight text first and it travels with your note.