We pull Local SEO heat maps for every client we manage and we put those numbers in front of business owners. Before we keep doing that we wanted to know how the numbers are built and whether they say what a reader thinks they say. So we exported all 35,492 grid pins, recomputed the averages from scratch, and compared the result against Google Search Console and Google Analytics. Most of what we found is sound. A few things are not, and one of them reverses the meaning of a chart.
We exported the full grid summary for the account, which returns one row per grid pin rather than one row per keyword. That gave us 35,492 rows covering 874 keyword grids across 24 business records. Every average in this document was recomputed from those rows.
We then pulled Google Search Console and Google Analytics directly, using our own OAuth credentials rather than anything reported back through the platform. That gives us a second opinion that does not originate from Search Atlas.
One limit up front. We could not independently confirm any individual rank claim. We tried, and the section near the end lists exactly what we tried and how each attempt failed. Everything in this document is therefore a check of Search Atlas against Search Atlas, or against Google data that measures a different surface. Where we are guessing, we say so.
We want to lead with this because it is the larger part of the finding. The grid mechanics look real and internally consistent.
For every grid we checked by hand, the average returned by the detail endpoint matched the average we computed from that grid's own pins. The number the detail view shows is the number its data supports.
Grid centres sit on the business address for 18 of the 19 active records, at the configured radius, with the standard 39 pin circle. The coordinates are genuine, not synthesised.
Where the heat map says a business is nowhere, Search Console agrees. Right On Roof On shows nothing on all 25 grids, and Search Console independently finds almost no demand reaching that site.
Long running grids carry monthly snapshots back to September 2025, with competitor names, review counts and appearance counts per pin. That is genuinely useful comparative data.
The problems we found are not with the crawl. They are with how the collected data is summarised into the single number that a client actually reads.
We reverse engineered the headline average by testing candidate formulas against the exported pins. One fits, and it matched the displayed figure for 17 of the 20 business records that show one. The three misses were all within 0.6 of a rounding boundary.
Step 1 For each grid, average the 39 pins. A pin where the business does not appear counts as 21, one worse than the bottom of the visible scale. Step 2 Discard every grid where the business appeared on no pin at all. Step 3 Average the grids that are left. That is the number on the dashboard.
Step 1 is defensible and we have no argument with it. Step 2 is the one we would like explained. A keyword where the business is invisible across the entire grid is the strongest possible signal of a visibility problem, and it is the signal that gets removed before the average is taken.
Across the account, 124 of 874 grids (14.2 percent) return no ranking on any pin, and every one of them is excluded from the average its client sees. The effect is not evenly spread. For some businesses it changes the headline substantially.
| Business | Shown | Counting dropped grids | Difference | Grids dropped |
|---|---|---|---|---|
| Procare Consulting | 11 | 15.93 | +5.49 | 26 of 50 |
| Skyline Tent Company | 3 | 7.48 | +4.75 | 13 of 50 |
| Curated Events Charlotte - Showroom | 13 | 15.94 | +3.11 | 19 of 50 |
| Curated Events DC- Leesburg Showroom | 5 | 6.84 | +2.36 | 5 of 35 |
| Bola Aladegbami, MD | 8 | 10.00 | +2.09 | 8 of 50 |
| Elegant Event Lighting | 5 | 7.08 | +1.86 | 6 of 51 |
| Curated Events Savannah | 4 | 5.73 | +1.85 | 4 of 37 |
| Texas Strong Plumbing | 5 | 6.98 | +1.56 | 5 of 50 |
| Endometriosis Center of Excellence | 3 | 3.78 | +1.10 | 3 of 50 |
| Swiff Security | 3 | 3.24 | +0.74 | 1 of 25 |
| Curated Events D.C. (Tyson Corner Showroom) | 4 | 4.35 | +0.70 | 2 of 49 |
| WW Air Specialist | 6 | 6.18 | +0.30 | 1 of 50 |
| Mayday Pest | 13 | 12.85 | +0.16 | 1 of 50 |
Counting those 13 grids at the same value the formula already uses for an absent pin moves the average from 3 to 7.48. Both numbers are defensible as statistics. Only one of them tells an owner that a quarter of the terms being tracked on their behalf are not working.
Computed from 1,950 exported pins for that record.
Procare Consulting is the widest gap in the account: 26 of 50 grids dropped, moving the average from 11 to 15.93.
When a business appears on none of the 39 pins, the detail endpoint reports avg_rank: 0 and best_position: 0, alongside a position distribution showing all 39 pins in the worst band. The list endpoint reports the same grid as null.
So the same condition is expressed three different ways across the product: null, 0, and 21 inside the per grid maths. Zero is the one that causes damage, because on any scale where one is the best rank, zero reads as better than first.
We checked what this does downstream in our own reporting, and we found the fault on our side too. Our report builder passes avg_rank straight through and sorts the map pack table ascending, so a grid reporting zero sorts to the top and is presented to the client as their strongest keyword. That is our bug to fix and we are fixing it. We raise it here because any customer building on this field will hit the same thing.
This is the finding that prompted the review. Texas Strong Plumbing tracks the keyword katy plumbing. Its two snapshots read like a collapse.
| Snapshot date | Reported average | What the pins actually contain |
|---|---|---|
| 2026-05-04 | 0 | Appeared on no pin. Zero is the absence marker. |
| 2026-06-01 | 20.5 | Ranked first on 1 pin, absent on the other 38. |
The business improved. The chart shows a decline. The cause is that zero and 20.5 both describe near total absence, but they sit at opposite ends of a rank axis. Any client report that charts avg_rank over time inherits this reversal, and the reader has no way to detect it from the chart alone.
Grid 2tuh.ceo8. Distribution reported as 1 pin in positions one to three, 37 beyond twenty, 1 failed.
Worth adding as context rather than criticism: the top competitor on that grid is The Katy Plumbing Company Heating & Air, holding 38 of 39 pins with 3,639 reviews. The keyword is close to that competitor's brand name, so the tracked term may simply be a poor choice on our side.
Calling the list endpoint and the detail endpoint for the same grid, within the same minute, returns two different averages. The detail endpoint agrees with the pins. The list endpoint is consistently higher by exactly half a position.
| Keyword | Business | List endpoint | Detail endpoint | From the pins | Pin detail |
|---|---|---|---|---|---|
| wedding lighting near me | Elegant Event Lighting | 1.5 | 1 | 1.00 | all 39 pins report rank 1 |
| event lighting rental | Elegant Event Lighting | 1.8 | 1.3 | 1.33 | 30 pins at 1, 6 at 2, 2 at 3, 1 at 4 |
| uplighting near me | Elegant Event Lighting | 2.4 | 1.9 | 1.90 | 14 pins at 1, 16 at 2, 8 at 3, 1 at 4 |
| tent rental service | Skyline Tent Company | 2.5 | 2 | 2.03 | 10 pins at 1, 18 at 2, 11 at 3 |
The first row is the cleanest test. All 39 pins report rank one, so the average can only be one. The detail endpoint says one. The list endpoint says 1.5. We would like to know which figure the dashboard and the reporting exports use, because a portfolio view built on the list endpoint would show every client half a position worse than their own detail page.
No pin in the export carries a rank above 20, yet 15 grids report an average above 20. This follows directly from counting absent pins as 21, and it is arithmetically correct. It is also unreadable: a client asking what position 20.9 means has no good answer, because the scale stops at 20.
| Keyword | Business | Reported average | Pins where it ranks |
|---|---|---|---|
| top rated gynecologist near me | Endometriosis Center of Excellence | 20.9 | 1 of 39 |
| best gynecologist near me | Endometriosis Center of Excellence | 20.9 | 2 of 39 |
| inguinal hernia surgery fort worth | Bola Aladegbami, MD | 20.9 | 2 of 39 |
| hernia surgeon fort worth tx | Bola Aladegbami, MD | 20.9 | 1 of 39 |
| group health insurance florida | Procare Consulting | 20.8 | 1 of 39 |
| rentals near me | Curated Events Savannah | 20.6 | 1 of 39 |
| pelvic pain doctor near me | Endometriosis Center of Excellence | 20.6 | 1 of 39 |
| dental insurance tampa | Procare Consulting | 20.5 | 1 of 39 |
| group health insurance tampa | Procare Consulting | 20.5 | 1 of 39 |
| air solutions heating cooling | WW Air Specialist | 20.5 | 1 of 39 |
In every one of these cases the business ranks on one or two pins out of 39. A label such as "visible on 2 of 39 points" would carry the same information without implying a position that cannot exist.
Our own standard is a three mile circle. The export shows that is not what every client has, and in one case the difference is large enough to make the client's number incomparable to everyone else's.
| Business | Grids | Pins | Shown avg | Counting dropped | Dropped | Pins absent | Days since scan |
|---|---|---|---|---|---|---|---|
| Mayday Pest | 50 | 3,200 | 13 | 12.85 | 1 | 46% | 26 |
| Elegant Event Lighting | 51 | 1,989 | 5 | 7.08 | 6 | 24% | 26 |
| Curated Events | 46 | 1,950 | 12 | 12.49 | 0 | 11% | 0 |
| Curated Events Chesapeake | 49 | 1,950 | 2 | 1.54 | 0 | 0% | 1 |
| Curated Events - North Nashville Showroom | 50 | 1,950 | 2 | 2.19 | 0 | 0% | 1 |
| Skyline Tent Company | 50 | 1,950 | 3 | 7.48 | 13 | 27% | 20 |
| Ventura Rental | 50 | 1,950 | 2 | 1.51 | 0 | 0% | 26 |
| Curated Events Raleigh | 50 | 1,950 | 4 | 3.67 | 0 | 0% | 26 |
| Curated Events D.C. (Tyson Corner Showroom) | 49 | 1,950 | 4 | 4.35 | 2 | 6% | 26 |
| Endometriosis Center of Excellence | 50 | 1,950 | 3 | 3.78 | 3 | 12% | 26 |
| WW Air Specialist | 50 | 1,950 | 6 | 6.18 | 1 | 6% | 26 |
| Bola Aladegbami, MD | 50 | 1,950 | 8 | 10.00 | 8 | 23% | 26 |
| Curated Events Charlotte - Showroom | 50 | 1,950 | 13 | 15.94 | 19 | 52% | 26 |
| Texas Strong Plumbing | 50 | 1,950 | 5 | 6.98 | 5 | 14% | 56 |
| Procare Consulting | 50 | 1,948 | 11 | 15.93 | 26 | 68% | 25 |
| Curated Events Savannah | 37 | 1,443 | 4 | 5.73 | 4 | 17% | 26 |
| Curated Events DC- Leesburg Showroom | 35 | 1,365 | 5 | 6.84 | 5 | 20% | 26 |
| Right On Roof On | 25 | 975 | none | 21.00 | 25 | 100% | 25 |
| Swiff Security | 25 | 975 | 3 | 3.24 | 1 | 8% | 26 |
Spacing. Mayday runs at null miles against a portfolio standard of three, producing a measured grid radius of 25.05 miles. Half that grid sits in towns a local pest control business has no reason to serve, which is most of why it reports 46 percent of pins absent and an average of 13. The number is not wrong. It is measuring a different question.
Mixed spacing inside one account. 0 records carry more than one spacing value across their grids, so a single business average blends grids covering different geographies.
Grid placement. Right On Roof On has its grid centred 21.5 miles from downtown Austin and 2.1 miles from Hutto, while tracking keywords written for Austin. It has no address on record in the platform. All 25 of its grids return nothing, and misplacement is the most likely reason.
Freshness. Texas Strong Plumbing is set to a crawl frequency of zero, meaning one time only. Its last scan was 2026-06-01, 56 days ago, and it will not refresh again. This client received a report during that window.
Some of this is ours to clean up rather than yours to fix, but it affects what we are paying for so we are including it.
A home address tracked as a business. The record named 20547 Amberfield Dr is a residential street address carrying 3 grids and 117 pins, tracking the terms house, condo and apartment for rent. Every pin returns nothing, and has since it was created.
| Business | Pins | Last scan | Exported coordinates | Address on record |
|---|---|---|---|---|
| Custom Builder Connection | 1 | never scanned | lat -84.5021, lng 29.7869 | 8588 Katy Fwy #450, Houston, TX 77024 |
| Curated Events Nashville (Belle Meade) | 1 | never scanned | lat -86.8576, lng 36.1306 | 95 White Bridge Rd Suite 110, Nashville, TN 37205, USA |
Both records above export a single pin and have never been scanned. Their coordinates are also transposed: the Nashville record exports latitude -86.8576 and longitude 36.1306, which are that address's real values in the opposite fields. A latitude of -86.86 is in the Southern Ocean.
Duplicate grids. 6 grids export twice the expected rows, at 78 rows across only 39 distinct pin coordinates, which suggests the same keyword is tracked twice for the same business.
| Keyword | Business | Rows exported | Distinct pins |
|---|---|---|---|
| canopies and tent rentals | Curated Events | 78 | 39 |
| tent rental service | Curated Events Chesapeake | 78 | 39 |
| rental tents for weddings near me | Curated Events | 78 | 39 |
| wedding party decoration rentals | Curated Events | 78 | 39 |
| wedding centerpiece rentals | Curated Events | 78 | 39 |
| event rentals near me | Curated Events D.C. (Tyson Corner Showroom) | 78 | 39 |
Business record drift. Review counts held against the heat map record differ from the counts held against the same business in the Google Business Profile section of the same platform.
| Business | Heat map record | Profile record | Difference |
|---|---|---|---|
| Mayday Pest | 434 | 444 | +10 |
| Procare Consulting | 127 | 135 | +8 |
| Surfers Point Live | 6 | 0 | -6 |
| WW Air Specialist | 78 | 83 | +5 |
| Curated Events Chesapeake | 80 | 81 | +1 |
| Ventura Rental | 183 | 184 | +1 |
| Curated Events Raleigh | 154 | 155 | +1 |
| Endometriosis Center of Excellence | 82 | 81 | -1 |
| Curated Events Charlotte - Showroom | 0 | 1 | +1 |
| Texas Strong Plumbing | 307 | 308 | +1 |
| Curated Events Nashville (Belle Meade) | 12 | 13 | +1 |
We pulled Search Console for every property we control and matched each tracked heat map keyword against real recorded queries over the ninety day window. 537 of 832 tracked keywords (64.5 percent) appear in Search Console at all.
We want to be careful about what that does and does not prove. Search Console measures the website in web results. The heat map measures the business listing in the map pack. They are different surfaces, and a keyword can carry real map pack demand while producing no web impressions. This table cannot falsify a single rank claim and we are not presenting it as though it does. What it does show is which tracked terms have any demonstrable demand behind them.
| Business | Tracked | Seen in Search Console | Share | Impressions | Clicks | Median position |
|---|---|---|---|---|---|---|
| Right On Roof On | 25 | 2 | 8% | 14 | 0 | 41 |
| WW Air Specialist | 50 | 14 | 28% | 97 | 0 | 11.7 |
| Mayday Pest | 50 | 16 | 32% | 859 | 12 | 8.3 |
| Skyline Tent Company | 50 | 20 | 40% | 332 | 6 | 5.3 |
| Procare Consulting | 50 | 21 | 42% | 2,567 | 1 | 21.1 |
| Texas Strong Plumbing | 50 | 28 | 56% | 2,091 | 2 | 21.9 |
| Endometriosis Center of Excellence | 50 | 29 | 58% | 9,302 | 238 | 10.7 |
| Elegant Event Lighting | 51 | 30 | 59% | 795 | 13 | 12.9 |
| Curated Events | 46 | 28 | 61% | 588 | 8 | 10.9 |
| Curated Events Chesapeake | 49 | 35 | 71% | 1,680 | 13 | 8 |
| Swiff Security | 25 | 18 | 72% | 1,365 | 0 | 42.9 |
| Curated Events D.C. (Tyson Corner Showroom) | 49 | 39 | 80% | 1,271 | 30 | 9.3 |
| Bola Aladegbami, MD | 50 | 40 | 80% | 1,073 | 0 | 29.2 |
| Curated Events Raleigh | 50 | 43 | 86% | 4,643 | 119 | 9.5 |
| Ventura Rental | 50 | 44 | 88% | 8,303 | 20 | 20 |
| Curated Events DC- Leesburg Showroom | 35 | 32 | 91% | 1,437 | 23 | 10.7 |
| Curated Events Charlotte - Showroom | 50 | 48 | 96% | 6,788 | 84 | 11.1 |
| Curated Events - North Nashville Showroom | 50 | 49 | 98% | 5,859 | 59 | 18.1 |
The two ends of that table are both informative. Right On Roof On sits at the bottom, and the heat map already says the same thing, so the two sources agree that this business is invisible. At the other end several records show most tracked terms carrying real impressions, which is the pattern you would expect from a well chosen keyword set.
Analytics over the same window, for context on whether visibility is reaching these sites at all:
| Business | Sessions | Organic search | Organic share |
|---|---|---|---|
| Curated Events | 270,357 | 67,756 | 25% |
| Endometriosis Center of Excellence | 56,398 | 45,716 | 81% |
| Surfers Point Live | 25,972 | 1,258 | 5% |
| Ventura Rental | 23,983 | 9,150 | 38% |
| Celebrate | 6,755 | 4,411 | 65% |
| Skyline Tent Company | 4,500 | 2,229 | 50% |
| Mayday Pest | 3,455 | 1,868 | 54% |
| Procare Consulting | 3,279 | 926 | 28% |
| Elegant Event Lighting | 2,628 | 703 | 27% |
| Swiff Security | 643 | 250 | 39% |
| WW Air Specialist | 633 | 318 | 50% |
| Bola Aladegbami, MD | 567 | 303 | 53% |
| Custom Builder Connection | 350 | 81 | 23% |
| Right On Roof On | 254 | 69 | 27% |
| Texas Strong Plumbing | 168 | 18 | 11% |
We set out to verify a specific claim: that at a given coordinate, for a given keyword, a business holds a given position. We could not complete that check, and we would rather state that than imply a verification we did not perform.
| Method | Outcome | Detail |
|---|---|---|
| Geo targeted Google search, coordinate encoded uule, fetched through Firecrawl | BLOCKED | Google returned its automated traffic page and a CAPTCHA instead of results. |
| Google Maps listing page by CID, fetched through Firecrawl | BLOCKED | Maps returns a JavaScript shell of map tiles, no rating or review text in the response. |
| Google Business Profile Performance API, direct | BLOCKED | businessprofileperformance.googleapis.com returns quota_limit_value 0 on this project. |
| Google Business Profile Account Management API, direct | BLOCKED | mybusinessaccountmanagement.googleapis.com returns quota_limit_value 0 on this project. |
| Google Search Console API, direct | AVAILABLE | 85,082 query rows pulled across 15 properties, plus 42,995 rows across 6 Curated Events location properties. |
| Google Analytics 4 Data API, direct | AVAILABLE | Session and channel data pulled for 15 properties. |
4 of the 6 routes we tried are closed to us and 2 are open. The two Google Business Profile interfaces return a quota ceiling of zero on our project, which means the direct profile integration is not available to us at all. That is a gap on our side, not a fault in your product, and we are pursuing access separately.
Everything in this document compares Search Atlas against Search Atlas, or against Google data describing a different surface. If there is a way for a customer to audit a rank claim at a coordinate, we would like to know what it is. That single answer would resolve most of what follows.
avg_rank: 0 currently means "appears nowhere" but sorts and plots as better than first place. A null, or an explicit flag, would remove a whole class of downstream error for anyone building on the API.The crawl looks sound. The summary is where meaning gets lost.
124 invisible grids removed before averaging, 122 grids reporting zero for absence, and one chart that runs backwards.
Nothing here was typed by hand. Every figure is computed from the exported data by a script, so any number in this document can be traced back to a row in the source files.
1 Export the grid summary for all businesses. One row per pin, 35,492 rows.
2 parse.cjs reads the export and groups pins into 874 keyword grids.
3 analyze.cjs recomputes every average, counts the sentinel values,
matches keywords against Search Console and writes findings.json.
4 build.cjs renders this page from findings.json alone.
Readings taken directly from the API are recorded verbatim in
api-readings.json so the displayed values can be diffed against the export.
The comparisons in the endpoint section were taken by calling both endpoints for the same grid identifier in the same session. Those identifiers are printed in the tables above so they can be checked directly.
We verified that grid averages match their pins for a sample of grids, not for all 874. We did not verify that any rank is correct, because Google blocked every route we tried. The Search Console comparison measures a different surface from the map pack and cannot confirm or deny a map pack position. The formula in this document is inferred from matching computed values against displayed ones for 17 of 20 records, not from documentation, so it may be wrong in detail. And the review count comparison uses two Search Atlas surfaces, neither of which we could check against live Google.