Guides / count-competitors-in-your-area

How to Count Competitors in Your Area (Free Methods + Where They Fail)

“How many gyms are in my area?” sounds like a question with one answer. It is not. Ask Google Maps, Yelp, OpenStreetMap, and the Google Places API about the same neighborhood and you will get four different numbers, sometimes wildly different. Each method misses businesses the others catch, counts businesses that closed months ago, or double-counts the same location under two names.

This guide walks through the four practical ways to count competitors around a location, what each one actually costs in money and hours, and, most importantly, the specific errors each one makes. Then it covers the part almost every counting guide skips: how to turn a raw count into a saturation read you can actually act on before signing a lease.

Method 1: Google Maps manual search (free, and where most people stop)

Open Google Maps, center it on your candidate address, search your category, and count. For most categories in most US cities this is the highest-coverage free method available: Google’s business data is the closest thing to ground truth for “does this business exist and is it open”, because owners fight to be listed there and customers report closures.

Where it fails, and it fails in four specific ways. First, keyword misses: a search for “coffee shop” will skip the bakery that sells more espresso than croissants, and “gym” can miss a CrossFit box categorized as a fitness studio. Second, the viewport problem: Maps shows results for whatever rectangle is on your screen, and it silently truncates dense areas, so zoom level changes your count. Third, no radius control: you are counting inside an arbitrary visual box, not inside the distance your customers will actually travel. Fourth, duplicates: a business inside a mall, a second listing from an old address, or a chain’s corporate page can all add phantom pins. We wrote a full breakdown of what a manual Maps count can and cannot see in Denzify vs Google Maps; the short version is that it is a genuinely good first pass and a genuinely bad final answer.

Method 2: Yelp and business directories (free, skewed coverage)

Yelp, Yellow Pages, and category-specific directories (ClassPass for fitness, Zocdoc for dentists) give you a second free count, and cross-referencing two sources is a cheap way to catch what one missed. Yelp in particular adds something Maps buries: review velocity, which hints at which competitors are actually busy rather than merely open.

The failure mode is coverage skew. Directory coverage depends on whether owners in that category bother to claim listings, which varies enormously by category and by city. Restaurants are well covered on Yelp; physical therapy clinics and coworking spaces often are not. Directories are also slower to remove closed businesses, so stale listings inflate the count, and the same business frequently appears under slightly different names across directories, which makes merging two lists by hand an exercise in judgment calls. Use directories to sanity-check a Maps count, not to replace it.

Method 3: OpenStreetMap and Overpass queries (free, scriptable, incomplete)

If you can write a query, OpenStreetMap is the only method here that gives you exactly what the others withhold: a machine-readable list of businesses with coordinates, inside any radius you define, for free, via the Overpass API. No pagination caps, no API key, no viewport games. For anyone comfortable with a little scripting, it feels like the obvious answer.

The problem is coverage, and we can put a number on it because we measured it. Denzify’s early pipeline used OSM as its business source, and when we compared OSM listings against commercial data for the same US markets, OSM found roughly 34% of the businesses that were actually there. Two out of three competitors simply were not in the map. OSM is community-maintained, and US commercial POI coverage depends on whether a local mapper cared about that block; some neighborhoods are meticulously mapped and others are blank. We rebuilt the pipeline on Google Places because a count that misses two-thirds of the competition is worse than no count: it makes every market look like an open opportunity. OSM remains excellent for infrastructure, transit stops, schools, offices, and we still use it for exactly that, but do not use it to count competitors.

Method 4: Google Places API queries (accurate, paged, not free)

The Places API is the programmatic version of Method 1 with the viewport problem solved: you specify a center point, a radius, and a category, and get structured results with names, coordinates, ratings, and review counts. Coverage matches Google Maps, which is to say it is the best available. This is what Denzify itself queries under the hood, so we are recommending the data source we bet the product on.

