← Back to Blog

The Official Count Says 5,234 Laundromats. The Real Number Is 20,293. How to Size Up Any Local Market With Public Data

· 13 min read The Official Count Says 5,234 Laundromats. The Real Number Is 20,293. How to Size Up Any Local Market With Public Data

Somebody is going to sell you a market study. It will have a big number in it, sourced to the Census Bureau, and it will be wrong.

I found this out counting laundromats. The obvious way to count them is ZIP Business Patterns, a federal file that reports how many businesses of each type sit in each ZIP code. Sum the coin-operated laundry line across every ZIP in the country and you get 5,234 stores. That number is defensible, it is federal, and you could put it in a slide deck without anybody blinking.

The real number is 20,293. The ZIP file understates it by 3.9 times.

That gap is not a rounding error, and it is not specific to laundry. It comes from two structural features of how the government counts businesses, both of which apply to almost every local service business you might want to open, buy, or compete with. If you do not correct for them, every ratio you build on top is wrong in the same direction: you will think a market is empty when it is full.

This post is the method I used, generalized so you can point it at any business type in any part of the country. All of it runs on free public data. None of it requires a subscription.

Why the official count misses most of the market

Two things go wrong.

The payroll problem. County Business Patterns, the workhorse file behind most market research, only counts establishments with employees on payroll. A business with no W-2 employees is invisible to it. For businesses that are typically owner-operated or unattended, that is not a minor omission. In coin-operated laundry, 9,403 of the 20,293 stores nationally have no payroll at all. Nearly half the industry simply does not appear in the file everyone quotes.

The fix is a second federal program almost nobody uses: Nonemployer Statistics. It counts exactly the businesses County Business Patterns skips. Add the two together and you have the whole universe.

County Business Patterns 2023, NAICS 812310   10,890  (with payroll)
Nonemployer Statistics 2022, NAICS 81231       9,403  (no payroll)
                                              ------
Total US coin-operated laundries              20,293

Note the NAICS codes differ by a digit between the two programs. Nonemployer Statistics uses five-digit codes where County Business Patterns uses six. Getting that wrong returns an empty result, which reads exactly like "no businesses here," which is the failure mode this whole post is about.

The suppression problem. Federal statistical agencies will not publish a number that would identify an individual business. If a county has two laundromats, publishing "2" tells you a lot about those two operators' revenue, so the agency suppresses it and reports zero.

This is the trap that will actually cost you money, because a suppressed zero and a genuine zero look identical in a spreadsheet. In my run, three counties came back with zero stores from both federal programs. A scrape of public laundromat directories found three stores in one and three in another. Those were not white space. They were disclosure rules.

Treat every zero as unverified until an independent source confirms it. OpenStreetMap, industry directories, Google Maps and Yelp all work. You are not trying to build a perfect roster, you are trying to distinguish "genuinely nobody here" from "the government will not tell me."

Step one: count the whole universe

Get a free Census API key and pull both halves. These are the actual calls, and you can change the NAICS code and geography to anything you want:

https://api.census.gov/data/2023/cbp?get=NAME,ESTAB,EMP,PAYANN&NAICS2017=812310&for=us:*
https://api.census.gov/data/2022/nonemp?get=NAME,NESTAB,NRCPTOT&NAICS2022=81231&for=us:*

Swap for=us:* for for=county:035&in=state:49 to drop to a county, or for=state:32 for a state. The two programs run on different vintages, currently 2023 for payroll and 2022 for nonemployer, so say so when you publish the number rather than implying both are current.

Nonemployer Statistics gives you something else valuable: total receipts. Divide receipts by establishments and you get an average revenue per owner-operated store. For laundromats that came to $95,612 a year. It is a national average across wildly different stores and it is not a substitute for a seller's tax returns, but it is a public, defensible sanity check on a broker who tells you a small unattended store clears $300,000.

Step two: pick a denominator that matches the business

Here is where most amateur market analysis goes wrong. People divide by population. Population is almost never the right denominator, because most local businesses do not serve people in general. They serve a specific slice.

Laundromats serve households without a working washer in the unit. The closest free proxy is renter households, from ACS table B25003. Not population, not households, renter households. Using population would rank wealthy low-density suburbs as underserved, which is exactly backwards.

The denominator is the single most important judgment call in the whole exercise. Some starting points:

Business Denominator Free source
Laundromat Renter households ACS B25003
Self-storage Renter households plus recent movers ACS B25003, B07003
Car wash Households with a vehicle ACS B25044
Childcare Children under 5 with all parents in the labor force ACS B23008
Gym Adults 18 to 54 above a spending floor ACS B01001, B19013
Coffee or lunch Daytime employment, not residents LEHD/LODES workplace-area data
Veterinary Owner-occupied households ACS B25003

The rule underneath: ask who physically hands over money, then find the smallest ACS table that counts those people.

Step three: build the benchmark from your own data

Divide national demand by the national count of businesses. For laundry: 44,590,828 renter households across 20,293 stores gives 2,197 renter households per laundromat.

