Technical writing

Census County Business Patterns: Annual Establishment Counts, Employment, and Payroll for Every US County

· AI Analytics
Federal DataCensus BureauBusinessLocal Economy

County Business Patterns is the Census Bureau's annual series on the structure of private-sector business activity in the United States — published without interruption since 1964. For every county, every state, every metropolitan statistical area, and the nation as a whole, CBP reports how many establishments exist, how many people they employed in mid-March, and what they paid those workers. No other federal dataset delivers establishment-level business structure at the county–NAICS intersection on a recurring annual basis.

What CBP Is and Where It Comes From

CBP draws on the Census Bureau's Business Register — the agency's master inventory of all US businesses, continuously updated through a combination of administrative records (IRS filings, SSA data, state unemployment insurance records) and periodic economic censuses. The Business Register is the closest thing the federal statistical system has to a complete list of US businesses. CBP summarizes that register at the county–NAICS level once a year, publishing data for the reference year with roughly an 18-month lag.

The defining unit of observation in CBP is the establishment — a single physical business location — rather than the firm or enterprise. A national pharmacy chain with 9,000 locations contributes 9,000 establishment records, distributed across the counties where those locations operate. This geographic assignment to the physical location (rather than the corporate headquarters) is what makes CBP useful for local economic analysis: it measures the actual presence of business activity in a place, not just the administrative home of the company that owns it.

CBP covers private nonfarm establishments with at least one paid employee. The nonfarm restriction excludes agricultural production under NAICS codes 111 (crop production) and 112 (animal production and aquaculture). The paid-employee requirement excludes establishments that have no workers on payroll — those are covered by the companion Nonemployer Statistics series, discussed below.

Coverage and Exclusions

The “private nonfarm with paid employees” scope creates important gaps that analysts should understand before treating CBP totals as representing all economic activity in a county.

The government exclusion is particularly consequential in rural counties and in state capitals where public employment is a large share of the local economy. Comparing CBP employment across county types without accounting for this exclusion can produce misleading characterizations of local labor market conditions.

Key Data Fields

Each CBP record is identified by a geographic code and a NAICS code. The primary fields are:

The employment size class breakdowns enable analyses that aggregate employment data alone cannot support: measuring the share of establishments in an industry that are “small businesses” by various definitions, tracking whether consolidation is shifting employment from small to large establishments over time, or estimating the likely number of workers in a county without disclosed payroll figures by multiplying size-class midpoints by establishment counts.

Noise Infusion for Disclosure Avoidance

CBP faces the same confidentiality constraint as every federal statistical program publishing business microdata: publishing a cell that contains only one or two establishments might effectively disclose that employer's payroll or employment. The Census Bureau has handled this constraint differently across CBP's history, and analysts combining data from multiple vintages need to understand the change.

Before 2017, CBP used cell suppression. Cells where fewer than three establishments were present, or where a single employer represented 80% or more of employment, had their numeric values replaced with a flag code indicating the approximate range: flag “A” denoted 0–19 employees, “B” 20–99, “C” 100–249, and so on up through flag “H” for 2,500–4,999. The establishment count for suppressed cells was published; only employment and payroll were suppressed.

Starting with the 2017 reference year, the Census Bureau switched tonoise infusion under a framework related to differential privacy. Rather than suppressing sensitive cells entirely, noise is added to employment and payroll values before publication. The direction and magnitude of the noise are calibrated so that no individual employer's data can be recovered from the published statistics. Noise-infused values are published as actual numbers rather than flag codes, making the post-2017 data appear superficially complete while actually containing small stochastic perturbations.

The practical implication is a methodology break in the CBP series at 2017. Pre-2017 analyses that imputed suppressed cells using size-class midpoints or interpolation will not be directly comparable to post-2017 analyses that treat all published values as exact. For trend analysis spanning the break, the Census Bureau recommends treating 2017-onward data as a new series rather than a continuation of the suppression-based historical series.

Nonemployer Statistics: The Companion Dataset

Nonemployer Statistics (NES) is the Census Bureau's annual series on solo businesses — self-employed individuals and businesses with no paid employees. Where CBP covers employer establishments, NES covers the far larger universe of nonemployer firms: sole proprietors filing Schedule C, partnerships with no employees, and S-corporations with no payroll. NES publishes annual receipts (not payroll, since there are no employees) by NAICS and county.

