← Health board

Google Maps Geo-Grid Rank Tracker & Competitor Heatmap

See where a business ranks on Google Maps at every point of a grid around it, and where every competitor ranks too: rank per point to 60, average rank, top-3 counts, a rank matrix per rival and an HTML heatmap.

—insufficient data

Verification

Not yet in the weekly verification report.

Output fields

Authoritative field set from the dataset schema.

FieldType
row_typestring|null
businessstring|null
business_place_idstring|null
business_addressstring|null
keywordstring|null
grid_rowinteger|null
grid_colinteger|null
latitudenumber|null
longitudenumber|null
zoom_minteger|null
rankinteger|null
scanned_tointeger|null
top3array|null
competitorsarray|null
grid_sizeinteger|null
step_kmnumber|null
pointsinteger|null
points_rankedinteger|null
average_ranknumber|null
average_total_ranknumber|null
top3_pointsinteger|null
top10_pointsinteger|null
top20_pointsinteger|null
share_of_top3number|null
ratingnumber|null
review_countinteger|null
top3_average_reviewsnumber|null
rank_matrixarray|null
place_idstring|null
namestring|null
addressstring|null
categoriesarray|null
google_maps_urlstring|null
source_urlstring|null
noticestring|null
notice_typestring|null

Sample row

{
  "row_type": "summary",
  "business": "Blue Bottle Coffee",
  "business_place_id": "ChIJLRIbILeAj4ARyWoMWFQmkSY",
  "business_address": "480 9th St, Oakland, CA 94607",
  "keyword": "coffee shop",
  "grid_size": 5,
  "step_km": 1,
  "zoom_m": 3000,
  "points": 25,
  "points_ranked": 20,
  "average_rank": 35.95,
  "average_total_rank": 40.96,
  "top3_points": 0,
  "top10_points": 1,
  "top20_points": 5,
  "share_of_top3": 0,
  "rating": 4.4,
  "review_count": 396,
  "top3_average_reviews": 231.3,
  "rank_matrix": [
    [
      46,
      56,
      null,
      null,
      null
    ],
    [
      33,
      17,
      38,
      49,
      null
    ],
    [
      24,
      14,
      6,
      39,
      59
    ],
    [
      24,
      12,
      13,
      22,
      51
    ],
    [
      54,
      50,
      54,
      58,
      null
    ]
  ],
  "source_url": "https://www.google.com/maps/search/?api=1&query=Blue%20Bottle%20Coffee&query_place_id=ChIJLRIbILeAj4ARyWoMWFQmkSY"
}

Inputs

FieldTypeReqDefaultDescription
businesses array no ["Blue Bottle Coffee 480 9th St Oakland"] Each business by its name and street address, as you would type it into Google Maps, e.g. "Blue Bottle Coffee 480 9th St Oakland". The grid is centred on the business, and each row names the place it resolved to. Leave empty to map a keyword's competitors around a location instead (below).
business string no — A single business, for API calls and saved tasks. Combined with the list above.
keywords array no ["coffee shop"] What a customer types into Google Maps, e.g. "coffee shop" or "emergency plumber". Each keyword is one grid scan per business.
keyword string no — A single keyword, for API calls and saved tasks. Combined with the list above.
gridSize integer no 5 Points per side: 3, 5, 7 or 9 (3 = 9 points, 5 = 25, 7 = 49, 9 = 81). Any other number is rounded to the nearest of these. Each point is one charge per keyword.
stepKm number no 1 Kilometres between neighbouring grid points. 1 km suits a city neighbourhood; 3-5 km a suburb or a service-area business.
zoomMeters integer no 3000 How wide the Google Maps view is at each point, which is the map's zoom. It changes rankings a lot (in our test one business ranked 2nd with a 1,000 m view and 33rd with a 30,000 m view from the same spot), so keep it the same between runs you compare. 3,000 m is about a neighbourhood on a phone screen.
maxRank integer no 60 Look for the business down to this rank: 20, 40 or 60 (Google Maps pages hold 20 places). Included in the price per point. Beyond it the point reads "not ranked".
includeCompetitorMatrix boolean no true Adds a free row for every competitor that reaches the top 10 at any point: its rank at every point, average rank, top-3 count, rating and reviews.
location string no — With no business above, the grid is centred here and you get the competitor rows only, e.g. "Downtown Oakland, CA".
centerLatitude number no — With no business, centre the grid on these coordinates instead of a location name.
centerLongitude number no — Pairs with the centre latitude.
maxGridPoints integer no — Optional spend cap for the WHOLE run (all businesses and keywords together): scanning stops at this many points and a free row says how many were left.
proxyConfiguration object no {"useApifyProxy":true} Apify's datacenter proxy by default, which is what this actor was built for.

Pricing

Pay per result (grid-point) — no charge for empty runs.
Example: 25 grid points at $0.012/result ≈ $0.30.

FAQ

How is a grid point searched?

The actor searches Google Maps for your keyword with the map view centred on the point, the way the Google Maps site does when you move the map there. It does not fake a phone's GPS. The rank is the business's position in that answer, counting each place once.

Why does the map zoom matter?

Google Maps ranks places inside the visible map, so a wider view brings in more competitors. In our test (2026-11-06) Blue Bottle Coffee in Oakland ranked 2nd for "coffee shop" with a 1,000 m view, 6th at 3,000 m, 16th at 10,000 m and 33rd at 30,000 m, all from the same spot. Pick one zoom and keep it between runs you compare. The default, 3,000 m, is about a neighbourhood on a phone screen.

Will my ranks match another rank tracker's?

Not exactly. Google's answer varies a little with where a search comes from: the same grid read from two different internet connections differed by 1 to 4 places at the same points in our test. Compare runs of this actor with each other, at the same zoom.

What are the competitor rows?

Every place that reaches the top 10 at any point of the grid gets a free row: its rank at every point (rank_matrix), average rank, points in the top 3, rating and review count. They come from the same searches as your ranks, so they cost nothing extra. Turn them off with "Competitor rows".

Can I map a market without a business?

Yes. Leave the business empty and give a location ("Downtown Oakland, CA") or centre coordinates. You get the point rows and the competitor rows; there is no summary, since there is no business to rank.

How am I charged?

$0.012 per grid point per keyword, with every page to rank 60 included. A 5x5 grid for one keyword is $0.30; a 7x7 grid $0.59. Summary, competitor and notice rows are free, and so is a point Google refused. Set "Maximum grid points for the run" to cap the spend.

Where is the heatmap?

In the run's key-value store, one HTML page per business and keyword, named heatmap-<business>-<keyword>: the grid as coloured squares (green top 3, light green top 10, yellow top 20, red beyond), north at the top, the business at the centre.

How long does a run take?

Measured on 2026-11-06: a 5x5 grid for one keyword in about 10 seconds. Each point takes one to three Google Maps searches, five points at a time.

Guides & use cases

Related actors