# Google Maps Geo-Grid Rank Tracker - Local Falcon Alternative (`wrenfield-data/google-maps-grid-rank-tracker`) Actor

See where a business ranks on Google Maps across an N x N grid around it: rank per pin, average rank, share of local voice, top competitors per pin, a heatmap image and changes since the last run. $0.008 per grid point, a 7x7 scan costs $0.40.

- **URL**: https://apify.com/wrenfield-data/google-maps-grid-rank-tracker.md
- **Developed by:** [Wrenfield Data](https://apify.com/wrenfield-data) (community)
- **Categories:** SEO tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $6.00 / 1,000 grid points

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Google Maps Geo-Grid Rank Tracker: local rank heatmaps without a subscription

**Google Maps Geo-Grid Rank Tracker** shows where a business ranks on **Google Maps** from every part of its city. It places an **N x N grid** of points around the business (3x3 up to 15x15), runs the search from each point and reports the **rank per pin**, **average rank (ARP / ATRP)**, **share of local voice (SoLV)**, the **competitors that beat you** at each pin, a **heatmap image** and **changes since the last run**.

It's a pay-as-you-go **Local Falcon / BrightLocal grid alternative**: **$0.008 per grid point**, so a 7x7 scan of one keyword costs **$0.40**.

- 🗺️ **True geo-grid**: each pin is a real Google Maps search from that location.
- 🥇 **Rank per pin + top 3 at each pin**: see exactly who wins where.
- 📊 **ARP, ATRP and SoLV** per keyword, plus the 10 strongest competitors across the grid.
- 🖼️ **Heatmap PNG** per keyword, ready for client reports.
- 🔁 **Change tracking**: schedule it weekly and every run shows rank and SoLV changes.
- 🔎 **Finds the business for you**: enter the name and city, or a place ID for exact matching.

#### Sample output

| Keyword | Pin | Distance (km) | Rank | In top 3 |
|---|---|---|---|---|
| gutter cleaning | 1 | 2.83 | 20+ | no |
| gutter cleaning | 2 | 2 | 19 | no |
| gutter cleaning | 3 | 2.83 | 17 | no |

<sub>Real rows from a test run (Oct 19, 2026), 5 of 18+ fields shown.</sub>

### How to run a geo-grid scan

1. Enter **Keywords** (e.g. `plumber`, `emergency plumber`).
2. Enter the **Business name** and **Business city / area** (or a **Google place ID**).
3. Pick a **Grid size** (5 = 25 points, 7 = 49) and **Radius** (distance from the centre to the edge).
4. Click **Start**. Open the **Summary per keyword** view for averages and the heatmap link.

### Input example

```json
{
    "keywords": ["roofer", "roof repair"],
    "businessName": "Summit Ridge Roofing",
    "businessLocation": "Boise, ID",
    "gridSize": 7,
    "radiusKm": 5
}
```

### Output

Two kinds of rows (field `row_type`):

**`pin`**: one per keyword and grid point.

```json
{
    "row_type": "pin", "keyword": "roofer", "pin": 5, "row": 2, "col": 2,
    "latitude": 43.5961538, "longitude": -116.2126687, "distance_km": 0.0,
    "rank": 4, "rank_label": "4", "in_top3": false, "previous_rank": 6, "rank_change": 2,
    "top_results": [{"rank": 1, "name": "Point Roofing & Restoration", "rating": 4.9, "reviews": 433}]
}
```

**`summary`**: one per keyword.

```json
{
    "row_type": "summary", "keyword": "roofer", "grid_size": 3, "pins_checked": 9, "pins_found": 6,
    "pins_top3": 0, "average_rank": 8.67, "average_total_rank": 12.78, "share_of_local_voice": 0.0,
    "average_total_rank_change": 1.4,
    "top_competitors": [{"name": "Point Roofing & Restoration", "pins_top3": 5, "average_rank": 2.0}],
    "heatmap_url": "https://api.apify.com/v2/key-value-stores/.../records/HEATMAP-roofer"
}
```

- **ARP** (`average_rank`): average rank on the pins where the business shows up.
- **ATRP** (`average_total_rank`): average over all pins, counting "not found" as depth + 1. Lower is better.
- **SoLV** (`share_of_local_voice`): % of pins where the business is in the top 3 (the local pack).

### Pricing

Pay-per-event pricing. Paid Apify plans get automatic volume discounts (Bronze, Silver, Gold).

| Event | Price |
| --- | --- |
| Grid point (`grid-point`) | **$0.008** per keyword per grid point |
| Business lookup (`business-lookup`) | **$0.005** once per run, when the Actor looks the business up by name |

| Example run | Cost |
| --- | --- |
| 1 keyword, 5x5 grid (default) | $0.21 |
| 1 keyword, 7x7 grid | $0.40 |
| 5 keywords, 9x9 grid, weekly | $3.25 per scan |

**Free Apify plan:** 1 keyword on a 3x3 grid per run, so you can try it before you upgrade.

### Use it through the API, on a schedule or with AI agents

**One-link MCP setup:** `https://mcp.apify.com?tools=wrenfield-data/google-maps-grid-rank-tracker` (Claude, Cursor, VS Code or any MCP client). Set `maxTotalChargeUsd` on the run to cap what it can charge.

Schedule a weekly scan per client in Apify, call it from the [Apify API](https://docs.apify.com/api/v2), or connect it to Make, Zapier, n8n and Google Sheets. AI agents can call it through the Apify MCP server; the default 5x5 scan finishes in about 30 seconds.

### FAQ

**Where does the data come from?**
From a licensed Google Maps results provider (DataForSEO) that runs each search from the exact coordinates of the pin. No logins, no browser, no proxies on your side.

**How does it find my business in the results?**
By Google place ID or CID when known (most reliable), otherwise by website domain or exact business name.

**Where is the history stored?**
In a named key-value store `maps-grid-rank-history` in your own Apify account. Turn off **Compare with the last run** to skip it.

### Related tools

From the same developer:

- [Businesses Without Websites](https://apify.com/wrenfield-data/businesses-without-websites): local businesses on Google Maps that need a website
- [Google Rank Tracker](https://apify.com/wrenfield-data/google-rank-tracker): organic Google positions and AI Overview citations
- [SEO Toolkit All-in-One](https://apify.com/wrenfield-data/seo-toolkit): domain overview, competitors, backlinks and live SERPs
- [Tripadvisor Reviews Scraper](https://apify.com/wrenfield-data/tripadvisor-reviews-scraper): reviews for hotels, restaurants and attractions

### Feedback and support

Missing a field, hit an error, or need another country or option? Open an issue on the **Issues** tab and include the run ID. We read every issue and reply there.

### Acceptable use

- This Actor is an independent tool. It is not affiliated with, endorsed by or sponsored by Google, DataForSEO, Local Falcon or BrightLocal. Product names are used only to describe compatibility.
- Use it to measure local visibility. Don't use it to manipulate Google Maps rankings, create fake listings or fake reviews.
- The Actor may not be used from, or for people or organizations in, Russia, Belarus, Cuba, Iran, Syria, Myanmar, North Korea, Crimea or the Russian-occupied territories of Ukraine.
- You are responsible for using the results lawfully.

# Actor input Schema

## `keywords` (type: `array`):

What customers search on Google Maps, e.g. <code>plumber</code>, <code>emergency plumber</code>. Up to 20.

## `businessName` (type: `string`):

The business to track, exactly as on Google Maps.

## `businessLocation` (type: `string`):

Helps find the right business, e.g. <code>Boise, ID</code>.

## `placeId` (type: `string`):

Most precise way to identify the business (e.g. <code>ChIJ...</code>).

## `cid` (type: `string`):

Alternative business ID (the number in maps?cid=...).

## `businessDomain` (type: `string`):

Used to match the business when no ID is given.

## `centerCoordinates` (type: `string`):

Latitude, longitude for the grid centre, e.g. <code>43.6150, -116.2023</code>. Default: the business location.

## `gridSize` (type: `integer`):

Points per side (odd number): 3 = 9 points, 5 = 25, 7 = 49, 9 = 81, up to 15 = 225.

## `radiusKm` (type: `number`):

Distance from the centre to the outer points. 1-3 km for dense cities, 5-15 km for suburbs and service areas.

## `depth` (type: `integer`):

How deep to look in each Google Maps result list (10-100). Ranks beyond this show as "20+".

## `zoom` (type: `integer`):

Google Maps zoom level used at each point (13 = city level, 15 = neighbourhood).

## `trackChanges` (type: `boolean`):

Remember results in a named key-value store ("maps-grid-rank-history") so each run shows rank changes.

## `country` (type: `string`):

Country used to find the business by name.

## `language` (type: `string`):

Language of the results. Default: English.

## Actor input object example

```json
{
  "keywords": [
    "roofer"
  ],
  "businessName": "Boise Roofing and Gutters",
  "businessLocation": "Boise, ID",
  "gridSize": 5,
  "radiusKm": 3,
  "depth": 20,
  "zoom": 13,
  "trackChanges": true,
  "country": "United States"
}
```

# Actor output Schema

## `summary` (type: `string`):

No description

## `pins` (type: `string`):

No description

## `allFields` (type: `string`):

No description

## `runSummary` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "keywords": [
        "roofer"
    ],
    "businessName": "Boise Roofing and Gutters",
    "businessLocation": "Boise, ID",
    "country": "United States"
};

// Run the Actor and wait for it to finish
const run = await client.actor("wrenfield-data/google-maps-grid-rank-tracker").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "keywords": ["roofer"],
    "businessName": "Boise Roofing and Gutters",
    "businessLocation": "Boise, ID",
    "country": "United States",
}

# Run the Actor and wait for it to finish
run = client.actor("wrenfield-data/google-maps-grid-rank-tracker").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "keywords": [
    "roofer"
  ],
  "businessName": "Boise Roofing and Gutters",
  "businessLocation": "Boise, ID",
  "country": "United States"
}' |
apify call wrenfield-data/google-maps-grid-rank-tracker --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,wrenfield-data/google-maps-grid-rank-tracker"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/KypcI1DaEjvlgVyFU/builds/5LBC8qn8MI7Y2Yq3a/openapi.json