NES matters increasingly as nontraditional work arrangements grow. Platform-economy workers who receive 1099 income, independent contractors classified as sole proprietors, and freelancers with no employees all appear in NES and are entirely invisible in CBP. In some metropolitan counties, NES nonemployer receipts in professional services, personal care, and transportation exceed CBP employer payroll in those same industries. A complete picture of local business activity requires both series.

NES faces its own disclosure avoidance constraints and uses similar noise-infusion methods to CBP. The two datasets share the NAICS classification and county FIPS geography, making combination straightforward at the cell level.

CBP vs. QCEW vs. the Economic Census

Three federal programs collectively describe the structure and dynamics of US business activity. Understanding their relationships prevents double-counting, methodological confusion, and misinterpretation of differences in their numbers.

QCEW (Quarterly Census of Employment and Wages) is the BLS program derived from state UI tax filings. It covers approximately 97% of all US jobs, including government employment, and publishes quarterly data with a five-month lag. QCEW is the better choice for real-time employment monitoring, wage trend analysis, and any application that needs government employment or quarterly frequency. CBP is the better choice when you need establishment size-class distributions, when you want payroll data for the private nonfarm sector in a consistent annual snapshot, or when you are working backward through Economic Census benchmarks where CBP serves as the annual interpolator. The two programs use different source systems (Business Register vs. UI records) and different disclosure avoidance approaches, which produces reconcilable but not identical establishment and employment counts.

Economic Census is the Census Bureau's comprehensive quinquennial survey of US businesses, conducted in years ending in 2 and 7. The Economic Census collects receipts, value added, capital expenditures, cost of materials, and other financial detail at fine industry and geographic levels — information that CBP and QCEW do not contain. It is the gold standard for measuring the productive structure of the US economy but appears only once every five years with an additional two-year publication lag. CBP functions as the annual bridge between Economic Census vintages: researchers tracking industry concentration or establishment counts between census years use CBP as the interpolating series. This bridge role is explicitly recognized in the Census Bureau's own documentation and in the economic geography literature.

The practical hierarchy is: Economic Census for the most detailed structural snapshot every five years; CBP for annual updates to establishment structure and payroll; QCEW for quarterly employment and wages including government.

API Access

The Census Bureau publishes CBP through its standard Data API atapi.census.gov/data/{year}/cbp. The API follows the standard Census query syntax:

No API key is required for small queries. The Census Bureau offers free registration for a key that removes the rate limit — essential for bulk county-level pulls across all states. The API returns JSON arrays where the first row is the column header; all numeric fields are returned as strings and must be converted explicitly. Noise-infused cells appear as integers; the API does not flag which values have been perturbed.

Research Applications

Industrial clustering and agglomeration. The location quotient — a county's share of employment in an industry divided by the national share of employment in that same industry — is the standard measure of industrial concentration. An LQ greater than 1 means the county is more specialized in that industry than the national average; an LQ of 2 means twice as concentrated. CBP provides the annual employment data needed to compute LQs at the county–NAICS level for every year since 1998 (the first NAICS-based CBP vintage).

Small business concentration. CBP's employment size class breakdowns enable direct measurement of whether an industry is dominated by large employers or fragmented among small ones. Comparing the share of establishments with fewer than 20 employees across counties and over time documents the ongoing consolidation in retail, grocery, and banking — or its absence in locally fragmented industries like restaurants and personal services.

Health services access. Physician offices (NAICS 621111), hospital establishments (NAICS 622110), and retail pharmacies (NAICS 446110) per 10,000 residents by county — derived from CBP establishment counts matched to Census Bureau population estimates — are standard inputs to health care access research and rural health policy analysis. CBP is the only federal source providing these establishment counts at the county level annually.

Economic development baseline. Before siting an industrial facility, a workforce training program, or a targeted tax incentive, economic development organizations use CBP to characterize the existing industry mix of candidate counties: manufacturing-dependent, service-dependent, government-dependent, or diversified. CBP provides this baseline in a standardized, comparable form for all 3,100-plus US counties.

Business dynamism context. CBP measures the stock of establishments at a point in time; the Census Bureau's companion Business Dynamics Statistics (BDS) program adds the flow dimensions — establishment births (new entries), deaths (exits), expansions, and contractions. BDS was the data source for the Haltiwanger, Jarmin, and Miranda research showing that young firms, not small firms, are the primary drivers of net job creation in the United States. CBP provides the stock; BDS provides the dynamics. Together they describe both the structure and the vitality of local business ecosystems.

Business Dynamics Statistics

