GovCon API

Federal Contractor Search API

873K SAM-registered firms, filtered programmatically by NAICS, state, certification, active-status. JSON, paginated, ready to integrate.

Just want to search? Use the free web lookup — same filters, no signup, no captcha gymnastics. This page covers the API endpoint for building it into your own tools.

SBA's Dynamic Small Business Search (DSBS) is a useful tool with a serious limitation: it's a web UI, not an API. There's no way to programmatically request "all active CA-based WOSB firms in NAICS 541330" without scraping or copy-pasting. This endpoint exposes the same kind of filtering directly as JSON. Pass the filters you want as query parameters, get back paginated results, integrate into whatever you're building.

Who this page is for: developers building procurement tools, BD/sales platforms, RFP-matching systems, market research dashboards, or any product that needs to identify federal contractors by business attributes. Compliance teams building automated supplier discovery workflows.

What this page is NOT: a replacement for SBA's certification-validation services. We expose what SAM publishes (mostly self-certified flags). For SBA-certified-program confirmation (8(a), HUBZone, SBA-certified WOSB), see data caveats.

On this page:

What you can filter on

Five filter parameters, combinable. At least one must be provided.

Pagination via limit (1-100, default 20) and offset (≥0, default 0). The response includes pagination.total for the full match count.

Worked examples

Real queries, real result counts (sourced from a recent prod sweep).

All active California-registered WOSB firms.
GET /api/v1/entities/search?state=CA&business_type=8W&active_only=true
~10,172 firms
Active firms in NAICS 541330 (Engineering Services), nationwide.
GET /api/v1/entities/search?naics=541330&active_only=true
~44,817 firms
Active SDVOSB firms in Texas.
GET /api/v1/entities/search?state=TX&business_type=QF&active_only=true
~5,093 firms
Rare combo: Active EDWOSB firms in New Jersey.
GET /api/v1/entities/search?state=NJ&business_type=8E&active_only=true
~59 firms
Self-cert Small Disadvantaged Business firms in Maryland (no NAICS filter).
GET /api/v1/entities/search?state=MD&business_type=27&active_only=true
~10,400 firms; paginate via limit + offset
Name-only search (Developer tier, no filters needed).
GET /api/v1/entities/search?q=BOEING&limit=5
Returns matches like BELL BOEING JOINT PROJECT OFFICE alongside the Boeing parent. Trigram-fuzzy, case-insensitive.

Response shape

Each match is the short form (uei, legal_business_name, dba_name, registration_status, registration_expiration_date, primary_naics, business_types, business_types_labels, physical_city/state/country). Pagination metadata at the top.

{
  "query": {
    "q": null, "naics": "541330",
    "state": "CA", "business_type": "8W",
    "active_only": true
  },
  "pagination": {
    "limit": 20, "offset": 0,
    "total": 487, "has_next": true
  },
  "results": [
    {
      "uei": "...",
      "legal_business_name": "ACME ENGINEERING LLC",
      "dba_name": null,
      "registration_status": "A",
      "registration_expiration_date": "2026-08-12",
      "primary_naics": "541330",
      "business_types": ["27", "2X", "8W", "A2", "LJ"],
      "business_types_labels": [
        "Self Certified Small Disadvantaged Business",
        "For Profit Organization",
        "Women-Owned Small Business (WOSB)",
        "Woman-Owned Business",
        "Limited Liability Company"
      ],
      "physical_city": "OAKLAND",
      "physical_state": "CA",
      "physical_country": "USA"
    },
    ...
  ]
}

For a full record (CAGE codes, full address, NAICS list, PSC, source date), call /api/v1/entities/{uei} on the UEI from each result.

Use cases this enables

Set-aside competition mapping. Before responding to an 8(a) or WOSB set-aside RFP, you want to know how many qualified firms exist. NAICS + state + cert filter gives you the population. From there you can estimate competitive density (top 20% vs long tail) and decide whether bidding is worth the proposal effort.
Prime contractor sourcing for subcontract work. You're a small firm hunting for primes to team with. Filter by NAICS + state + active. Sort the result list by registration age (older = more established). Each match links via UEI to award history (/companies/{uei}) so you can prioritize firms with active federal contracts.
Procurement market sizing. Building a B2B SaaS targeting federal contractors? Filter by NAICS to get your TAM. The pagination.total field returns the exact firm count without paginating through results.
Diversity-spend reporting feed. Your prime-contractor compliance team needs to verify subcontractor demographic certifications quarterly. Pre-filter by business_type codes you care about (8W, QF, 8E, 23, OY, PI, NB) and snapshot the list per quarter. Use the UEIs to chase entity-level detail when needed.
RFP-bid-list construction. A federal program office needs to build a Sources Sought distribution list. NAICS + state + cert + active filter produces a clean list of qualifying registered firms. Export, format, send.
Auto-generated long-tail content. Build directory pages on your own site (e.g. /naics/{code}/contractors-by-state). Each combination is a unique landing page; pagination.total tells you which combos have enough firms to justify a page vs being too sparse.

