SAMPLE DATA — NOT REAL COUNTS

The Thinking Robot

Territory Recon

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.

Your practice

10 miles
1 mi30 mi

No account. No email. Nothing is stored — your inputs live in the page URL and nowhere else.

Methodology

Always visible, never behind a click. If you can’t check the number, don’t trust the number.

What this tool does and does not output

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.

The ZIP floor — why small radii are not what they look like

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.

Two rules, not one — read this before you quote either number

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.

People: area-weighted

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.

Businesses: whole ZIP codes, and that is not changing

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.

Why the per-100k rate uses the older population figure

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.

How the share is actually measured

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 — what it shows and what it costs you

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 NAICS problem — read this before you read anything else

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.

Data sources and exact endpoints
WhatSource
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.
How “thin” is calculated in the gap table

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.

Why this is sample data (and what makes it live)

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.