BDS is published annually by the Census Bureau and covers the universe of private-sector employer establishments in the US, tracking entry and exit events, job creation through establishment birth and expansion, and job destruction through establishment death and contraction. BDS is derived from the Longitudinal Business Database, a panel version of the Business Register that links establishment records across years to identify the same physical location over time.

The key insight from decades of BDS-based research is that gross job flows are enormous relative to net job creation. In any given year, the US economy simultaneously creates roughly 15 million jobs through establishment births and expansions and destroys roughly 14 million jobs through deaths and contractions — with the small net difference determining whether total employment grows or shrinks. CBP captures only the net stock resulting from these flows; BDS reveals the underlying churn that stock-based data obscures.

BDS publishes its county-level tables at a coarser industry aggregation than CBP (sector level rather than 6-digit NAICS) and with a longer publication lag, but for research questions involving entry rates, exit rates, and job reallocation, it is the appropriate primary source rather than CBP alone.

Python: Location Quotient Analysis for Ohio Manufacturing

The following script queries the Census CBP API for all Ohio counties, retrieves manufacturing (NAICS 31–33) establishment counts and employment, fetches national totals for the same industry and for all industries, computes the location quotient for each county, and prints the ten most manufacturing-concentrated counties in the state.

import requests
import pandas as pd

# Query Census Bureau CBP API for all Ohio counties (FIPS 39)
# Filter to manufacturing (NAICS 2017 prefix 31, 32, or 33)
# Compute location quotient vs. national manufacturing share

STATE_FIPS = "39"   # Ohio
YEAR = "2022"
API_KEY = ""        # optional: register at api.census.gov for higher rate limits

base = "https://api.census.gov/data/" + YEAR + "/cbp"

# --- Step 1: county-level manufacturing employment for Ohio ---
county_params = {
    "get": "GEO_ID,NAME,NAICS2017,NAICS2017_LABEL,ESTAB,EMP,PAYANN",
    "for": "county:*",
    "in": "state:" + STATE_FIPS,
    "NAICS2017": "31-33",   # 2-digit manufacturing sector aggregate
}
if API_KEY:
    county_params["key"] = API_KEY

resp = requests.get(base, params=county_params, timeout=30)
resp.raise_for_status()

rows = resp.json()
county_df = pd.DataFrame(rows[1:], columns=rows[0])

# Convert numeric fields (API returns strings)
for col in ["ESTAB", "EMP", "PAYANN"]:
    county_df[col] = pd.to_numeric(county_df[col], errors="coerce")

county_df = county_df.dropna(subset=["EMP"]).copy()
county_df = county_df[county_df["EMP"] > 0].copy()

# --- Step 2: national manufacturing employment (all industries = 31-33) ---
nat_params = {
    "get": "GEO_ID,NAICS2017,EMP",
    "for": "us:*",
    "NAICS2017": "31-33",
}
if API_KEY:
    nat_params["key"] = API_KEY

nat_resp = requests.get(base, params=nat_params, timeout=30)
nat_resp.raise_for_status()
nat_rows = nat_resp.json()
nat_df = pd.DataFrame(nat_rows[1:], columns=nat_rows[0])
nat_mfg_emp = pd.to_numeric(nat_df.loc[0, "EMP"], errors="coerce")

# --- Step 3: national total employment across all industries ---
nat_total_params = {
    "get": "GEO_ID,NAICS2017,EMP",
    "for": "us:*",
    "NAICS2017": "00",   # "00" = all NAICS industries total
}
if API_KEY:
    nat_total_params["key"] = API_KEY

nat_total_resp = requests.get(base, params=nat_total_params, timeout=30)
nat_total_resp.raise_for_status()
nat_total_rows = nat_total_resp.json()
nat_total_df = pd.DataFrame(nat_total_rows[1:], columns=nat_total_rows[0])
nat_total_emp = pd.to_numeric(nat_total_df.loc[0, "EMP"], errors="coerce")

# National manufacturing share of employment
nat_mfg_share = nat_mfg_emp / nat_total_emp

# --- Step 4: county total employment for LQ denominator ---
county_total_params = {
    "get": "GEO_ID,NAME,NAICS2017,EMP",
    "for": "county:*",
    "in": "state:" + STATE_FIPS,
    "NAICS2017": "00",
}
if API_KEY:
    county_total_params["key"] = API_KEY

ct_resp = requests.get(base, params=county_total_params, timeout=30)
ct_resp.raise_for_status()
ct_rows = ct_resp.json()
ct_df = pd.DataFrame(ct_rows[1:], columns=ct_rows[0])
ct_df["EMP_total"] = pd.to_numeric(ct_df["EMP"], errors="coerce")
ct_df = ct_df.rename(columns={"GEO_ID": "GEO_ID"})