vs DSBS, vs SAM.gov search

SBA DSBS SAM.gov entity search This endpoint
Programmatic access Web UI only Limited official API; needs key application JSON, immediate
Multi-filter (NAICS × state × cert × active) Web form, results paginated by HTML Partial; complex parameter schema Single GET with query params
Total match count Top-of-page only Available in pagination metadata pagination.total in response
Pricing Free (web) Free with API key approval $39/mo Pro Bundle

If your use case is one-off lookup of a known firm, sam.gov works fine. If you need filtered lists in your code, this endpoint trades $39/mo for the work of integrating against SAM's official API or scraping DSBS.

Combining with other endpoints

What this doesn't do (data caveats)

Most "SBA-certified" filters are self-certified, not SBA-determined. The business_type codes you can filter on are mostly self-attested by the registrant. The actual SBA-certified flags (A6=8(a), XX=HUBZone, A4=SBA-Certified SDB, JT=8(a) JV) are essentially absent from this dataset (verified across all 873K entities). What's available are the self-cert variants: 27 (Self-Cert SDB), 8W (Self-Cert WOSB), QF (SDVOSB), A5 (Veteran-Owned). Confirming actual SBA-certified status requires SBA's DSBS, a separate system you'd need to integrate alongside this one.
Near-real-time, not real-time. We track SAM and refresh as upstream data publishes. In rare cases there can be up to ~30 days of latency between an entity updating their record on sam.gov and the change appearing here. The registration_expiration_date field reflects the most recent snapshot we have. For time-sensitive decisions, verify directly with sam.gov.
Sort is alphabetical by legal_business_name. No "rank by award value" or "rank by recency". For award-ranked sorts, search first to get UEIs, then call /api/v1/companies/{uei} per UEI for the award aggregations.
Foreign entities have state = null. The state filter is US-only. To find non-US registered contractors, omit the state filter and read physical_country in results.
~243K of 873K entities have no NAICS data at all. Filtering by NAICS will exclude them entirely. If your use case is "every active firm in CA regardless of NAICS," omit the naics filter.

Pricing

The multi-filter mode (NAICS, state, business_type, active_only) is on the Pro Bundle ($39/mo). Name-only search (q=) is available on the Developer tier ($19/mo) for use cases like autocomplete and known-name lookup.

No annual contracts, no setup fees, monthly billing via Stripe. Cancel anytime.

FAQ

Is the result list deterministic?

Yes. Sort is alphabetical by legal_business_name. Pagination via offset is stable as long as the underlying data doesn't change between calls. Polling the same query multiple times within the same data snapshot returns the same results.

Why do I get an error when I pass business_type=ZZ?

To prevent silent empty-result confusion. Unknown business-type codes return 400 with a pointer to the valid-code list. The 76 valid codes are documented in our OpenAPI spec.

Does NAICS match the entity's "primary" NAICS or any NAICS they claim?

Both. We match the entity's primary_naics field AND any matching code in their declared naics_codes[] array. The Y/N/E suffix variants (SAM's per-NAICS small-business eligibility flag) are all matched.

Can I get the awards or NAICS-spread for each search result?

Not in this response (would explode the payload size). Get UEIs from search, then call /api/v1/companies/{uei} per UEI for award aggregations. Pro Bundle covers both endpoints.

What's the rate limit for paginated bulk export?

1,000 requests/hour per API key (60/min per IP burst). At limit=100, that's 100K records/hour theoretical maximum. For larger one-time exports, contact us; we can offer flat-rate bulk dumps.

Does the search support fuzzy NAICS (e.g. "all 5413xx" engineering)?

Not currently. Pass exact 6-digit NAICS codes. If you want NAICS-prefix wildcards or hierarchical roll-ups (3-digit, 4-digit, 5-digit), let us know; it's a tractable addition if usage warrants it.

Back to GovCon API · OpenAPI spec · Interactive docs