Why a Google Maps search isn't competitor analysis
Open Google Maps, search your category, and you get a list biased by whatever pin the map happens to be centered on and capped well short of the full count in the area. It's fine for finding the nearest option as a customer. It's a poor basis for a business decision, because you never see the full competitive set — just the slice closest to wherever you last scrolled.
Scraping the same category across every city or neighborhood in your target area removes both problems: you get every listing, not the nearest dozen, and you get the underlying numbers (exact rating, exact review count) instead of a rounded star icon. That's the difference between an impression and a dataset you can actually sort and average.
The five signals that actually matter
Count — how crowded is the category, really
Search a category on Google Maps by hand and you see the dozen listings closest to the pin you happen to be looking at. Scrape the same category across every neighborhood or city in your area and you get the full count — often two or three times what a manual search surfaces, because Maps' on-screen results are capped and location-biased.
Rating — the number, not the star icon
Google shows a rounded star icon on the map; the underlying rating (4.1 vs 4.4) only shows up when you open each listing individually. At scale, the raw number is what lets you compute an actual category average instead of eyeballing a row of near-identical stars.
Review count — a rough proxy for volume, not quality
A business with 400 reviews at 4.2 stars is processing far more customers than one with 12 reviews at 4.9. Review count alone tells you which competitors are established versus new; paired with rating, it tells you which established competitors are vulnerable.
Price level — where the category actually sits
Google's $ to $$$$ indicator isn't shown for every listing, but where it is present it's the fastest way to see whether a market is bunched at one price point (room to open premium or budget) or already spread across the full range.
Website presence and hours — the operational gap
Whether a listing has a website at all, and whether its hours are filled in, are both signals of how much attention the owner puts into their online presence — which is a different axis from rating or review count, and often the one nobody on the sales or expansion side is tracking.
How to build the dataset
Define the category exactly
Pick the Google Maps category name your competitors would actually be found under — "Personal injury attorney," not "Lawyer"; "Boxing gym," not "Gym." A category that's too broad pulls in businesses that aren't really your competition and drags every average toward the middle.
Set the geography to match how customers actually choose
A coffee shop's competitive set is a few blocks. A B2B software reseller's might be an entire metro or state. Pick cities or a radius that matches how a customer in that category actually picks between options — too wide and you're benchmarking against businesses nobody cross-shops.
Run the scrape with no filters first
Filtering by minimum rating or review count is for lead generation, where you only want the strong signals. For competitor analysis you want the full population, including the 3.2-star listings and the ones with barely any reviews — they're part of the real distribution you're benchmarking against.
Export everything, then filter in a spreadsheet
Download as CSV or XLSX with every field the plan allows. Doing the filtering after export — not during the scrape — means you can slice the same dataset multiple ways (by sub-category, by price level, by neighborhood) without re-running anything.
Re-run it on a schedule to see what changed
Every row carries a scraped-at timestamp, so a second scrape a month or a quarter later is directly comparable to the first — new entrants, closures, and rating movement all show up as a diff between two files. Scale-plan accounts can put this re-run on an automatic schedule instead of remembering to do it by hand.
How to read the results
Once the export is in a spreadsheet, three simple calculations do most of the work:
- Category average rating and its spread. The average tells you the bar; the spread tells you whether it's a tight cluster (hard to stand out on rating alone) or wide (a clear top and bottom tier).
- Review-count percentile. Sort by review count and find where you — or a specific competitor — actually sit. Being in the top quartile on review count with a below-average rating is a specific, fixable problem: high volume, weak experience.
- Website and hours completion rate. What share of the category has no website field at all, or blank hours? That percentage is a rough read on how much of the category is running on autopilot versus actively managing its online presence — useful context whether you're the business being compared or a vendor selling into the category.
Three mistakes that wreck the comparison
Comparing across mismatched sub-categories+
"Restaurant" lumps fast food in with fine dining. "Contractor" lumps a one-person handyman in with a 40-person general contractor. Pull the specific sub-category Google Maps actually assigns — the by-industry guide linked below has the exact category names for a dozen verticals — or every average you compute is comparing businesses that were never really competing with each other.
Treating review count as market share+
Review counts accumulate over the life of a listing, not in a fixed window. A ten-year-old business with 600 reviews isn't necessarily outselling a two-year-old one with 150 — it's had five times as long to collect them. Weigh review count against how long the listing has plausibly existed, not as a standalone ranking.
Letting temporarily-closed listings inflate the count+
A raw category count includes businesses Google still lists as temporarily closed. Filter those out (or report them separately as a churn signal) before you calculate density or averages, or a category that looks crowded may actually have real vacancy in it.
Running the scrape once and calling it done+
A single snapshot tells you where things stand today. Ratings drift, new listings appear, and "temporarily closed" listings either reopen or disappear for good — none of which shows up unless you compare two dated snapshots. The scraped-at timestamp on every row exists specifically so a second export is comparable to the first.
Turning the data into a decision
The dataset is only useful once it points at a specific decision. Three come up most often:
Where to open or expand
Run the same category across several candidate cities or zip areas and compare count, average rating, and price-level spread side by side. A city with a low count and a below-average category rating is a materially different opportunity than one that's dense and already rated 4.6 on average.
What to fix about your own listing
Find your own row in the export and see exactly where it sits against the category on rating, review count, and whether your hours and website fields are actually filled in — the same operational gaps you're scoring competitors on apply to your own listing.
Who to target if you sell into the category
If you sell software, marketing, or services to a vertical, the same filters that flag competitive weakness — no website, low rating relative to the category, thin review count for the listing's apparent age — flag your best-fit prospects. It's the same dataset read from the other side.
What data you get per competitor
The fields that matter most for this kind of analysis:
Free plan exports 9 core fields in CSV. Growth ($49/mo) and above unlock all 18 fields, XLSX/JSON export, and the REST API and webhooks needed to automate a recurring comparison run.
Map your competitive set today
50 free credits. No credit card. First competitor dataset in under 5 minutes.
Start free →