The failure modes are operational rather than data quality. Each search returns a capped, paged result set, so a dense area needs a grid of overlapping searches to be counted fully, and overlapping searches return overlapping results, which puts deduplication back on you. Category filters are Google’s taxonomy, not yours, so a “restaurant” query returns hotel restaurants and food courts you may not consider competitors. And it costs money: pricing is per request, a single small search is cheap, but a proper grid sweep of a whole city across result pages adds up quickly, plus the setup overhead of a Google Cloud account and a billed API key. For one neighborhood it is very doable for a technical founder; for comparing several markets it becomes a small engineering project.

How do the four methods compare?

MethodCoverageDedupRadius controlCostEffort
Google Maps manual searchHigh, but keyword and viewport missesManual, error-proneNone (visual box only)FreeLow for one area, tedious for several
Yelp / directoriesSkewed by category and cityManual, name-matching by handRough (search radius filters)FreeMedium (cross-referencing lists)
OpenStreetMap / OverpassLow (~34% recall in our measurement)ScriptableExact, any radiusFreeHigh (query writing)
Google Places APIHigh (matches Google Maps)Scriptable, needed across grid overlapsExact, per requestPaid per requestHigh (API setup, grid sweep, paging)

Why is a raw count not enough?

Suppose you did everything right and landed on a clean, deduplicated number: 14 competitors. Fourteen inside what boundary? Competing for whose spending? A count only becomes a saturation read when you divide it by the right area and compare it against the right demand.

Start with the boundary. A trade radius is the distance from which a business realistically draws most of its customers. It is category physics, not preference: nobody crosses a city for a coffee, and nobody expects a dentist next door. Denzify calibrates this per category, roughly 600 m for a coffee shop, 800 m for a restaurant, 2.5 km for a gym, and up to 4 km for a dentist. That means the yoga studio 1.5 km away barely competes with your coffee shop, while a dentist 3 km away is a direct competitor for a dental practice. Counting both categories inside the same one-mile circle, which is what every manual method quietly does, gets both answers wrong in opposite directions.

Then divide by demand. Fourteen coffee shops around a downtown block with 30,000 daytime office workers is an underserved market; fourteen around a residential area with 6,000 residents is a bloodbath. The demand side has three legs: residential population, median household income (which sets what people can spend on your category), and daytime population, the office workers who are invisible in residential Census figures but buy most of the weekday lunches and lattes. All three are free from the Census Bureau if you are willing to work with ACS tables and LODES workplace files; our guide to market saturation analysis walks through that full workflow by hand.

Why does the same count mean different things in different cities?

Even count-per-capita is not the final answer, because categories have different natural densities and cities have different structures. Around 28 restaurants per 10,000 residents is normal in the US; 28 gyms per 10,000 would be absurd. A college town supports a coffee density that would sink the same shops in a commuter suburb. So the last step is a benchmark: compare your market’s density against comparable cities, similar population, similar income, for the same category. That comparison is what separates “there are 14 competitors” from “this market carries about 40% more supply per resident than its peers”, which is a sentence you can make a lease decision on.

This is the part that is genuinely hard to do by hand, because it means running the whole count-dedup-radius-demand exercise on five other cities just to grade your own. It is also the specific reason Denzify exists: a report ($149, no subscription) runs the Places grid sweep with dedup inside the category’s calibrated trade radius, pulls the Census demand data including daytime workers, benchmarks the market against peer cities, and compresses it into a Promise Score with an A to F grade. The honest limits: it grades the market, not a specific storefront, foot traffic is proxied from transit and office data rather than measured from phones, and it covers US markets only. The sample report is a real, unedited run that scored a middling C, so you can judge the output before spending anything.

The bottom line

Count with Google Maps first, it is free and its coverage is the best you can get without an API key. Cross-check against a directory, dedupe by hand, and be suspicious of any number that comes from OpenStreetMap alone. Then remember that the count is the easy third of the problem: the radius and the demand side are what turn it into an answer. If you would rather have all three done in one pass, run your market through Denzify and compare the result against your own count. If the two disagree, one of you missed something, and finding out which is exactly the point.