The Thinking Robot
A service-area reality check. Public establishment counts and demographics for your area — with every source named and every assumption editable. No market-size estimate, because that would be a guess wearing a suit.
No account. No email. Nothing is stored — your inputs live in the page URL and nowhere else.
Two rules are at work and the map shows both. Business counts take whole ZIP codes whose centre point falls inside the circle — in or out, no part-credit. People are allocated by area: a ZIP the circle cuts in half contributes half its residents. Some ZIPs are two city blocks; some are forty square miles. The map shows which ZIPs were taken, which were dropped, and which the circle cut through, so the numbers above are something you can check rather than take on trust.
Nothing loads until you press this. The map draws background tiles from OpenStreetMap, and requesting a tile shows OpenStreetMap your IP address. Everything else on this page is served from here and sends nothing anywhere.
Tiles © OpenStreetMap contributors, ODbL. Boundaries and centre points: U.S. Census Bureau TIGERweb, 2020 ZIP Code Tabulation Areas. The centre points are the Census Bureau’s own published coordinates — this tool does not compute them.
Always visible, never behind a click. If you can’t check the number, don’t trust the number.
It outputs counts. How many business establishments the US Census recorded in a given industry code, in a given geography, in a given year. A count is a fact you can go and verify.
It does not output a market size. No “your addressable market is $4.2M.” That figure would be population multiplied by an assumed spend per person — two numbers multiplied together, one of which nobody actually knows. It looks authoritative and it isn’t. If you want a revenue range, the assumption panel lets you set the spend figure yourself and see the arithmetic, clearly labelled as your assumption.
Census County Business Patterns publishes establishment counts at ZIP-code level and no finer. There is no sub-ZIP resolution, anywhere, for anybody. So a 2-mile circle cannot be answered with establishment counts — the smallest real unit is a whole ZIP code.
Below 5 miles this tool stops pretending. It switches to ZIP-floor mode and reports your ZIP code's totals, and it says so on the face of the result rather than in a panel you have to open.
Above 5 miles the tool builds a circle out of whole ZIP codes. How it does that is not the same for people as it is for businesses — see the next section, which is the most important one on this page. “Your ZIP only” remains the most accurate answer to “who is local to me”, because it maps exactly onto what the Census publishes instead of approximating a circle at all.
A circle drawn on a map does not line up with ZIP code boundaries. Something has to give, and this tool gives differently depending on what is being counted.
Each ZIP code contributes the share of its residents equal to the share of its area inside the circle. A ZIP the circle cuts in half contributes half its people. This replaced an older rule that took each ZIP whole or dropped it whole, which produced a cliff: one ZIP’s centre point moving two hundred feet could swing the answer by forty thousand people.
What it assumes, and where that assumption breaks. Area weighting assumes people are spread evenly inside a ZIP code. They are not. A forty-square-mile rural ZIP usually has its residents clustered in one town and empty land around it. If the circle clips the empty half, this tool will confidently allocate half the population and be badly wrong — and it has no way to detect that it has done so. The share is also measured on total polygon area, which includes water and open ground, so a ZIP that is half lake is treated as half populated.
Area weighting is better than the cliff it replaced. It is not accurate. It removes an obvious error and leaves a subtler one in place.
Establishment counts are not area-weighted and must not be. A ZIP code is counted in full or not at all, decided by whether its centre point falls inside the circle — exactly as before. This is deliberate, and it is not an oversight waiting to be tidied up in a later version.
People are spread across a ZIP code roughly evenly, so cutting the population in half when you cut the area in half is roughly right. Businesses are not spread out at all. They sit on commercial strips, in one retail corridor, around a single intersection. Half the area of a ZIP code routinely contains every single business in it, or none of them. Multiplying a business count by an area fraction would produce a number with a decimal point and no meaning — it would look more precise than the whole-ZIP rule while being less defensible.
So the improvement in this section applies to one of the two numbers on your screen. If you take nothing else from this panel: the population figure got better and the establishment count did not change.
Establishments per 100,000 adults divides a business count by a population. The business count describes a set of whole ZIP codes, so the population underneath it is the whole-ZIP population, not the area-weighted one. Dividing whole-ZIP businesses by an area-weighted population would put fewer people under a count that was never trimmed to match them, and every index in the gap table would drift upward for a reason that has nothing to do with your area. Where the two figures differ, both are shown.
The boundary service returns each ZIP code’s published polygon. The circle is clipped against that polygon and the two areas are divided. Both areas are measured on the same simplified boundary and in the same local projection, so most of the error in either cancels in the ratio. The circle itself is handled as a 144-sided polygon scaled to the exact area of the true circle. Every one of those settings is published in the response the page received, so the arithmetic can be repeated rather than believed.
Without the boundary service there is no ZIP list, so neither rule can be applied. In that case the population figure is a model and the tool says “Modelled — no ZIP list” on the face of the result rather than borrowing the name of a method it did not use.
The map does not make the ZIP floor go away. It makes it visible. Your ZIP is drawn as the Census draws it, the circle is drawn from your ZIP's published centre point, and every nearby ZIP is shaded by whether the business rule took it or dropped it. The centre points themselves are drawn as dots, because those dots — not the shapes — are what that rule is applied to.
The dashed outlines are the ZIPs the circle cuts through. Those are the ZIPs where the two rules disagree: part of their population is counted, and their businesses are counted all or nothing. Tap any ZIP and it tells you both answers and the share the circle actually took. Seeing a ZIP shaded “counted” while only a third of it sits inside the circle is the clearest picture of this tool's limits that exists anywhere in it.
Boundaries and centre points come from the US Census Bureau TIGERweb service, 2020 ZIP Code Tabulation Areas. Nothing on the map is computed or approximated by this tool. If that service cannot be reached, no map is drawn at all — a map on invented geometry is far more convincing than it is correct, and this tool would rather show you nothing.
It is opt-in for a reason. Background tiles come from OpenStreetMap, and asking for a tile tells OpenStreetMap your IP address. Nothing loads until you press the button. Everything else on this page is served from one origin and sends nothing anywhere.
The Census counts businesses by NAICS industry code. NAICS was not built to describe aesthetic and elective practices, and it does not resolve to your sub-niche.
A plastic surgeon, a cardiologist and a hormone-optimisation clinic can all file under 621111 — Offices of Physicians (except Mental Health Specialists). When this tool says “N establishments,” it means N establishments in that whole bucket, not N competitors doing what you do. The bucket is an upper bound on your competition, never a headcount of it.
Two codes are genuinely tight and worth trusting more: 621330 (Offices of Mental Health Practitioners) and 812112 (Beauty Salons). Everything routing through 621111 is coarse.
| What | Source |
|---|---|
| Establishment counts | US Census County Business Patterns 2023 (latest vintage; released
2025-03-06). Variables ESTAB, NAICS2017, filtered to
LFO=001 (all establishments) so legal-form rows are not double-counted.
Geography levels include zip code, county,
state, us. Where the Census suppresses a cell to protect
an individual business, this tool shows —, never zero.
api.census.gov/data/2023/cbp |
| Population, age bands, median household income | US Census American Community Survey 5-Year. Tables
B01001 (age/sex), B19013 (median household income),
at ZIP Code Tabulation Area.
api.census.gov/data/2023/acs/acs5 |
| Which ZIPs fall inside the radius, and how much of each one | US Census TIGERweb, 2020 ZIP Code Tabulation Areas — the Bureau’s
own boundary service. It publishes each ZCTA’s polygon and its
CENTLAT/CENTLON centre point. Distance is straight-line
(haversine) from your ZIP’s published centre point; the area share is the ZCTA’s
polygon clipped against the circle.
Nothing here is computed by this tool except the clipping arithmetic
— the coordinates and the boundaries are the Census Bureau’s.
tigerweb.geo.census.gov — tigerWMS_Current, layer 2.
Straight-line, not drive-time. For elective and aesthetic procedures drive-time
matters more. Treat the rings as rough. Below 5 miles no radius filter is applied
at all — see “The ZIP floor” above. Boundaries are requested simplified to about
130 m so a metro-sized circle will fit on a phone; the same simplified boundary is
used for both halves of every area ratio, so the simplification largely cancels. |
For each sub-niche in your vertical, the tool computes establishments per 100,000 adults in your radius, then divides that by the same ratio computed nationally. Below 1.00 means your area has proportionally fewer of that industry bucket than the country does. That is a comparison of two counts against two populations — no projection, no assumed spend, nothing invented.
What it does not mean. A thin bucket may be thin because demand is thin. Low supply is not the same as unmet demand, and this tool cannot tell you which one you’re looking at. It tells you where to point your own judgement.
The highlight threshold is 0.85, and it is arbitrary. Rows below it get tinted. There is nothing special about 0.85 — it is a reading aid, not a statistical finding. Read the index number, not the colour.
The Census Data API began requiring an API key on all requests on 2026-05-12. There is no longer an unauthenticated tier. A key cannot be shipped in browser JavaScript without publishing it, so this page cannot call Census directly.
The fix is a small server-side endpoint that holds the key. On this site that endpoint is
part of this site: /area runs on the same origin as this page, so the page asks
for a relative path and nothing is requested from anywhere else. The banner above still only
says LIVE once a response has come back saying it carries Census data — an endpoint
answering is not the same thing as real data answering, and until a U.S. Census API key is
configured on this site every figure here is synthetic, generated from a seeded hash of your
ZIP so results stay stable if you share the link.
The box below is for pointing this page at a data service somewhere else — useful if you have saved a copy of this file and want to test against a deployment. Leave it blank to use this site's own endpoint. A local copy opened straight from disk has no origin to ask, so it stays in sample mode and says so.