Compute this from the data you just pulled rather than quoting an industry rule of thumb. Trade associations circulate figures like "one store per 15,000 people" with no traceable derivation and a strong interest in the answer. If you derive the benchmark yourself, you can defend it, and you can recompute it when the next vintage lands.

Now the same ratio locally tells you saturation:

County Renter HH Stores HH per store vs US Shortfall
Utah County, UT 62,336 10 6,234 2.84x +18
Clark County, NV 363,963 62 5,870 2.67x +104
Salt Lake County, UT 137,488 37 3,716 1.69x +26
Weber County, UT 23,500 7 3,357 1.53x +4
Davis County, UT 25,915 8 3,239 1.47x +4
Mohave County, AZ 25,552 11 2,323 1.06x +1

Above 1.0x means each existing store is absorbing more demand than the national average. Utah County's stores each serve 2.84 times the national load. Mohave County is at par and is, on this measure, a normal market.

Step four: drop to trade areas, because counties are too big

Nobody drives across Clark County to do laundry. County numbers tell you where to look, not where to build.

Push the same arithmetic down to ZCTAs, the Census approximation of ZIP codes. Two free files make this work: the ACS 5-year summary tables at the ZCTA level, and the Census Gazetteer, which gives you a latitude and longitude centroid for every ZCTA and place. With centroids you can compute distance to an anchor city with the haversine formula and filter to a realistic catchment.

Set a population floor. I used 9,000. Below that, ACS 5-year margins of error get wide enough that you are ranking noise.

Step five: score demand quality, not just quantity

Two ZIP codes can have identical renter counts and completely different prospects. A neighbourhood of 1960s fourplexes with no in-unit hookups is a different business from new-build luxury apartments where every unit has a washer.

So build a transparent score from raw ACS ratios. Mine used nine components, each normalized to a 0 to 1 band and weighted:

  • Renter share of households, weight 0.22
  • Housing built before 1980, weight 0.16, a proxy for no in-unit hookups
  • Income band, weight 0.16
  • Multifamily buildings of 2 or more units, weight 0.10
  • Average renter household size, weight 0.10
  • Hispanic share, weight 0.08, an empirically strong self-service laundry indicator
  • Mobile homes, weight 0.06
  • Renter households with no vehicle, weight 0.06, they must walk to you
  • Poverty rate, weight 0.06

Two things matter more than my specific weights.

The income term is not monotonic. It rises from about $15,000, plateaus between $30,000 and $65,000, then falls away above that. Very poor areas cannot support the spend and wealthy areas own machines. Any indicator with a sweet spot in the middle has to be modelled as a band, not a slope. If you build income as "lower is better" you will rank the poorest ZIP in the state first and be wrong.

Write the weights into the output file. They are the only subjective judgment in the pipeline. Anyone who disagrees should be able to see them, change them, and rerun. A score whose weights are buried in code is an opinion wearing a lab coat.

Step six: multiply gap by fit

Two useless rankings sit on either side of the useful one. Rank by demand score alone and you get the poorest neighbourhoods, which are already saturated because everyone knows they are good laundry markets. Rank by shortfall alone and you get affluent suburbs with no stores, because nobody there needs one.

The number worth ranking on is the product:

impliedStores  = renterHouseholds / nationalRatio
storeShortfall = impliedStores - actualStores
opportunity    = max(0, storeShortfall) * (demandScore / 100)

That reads in plain English: how many more stores this area could carry at the national rate, discounted by how well its demographics actually fit the business.

One implementation note that cost me a rewrite. My first version expressed opportunity as a ratio, which saturated against its own cap and collapsed the ranking back onto the demand score. Keeping shortfall in real units, stores, kept it interpretable and kept the two factors genuinely independent.

Step seven: take store counts as a floor, never a ceiling

For each trade area I took the highest of three independent counts: ZIP Business Patterns, OpenStreetMap, and a directory scrape. Not the average. The maximum.

Every one of those sources undercounts in its own way. ZBP misses nonemployer stores and suppresses small ZIPs. OpenStreetMap is volunteer-maintained and thin outside cities. Directories miss anyone who never registered. A business appearing in any one of them exists. A business appearing in none of them might still exist.

So the shortfall you compute is a maximum plausible shortfall. Before you sign anything, drive the trade area or walk it in Street View. This method is for ranking fifty candidate areas down to five. It is not for picking the one.

Step eight: cost is local, and it is where the deal dies

Demand analysis tells you whether customers exist. It says nothing about whether you can serve them profitably, and for many local businesses the binding constraint is a cost that varies enormously across the exact same metro.

For laundromats it is water and sewer. Sewer is usually billed as a function of metered water, so a self-service laundry pays for every gallon twice. Municipal rate schedules are published, and they are not close to uniform between neighbouring cities. Pull the actual rate sheet for each candidate city rather than assuming a metro average.

The general form of the question: for this business, which input cost is both large and set by local government or a local monopoly? Water and sewer for laundry and car washes. Commercial power for anything refrigerated. Property tax and assessment practice for anything real-estate heavy. Licensing and inspection regimes for food and childcare. Look those up per jurisdiction, because they can invert a ranking that looked settled on the demand side.