# Merge manufacturing and total employment on GEO_ID
merged = county_df.merge(
    ct_df[["GEO_ID", "EMP_total"]],
    on="GEO_ID",
    how="left",
)
merged = merged[merged["EMP_total"] > 0].copy()

# Location quotient = (county mfg share) / (national mfg share)
merged["county_mfg_share"] = merged["EMP"] / merged["EMP_total"]
merged["location_quotient"] = merged["county_mfg_share"] / nat_mfg_share

# Clean county name
merged["county_name"] = merged["NAME"].str.replace(", Ohio", "", regex=False)

# Top 10 manufacturing-concentrated counties
top10 = (
    merged.sort_values("location_quotient", ascending=False)
    .head(10)
    [["county_name", "ESTAB", "EMP", "PAYANN", "location_quotient"]]
    .reset_index(drop=True)
)

top10["PAYANN_M"] = (top10["PAYANN"] / 1000).round(1)   # payroll: $1,000s -> $M
top10["location_quotient"] = top10["location_quotient"].round(2)

print(
    top10[["county_name", "ESTAB", "EMP", "PAYANN_M", "location_quotient"]]
    .rename(columns={
        "county_name": "County",
        "ESTAB": "Establishments",
        "EMP": "Employment",
        "PAYANN_M": "Payroll ($M)",
        "location_quotient": "LQ",
    })
    .to_string(index=False)
)

A few notes on the implementation. The Census API returns all numeric fields as strings, so explicit conversion with pd.to_numeric is required before arithmetic. The NAICS code “31-33” is a Census API shorthand for the manufacturing sector aggregate — it is not a standard NAICS code but is recognized by the CBP endpoint. The code “00” requests the all-industries total. Noise-infused cells appear as ordinary integers; the API provides no flag distinguishing perturbed from exact values, so results for small counties with few manufacturing establishments should be interpreted with appropriate caution.

The location quotient formula is straightforward to generalize: substitute any 2–6 digit NAICS code for 31-33 to measure concentration in any other industry, substitute any state FIPS for Ohio to run the same analysis in a different state, or remove the state filter entirely to compare all US counties.

Limitations and Practical Cautions

The 18-month publication lag is the most significant operational limitation. CBP data for calendar year 2023 became available in mid-2025. For any application requiring near-real-time tracking of employment conditions — recession monitoring, disaster impact assessment, post-announcement job creation validation — QCEW with its five-month lag is more appropriate. CBP is a structural dataset suited to baseline characterization and longer-term trend analysis rather than current conditions monitoring.

The mid-March employment snapshot introduces seasonal bias for industries with strong seasonality. Construction employment in northern counties in mid-March is well below summer peaks; resort and hospitality employment in ski-county destinations is elevated relative to the annual average. Analysts comparing CBP employment across industries should be aware that the March reference date systematically advantages some industries and disadvantages others in cross-sectional comparisons.

The noise infusion methodology, while more analytically tractable than suppression, introduces its own complications. Because noise is added independently to each cell, aggregating noisy cells will not in general produce the same result as querying the aggregate directly. Analysts constructing custom geographic aggregations (e.g., grouping adjacent counties into a commuting zone) should query the desired aggregate level directly from the API rather than summing county-level values, where the Census Bureau has separately solved the disclosure avoidance problem for the aggregate.

Finally, the government exclusion matters for comparative analysis between urban and rural counties. Rural counties in the Great Plains and Mountain West often have public-sector employment shares of 30–40% — federal land management agencies, state universities, county hospitals — that CBP simply does not capture. Describing a rural county's economic base from CBP alone will systematically understate the size and importance of the public sector in those economies.


The Bureau of Labor Statistics Quarterly Census of Employment and Wages covers government employment and publishes quarterly, complementing CBP's annual private-sector snapshot with UI-based employer records. See BLS QCEW: The County-Level Employment and Wages Dataset Behind Every Local Economic Analysis.

For macro context — county-level GDP, personal income by industry, and value-added data that puts CBP payroll in a productivity framework — see the Bureau of Economic Analysis regional accounts. See BEA GDP Accounts: Measuring US Economic Output from Production, Income, and Expenditure.

For occupational wage rates by county and metropolitan area — the hourly and annual wage complement to CBP's payroll totals — the BLS Occupational Employment and Wage Statistics program provides the most granular occupational earnings data available. See BLS OEWS: Occupational Employment and Wage Statistics by Area and Industry.