OKKI Go research note

How to Search Companies by NAICS Code

Find companies by NAICS code and location using business-record sources. Follow a live public-data query, compare search routes, and verify establishment matches.

To search companies by NAICS code, first confirm the industry definition, then use a database containing business records and combine the code with location criteria. Census definitions identify activities; a company or establishment database supplies the names. Check each returned location, its status and its actual activity before using the list.

A useful business list needs names and places. That is where I start this search: with the record I want to retrieve, before choosing a code. You can then work backward to the industry definition and forward to a database that actually holds those records.

Industry activity and geographic scope

Write your target in plain language: the activity, the area and the kind of location you need. For instance, you might want custom programming businesses with a San Francisco location. That is a search specification, not a claim that every business carrying a software-related code fits your project.

Decide whether your territory means city limits, a county, a ZIP code or a service area. An address filter identifies a recorded location. It does not establish all the places where that business sells or delivers. Keep those two questions separate in your notes.

Company headquarters versus individual establishments

I read the official NAICS manual for its unit of classification: an establishment is generally a physical operating location, and an enterprise may contain several establishments in different industries. A separate headquarters establishment can receive a different classification from the operating sites it supports. There are also exceptions for dispersed operations.

I would therefore specify “operating locations” when looking for local facilities, and “headquarters” when identifying corporate offices. You should not discard a branch as a duplicate merely because its parent already appears. Nor should you count every branch as a separate corporate account.

Your first output is a short search specification: activity, territory, location type and whether you need one row per location or one row per enterprise. You now have something concrete to compare with a database’s coverage.

What does your industry code actually include? That is the next question I take to the manual. Once that is settled, choose the source that can turn the code into records. These are separate lookups, even when a website offers both. You need the definition to interpret the code and the record source to retrieve identifiable businesses.

Use Census definitions to check the activity

Open the Census NAICS site at https://www.census.gov/naics/ and use the appropriate year’s search or manual. Read the full industry description and its cross-references. A matching title is a starting point; the inclusion and exclusion language tells you whether the activity belongs.

For our programming search, the 2022 manual identifies 541511 as Custom Computer Programming Services. Its entry describes the industry. It does not give you the names of programming businesses in San Francisco. That actual entry is a useful stopping point: classification is complete enough to begin retrieval, but retrieval has not happened.

I keep “NAICS United States, 2022” beside the code in these research notes. You should preserve that context too. If another source uses a different edition or country-specific detail, check its mapping before combining results. A code number stripped of its classification context is harder to audit later.

Confirm that the database contains company or establishment records

For a broader commercial list, NAICS Association’s Targeted Business Lists page at https://www.naics.com/business-lists/ accepts industry and geographic requirements. It describes record layouts containing names, addresses and codes. The service is commercial; submitting requirements leads to availability and pricing review, not an instant free export of every match.

Its separate Company Lookup Tool works in the other direction. You search a known company using company/ZIP, company/address, phone or DUNS. That can help inspect a candidate, but those displayed methods are not the same as starting a territory-wide search with a NAICS code.

For a public local alternative, San Francisco’s Registered Business Locations dataset contains one row per registered location. Its current schema exposes a self-reported NAICS field and business-location geography. This gives us a directly queryable example, with a narrower population than a nationwide business directory.

What will you receive? I compare the published fields before treating a source as suitable. NAICS Association separates layouts and optional fields; San Francisco publishes registration fields. Neither source should be assumed to contain every contact, parent relationship or operational detail you might want. Pick the source for the rows you need, then verify what it actually supplies.

We now have a code and a record source. The retrieval task is to put industry and geography into the same request, then inspect the returned rows. The two routes below show a commercial list request and a working public query.

Combine the NAICS code with geographic criteria

On the NAICS Association business-lists form, enter your industry requirement under “What Type of Companies do you wish to Target?” Include the code and edition in that description. In “Geographic Area of Interest,” specify the territory. The page lists states, counties, ZIP codes, metro areas and a radius from a U.S. address.

Then choose any necessary size criteria. If you need local branches rather than headquarters, state that requirement explicitly and ask for a layout that carries location status. Review a sample and the quoted scope before purchasing. I have checked the published form and layouts, not purchased or tested a list.