Then build the pro forma with the local numbers, not the industry ones.

What this method cannot tell you

Being straight about the limits is the difference between analysis and a sales deck.

It does not see quality. A trade area with four tired stores may be more open than one with two good ones, and no federal file records that.

It lags. ACS 5-year estimates are a rolling average, County Business Patterns runs about two years behind, and Nonemployer Statistics is a year behind that. A ZIP that added 2,000 apartments last year looks like it did before they were built. Cross-check with building permits, which the Census publishes monthly and far more currently.

It cannot see leases, and site selection is often decided by whether a suitable box with adequate utility service is actually available at a rent that works. Plenty of genuine white space is white because no viable building exists in it.

It assumes the national ratio is the right target. Sometimes local structure explains the gap legitimately. A metro with unusually high in-unit laundry provision should carry fewer laundromats, and that is correct rather than an opportunity.

Treat the output as a ranked shortlist of hypotheses. The work after the shortlist is still the real work.

The generalized recipe

  1. Pick the business and find both NAICS codes, six digit for payroll and five digit for nonemployer.
  2. Pull County Business Patterns and Nonemployer Statistics. Add them. That is your universe.
  3. Choose the demand denominator that matches who actually pays, and pull it from ACS.
  4. Divide national demand by national count. That is your benchmark, derived rather than borrowed.
  5. Repeat at county level to find candidate regions.
  6. Drop to ZCTA, join Gazetteer centroids, filter by distance and a population floor.
  7. Score demand quality from raw ACS ratios with published weights and banded, non-monotonic terms where reality is banded.
  8. Rank by shortfall multiplied by fit.
  9. Verify every zero and treat every count as a floor.
  10. Price the locally-set input costs per jurisdiction, then build the pro forma.
  11. Go look at the places that survive.

The whole pipeline is free. The Census API key takes about a minute to request, the bulk summary files need no key at all, and the entire NV and UT run above took an afternoon of scripting.

If the reason you are reading this is that you would rather own something than keep trading hours for a salary, that instinct is the argument of my book The W-2 Trap (search the title on Amazon Kindle). Knowing how to size a market yourself, instead of paying someone for a number they got from the wrong file, is a decent first move.

Related reading

Fact-check notes and sources

All figures below were pulled on 10 August 2026 and reflect the vintages named. Federal business data is revised, so confirm against the current release before relying on it.

  • National laundromat count: 10,890 establishments with payroll from County Business Patterns 2023, NAICS 812310, plus 9,403 without payroll from Nonemployer Statistics 2022, NAICS 81231, totalling 20,293. Both pulled via the Census Data API.
  • The 3.9x undercount: summing the coin-operated laundry line across all ZIPs in ZIP Business Patterns 2023 returns 5,234, against the 20,293 total above.
  • Renter households: 44,590,828 nationally, ACS 2023 5-year table B25003, giving 2,197 renter households per store.
  • Average nonemployer receipts: $95,612 per establishment, derived from total Nonemployer Statistics receipts divided by nonemployer establishments for NAICS 81231.
  • County figures: renter households from ACS 2023 5-year B25003; store counts are County Business Patterns plus Nonemployer Statistics for the same county.
  • Disclosure suppression: Census suppresses cells that would disclose an individual establishment, documented in Census disclosure avoidance guidance. Three counties in this run returned zero from both programs while public directories listed operating stores.
  • Demographic tables used: B01003 population, B01002 median age, B25003 tenure, B19013 median household income, B25064 median gross rent, B25010 household size by tenure, C17002 income-to-poverty ratio, B03003 Hispanic origin, B25024 units in structure, B25034 year built, B25044 tenure by vehicles available, C16002 household language.
  • Geography: ZCTA and place centroids from the Census Gazetteer Files 2024; supply cross-check from OpenStreetMap via the Overpass API.
  • Weights: the nine demand-score weights listed above are my own judgment, not a published standard, and are stated so they can be changed.

This post is informational, not investment, legal, or accounting advice. It describes a research method using public data; the figures are point-in-time snapshots of federal releases and will change with each vintage. No business, broker, or trade association mentioned is affiliated with this site, and nothing here is a recommendation to buy or open any specific business.

← Back to Blog

Accessibility Options

Text Size
High Contrast
Reduce Motion
Reading Guide
Link Highlighting
Accessibility Statement

J.A. Watte is committed to ensuring digital accessibility for people with disabilities. This site conforms to WCAG 2.1 and 2.2 Level AA guidelines.

Measures Taken

  • Semantic HTML with proper heading hierarchy
  • ARIA labels and roles for interactive components
  • Color contrast ratios meeting WCAG AA (4.5:1)
  • Full keyboard navigation support
  • Skip navigation link
  • Visible focus indicators (3:1 contrast)
  • 44px minimum touch/click targets
  • Dark/light theme with system preference detection
  • Responsive design for all devices
  • Reduced motion support (CSS + toggle)
  • Text size customization (14px–20px)
  • Print stylesheet

Feedback

Contact: jwatte.com/contact

Full Accessibility StatementPrivacy Policy

Last updated: April 2026