Google Maps Rank Tracker — Geo-Grid Local SEO avatar

Google Maps Rank Tracker — Geo-Grid Local SEO

Pricing

from $3.00 / 1,000 grid point checkeds

Go to Apify Store
Google Maps Rank Tracker — Geo-Grid Local SEO

Google Maps Rank Tracker — Geo-Grid Local SEO

Google Maps rank tracker for local SEO: check a business's rank at every point of a 3x3 to 13x13 geo-grid, with the top 3 competitors per point, average rank, share of local voice and a rank grid. A pay-per-point local rank tracker and Local Falcon alternative: $3 per 1,000 grid points.

Pricing

from $3.00 / 1,000 grid point checkeds

Rating

0.0

(0)

Developer

Heim

Heim

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

Google Maps Geo-Grid Rank Tracker

See where a business ranks on Google Maps across its whole service area, not just at its front door.

Give a business, one or more keywords and a grid centre. The actor searches Google Maps from every point of a 3 x 3 to 13 x 13 grid and returns, for each point:

  • The business's rank among Google Maps results (1–20, ads excluded), or "not in the top 20"
  • The top 3 businesses ranking there, with place ID, category, rating and review count
  • Optionally the full top 20 at each point

The run summary (OUTPUT) adds, per keyword, the rank grid (one rank per grid point, laid out like the map, ready to paste into a report or spreadsheet), average rank, and the share of points where the business is in the Maps top 3.

It is a pay-per-use alternative to Local Falcon-style geo-grid tools for local SEO agencies, multi-location brands and anyone checking how a Google Business Profile performs street by street. Schedule it weekly to track a trend. No accounts, API keys or logins needed.

How much does it cost?

EventPriceWhen
grid-point$0.003One keyword checked at one grid point, delivered (found or not in the top 20)

A 5 x 5 grid for one keyword is 25 points, $0.075. A 7 x 7 grid for three keywords is 147 points, $0.441. Apify also bills its start event (apify-actor-start): $0.00005 per run at the default 256 MB.

You are not charged when Google blocks a request, times out or returns a page the actor cannot read. Each such point is retried once through a different proxy and, if it still fails, listed in the free status dataset. Set Maximum cost per run in Apify to cap spend: the actor stops before starting a point the budget cannot cover.

Input

FieldExampleNotes
businessName"Toothbar"As shown on Google Maps; case and punctuation are ignored
placeId"ChIJO0xN0RG1RIYRIDFDZYJkYjA"Optional, recommended: tells apart branches that share a name. Every row returns place IDs
keywords["dentist", "teeth whitening"]Up to 10
centerLat, centerLng30.2672, -97.7431Usually the business's location (the numbers after @ in its Maps URL)
gridSize53, 5, 7, 9, 11 or 13 points per side
spacingKm1Distance between neighbouring points
zoom14Google Maps zoom at each point (11–18)
businessCountry"US"Two-letter code; sets Google's region and proxy routing (below)
language"en"Google interface language
includeAllResultsfalseAdd the full top 20 to each row (same price)

Keywords x grid points is capped at 1,000 per run.

Output

One row per keyword and grid point (rows run north to south, columns west to east):

{
"keyword": "plumber",
"row": 0, "col": 0, "lat": 39.766331, "lng": -105.025346,
"rank": 1, "found": true, "matchedBy": "placeId",
"matchedPlaceId": "ChIJkWUJx22Ha4cRVVLq4AJk7Ng",
"top3": [
{ "rank": 1, "name": "Applewood Plumbing Heating & Electric", "placeId": "ChIJkWUJx22Ha4cRVVLq4AJk7Ng", "category": "Plumber", "rating": 4.9, "reviews": 17883, "isTarget": true },
{ "rank": 2, "name": "Golden West Plumbing, Heating, Air Conditioning, and Electrical", "...": "..." },
{ "rank": 3, "name": "Good Plumbing Service Company", "...": "..." }
],
"resultsCount": 20,
"zoom": 14,
"checkedAt": "2026-10-17T12:56:00.000Z"
}

OUTPUT (key-value store) per keyword:

{ "keyword": "plumber", "pointsDelivered": 25, "pointsFound": 24, "pointsTop3": 6, "top3Share": 0.24,
"averageRankWhereFound": 9, "averageRankAllPoints": 9.48,
"grid": ["1 1 4 12 18", "1 1 6 14 17", "1 1 8 10 16", "4 5 10 15 16", "11 12 15 20+ 18"] }

How ranks are measured

Each point is a Google Maps search with the map centred on that point at the chosen zoom, the same request the Maps website makes. Rank is the position in the result list, ads excluded. In testing on 2026-10-17 the results matched a manual Google Maps check exactly (top 8–10, in order) for a dentist in Austin, a plumber in Denver and a cafe in Manchester, at grid centres and corners.

Google also re-orders results by the searcher's own IP location. A proxy inside the business's country would make positions 2–10 depend on wherever that proxy happens to be, and differ from run to run. So the actor sends requests from outside the business's country: residential IPs in Germany (then the UK) for US businesses, US datacenter IPs (then US residential) for everyone else. The ranks are therefore what Maps shows for that map view, without a local searcher's personal location. A phone physically in the area can see a slightly different order below the top 3.

Limits

  • Google Maps HTTP only, no browser. If Google changes this response format, points become free unrecognised_response status rows rather than wrong data.
  • The top 20 only: "not in the top 20" is reported as rank: null (and 20+ in the grid).
  • Name matching is exact after normalising case, accents and punctuation; use placeId for chains or near-duplicate names. With placeId set, a different location with the same name is never counted.
  • A result page with an unreadable entry or no results at all is a free unrecognised_response row, never a charged "not in the top 20".
  • The whole grid must lie between latitudes -85 and 85; grids crossing the 180° meridian are supported.
  • This actor does not collect personal data. It returns public business listings only.

Usage telemetry

Each run sends one anonymous usage record (a hashed caller ID, whether the run came from the API or the Console, and charged-event counts) to the developer's private dataset. No inputs, keywords or results are recorded.