For the public route, open the San Francisco dataset at https://data.sfgov.org/d/g8m3-pdis. Its July 2026 update matters: the current API field is self_reported_naics_code, while the old NAICS description columns have been deprecated. Do not copy an older query that expects those descriptions to remain populated.

You can paste this exact read-only request into a browser. It combines the industry value with the business-location city and limits the response for inspection.

  • https://data.sfgov.org/resource/g8m3-pdis.json?self_reported_naics_code=541511&city=San%20Francisco&$limit=3

The code and city are equality filters. The limit makes this a small preview, not the total market. I retrieved this request successfully on September 10, 2026. It returned business-location rows rather than industry definitions. The saved response provides evidence that this specific query worked on that date; it does not promise the same rows forever.

Inspect matching records and refine the query

Read dba_name and ownership_name alongside ttxid, the location identifier. Use full_business_address, city and business_zip for the operating-location fields. The dataset also contains mailing-address fields, so do not silently substitute mail_city or mail_zipcode when your task is to find physical locations.

For a different exact code, replace 541511 with a code you have checked. To narrow the query to a business ZIP, add &business_zip=94105. The current schema identifies that field as the business-location ZIP. Inspect the returned records again after changing a filter; do not assume a narrower request proves a more accurate classification.

I find a reason to slow down in the actual response: one returned location has a location_end_date of March 19, 2015. The industry and city filters therefore returned a historical location as well as rows without that field. A match is not automatically a currently operating prospect.

I would use that result to inspect closure fields before enlarging the download. Check location_end_date, business end date and Administratively Closed. Absence of an end date is only the absence of a recorded closure in that field; it is not independent proof that the location is operating today.

No matches? I would first check your code edition, the source’s code granularity and the geography field. San Francisco permits self-reported codes up to six digits, so an exact six-digit query will not retrieve a shorter value. Decide whether a broader search is justified by your activity definition before relaxing the criteria.

That is why the source choice matters as much as the code. The manual supplied the activity definition; the record endpoint supplied identifiable locations and status fields. One cannot substitute for the other. You can now explain both why a row was retrieved and what still needs checking.

The last step is to turn retrieved rows into a usable list. Keep the original values intact while checking the business itself. You need to know whether a questionable match comes from the code, the location or a change in the business.

Check operating activity and establishment identity

San Francisco explicitly says its NAICS code is self-reported and has not been verified by the Treasurer & Tax Collector. I read that as a limit on what you can conclude: government publication does not make the classification independently verified. Check the company’s own description of its products or services and look for evidence that the relevant location performs the activity you need.

Treat mismatches as research questions. A company may operate several activities, and its headquarters may not perform the activity of a branch. Verify the specific establishment before rejecting the whole company or applying a parent’s description to every site.

Remove duplicates and record uncertain matches

For this public dataset, preserve both the location ID and business account number. They serve different purposes. Keep separate location rows while investigating whether they belong to the same account; then group only as your original search specification requires. Name similarity alone is not enough to settle identity.

My working list would retain the source URL, query, retrieval date, raw code, location identifiers, recorded closure information and an activity-check note. Mark unresolved rows for review rather than quietly deleting them or declaring them qualified. You can then revisit a disputed match without reconstructing the original search.

If this research feeds an OKKI Go prospecting workflow, carry the location and activity findings into your account notes before deciding whom to approach. The industry match tells you why to investigate the business. It does not establish a buying need or identify the right person to contact.

You are finished when the list answers the original request: identifiable businesses or establishments, in the intended geography, with classification and operating-status uncertainties visible. I would keep the saved query with your list, so you can refresh the search without losing the meaning of its filters.

Frequently asked questions

Does the Census NAICS lookup return a list of companies?

The Census code definitions describe industries. Use them to choose and interpret a code, then move to a source containing business records. The official 541511 entry provides the activity description; a separate company or establishment search is needed to retrieve names and locations.

Can a company have more than one NAICS code?

A company can have establishments classified in different industries. The official classification focuses on each establishment’s primary activity. Commercial sources may also supply multiple code fields, so check whether a field is primary, secondary or associated with another location before combining records.

How do I limit a NAICS business search to a location?

Combine the industry criterion with a business-location city, ZIP, county or other supported geographic filter. In the San Francisco example, self_reported_naics_code=541511 and city=San Francisco select recorded locations matching both values. Mailing geography and headquarters-only filters answer different questions.