873K SAM-registered firms, filtered programmatically by NAICS, state, certification, active-status. JSON, paginated, ready to integrate.
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.
Five filter parameters, combinable. At least one must be provided.
q=<name>: case-insensitive name substring (2-100 chars). Trigram-indexed for fuzzy matches. Available on Developer tier; everything below requires Pro Bundle.naics=<code>: 6-digit NAICS code (no Y/N suffix). Matches both the entity's primary NAICS and any of its claimed secondary NAICS.state=<XX>: 2-letter US state code. Matches the entity's registered physical state.business_type=<code>: 2-3 char SAM business-type code (e.g. 8W WOSB, QF SDVOSB, 27 Self-Cert SDB, A8 Non-Profit). 76 valid codes; unknown codes return 400.active_only=true: restrict to currently-active SAM registrations.Pagination via limit (1-100, default 20) and offset (≥0, default 0). The response includes pagination.total for the full match count.
Real queries, real result counts (sourced from a recent prod sweep).
GET /api/v1/entities/search?state=CA&business_type=8W&active_only=true
~10,172 firms
GET /api/v1/entities/search?naics=541330&active_only=true
~44,817 firms
GET /api/v1/entities/search?state=TX&business_type=QF&active_only=true
~5,093 firms
GET /api/v1/entities/search?state=NJ&business_type=8E&active_only=true
~59 firms
GET /api/v1/entities/search?state=MD&business_type=27&active_only=true
~10,400 firms; paginate via limit + offset
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.
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.
/companies/{uei}) so you can prioritize firms with active federal contracts.
pagination.total field returns the exact firm count without paginating through results.
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.
pagination.total tells you which combos have enough firms to justify a page vs being too sparse.
| 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.
/api/v1/entities/{uei} (Developer): full entity record for any UEI returned in a search result./api/v1/entities/by-cage/{cage} (Developer): same lookup keyed by CAGE for legacy DoD systems./api/v1/companies/{uei} (Pro Bundle): adds award history aggregations to the entity profile./api/v1/entities/expiring (Pro Bundle): same filters, scoped to registrations expiring within N days./api/v1/exclusions/search?uei={uei} (Developer): debarment check on UEIs from search results./api/v1/vendor-risk/bulk (Pro Bundle): batch up to 100 UEIs from search results for risk screening.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.
registration_expiration_date field reflects the most recent snapshot we have. For time-sensitive decisions, verify directly with sam.gov.
/api/v1/companies/{uei} per UEI for the award aggregations.
state = null. The state filter is US-only. To find non-US registered contractors, omit the state filter and read physical_country in results.
naics filter.
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.
q name search, plus single-UEI and single-CAGE lookups, exclusions search, awards search, opportunities. 1,000 requests/hour./companies/{uei}, seven-signal vendor-risk screening.No annual contracts, no setup fees, monthly billing via Stripe. Cancel anytime.
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.