# Google Maps Geo-Grid Rank Tracker (`geogridapi/google-maps-geogrid-rank-tracker`) Actor

See where a Google Business Profile ranks on Google Maps across a grid of points around it. Per-point rank, average rank, top-3 coverage, who ranks ahead and a PNG heatmap. Powered by GeoGridAPI.

- **URL**: https://apify.com/geogridapi/google-maps-geogrid-rank-tracker.md
- **Developed by:** [GeoGridAPI](https://apify.com/geogridapi) (community)
- **Stats:** 2 total users, 1 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $4.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

### What does Google Maps Geo-Grid Rank Tracker do?

It shows **where a Google Business Profile ranks on Google Maps across a whole area**, not just from one spot. A grid of points is laid around the business, and at each point the Actor runs the Google Maps search a customer standing there would run. You get the business's rank on every point of the map, from 1 to 20.

Use it to:

- 📍 **Prove local SEO results** to a client with a before / after heatmap.
- 🔎 **See where a business stops showing up** (the north of the city, the next suburb).
- 🥊 **Find who ranks ahead**: the competitors that take the top 3 on each point.
- 📈 **Track rankings every week** with an Apify schedule.

It is powered by [GeoGridAPI](https://geogridapi.io), the geo-grid engine behind the Localnord local SEO platform.

### What data do you get?

One result per business and keyword:

| Field | Example |
|---|---|
| `businessName`, `businessAddress`, `placeId` | Joe's Pizza, 1435 Broadway, New York |
| `keyword` | pizza |
| `averageRank` | 2.4 (average where the business was found) |
| `averageRankWithMisses` | 5.1 (a point outside the top 20 counts as 21) |
| `top3Points`, `foundPoints` | 18 of 25 points in the top 3, 25 in the top 20 |
| `ranks` | the grid as rows × columns, north first, west first |
| `points` | every point: latitude, longitude, rank and the top 3 businesses there |
| `competitors` | who ranks ahead: points in the top 3, points ranked 1st, points ahead of you |
| `imageUrl` | a PNG heatmap on a Google Maps background |

Export it as JSON, CSV, Excel or HTML, or read it from the Apify API. Heatmap links live as long as the run's storage (your plan's data retention): download the images you want to keep.

### How to track your Google Maps rankings

1. Add one or more **businesses**: their name with a street or city, or a Google place ID.
2. Add the **keywords** customers type, such as `pizza` or `emergency plumber`.
3. Pick a **grid**: a 3 × 3 to 9 × 9 square, or a circle, diamond, hexagon, cross, ellipse or rectangle (up to 49 points), and its radius.
4. Click **Start**. A map takes from a few seconds to a couple of minutes, depending on its size.

Each business × keyword pair is one map. One run measures up to 100 maps, 3 at a time.

### How much does it cost?

**$0.005 per grid point measured**, Apify platform usage included, with a discount on Apify's paid plans:

| Grid | Points | Free & Starter ($0.005) | Scale ($0.0045) | Business & up ($0.004) |
|---|---|---|---|---|
| 3 × 3 | 9 | $0.045 | $0.041 | $0.036 |
| 5 × 5 | 25 | $0.125 | $0.113 | $0.100 |
| 7 × 7 | 49 | $0.245 | $0.221 | $0.196 |
| 9 × 9 | 81 | $0.405 | $0.365 | $0.324 |

A map's points are charged when the map starts, only if it fits in the run's **Maximum cost per run**; a map that doesn't fit is listed as skipped and costs nothing. On a circle, diamond, hexagon, cross, ellipse or rectangle, points that fall in the sea are left out and not charged. If the ranking engine fails a map twice in a row, the result says so: open an issue with the run link and we will get its points refunded.

**Already a GeoGridAPI customer?** Paste your key in "Your GeoGridAPI key": the maps use your GeoGridAPI credits and this Actor charges no grid points. A `gga_test_` key returns free sample maps, handy to try the output format.

### Input example

```json
{
  "businesses": ["Joe's Pizza, 1435 Broadway, New York"],
  "keywords": ["pizza", "pizza delivery"],
  "shape": "square",
  "gridSize": "7",
  "radiusKm": 3,
  "includeImage": true
}
```

### Use it from Claude, ChatGPT or Cursor

Through the [Apify MCP server](https://mcp.apify.com), any MCP client can call this Actor as a tool: "Where does Joe's Pizza rank for pizza around Times Square?" GeoGridAPI also has its own MCP server for AI assistants, documented on [geogridapi.io](https://geogridapi.io/en/docs).

### FAQ

**Is the rank the same as what I see on my phone?** Each point is a fresh Google Maps search made from that exact location, without personal history, so it matches what a new customer standing there sees.

**What does a missing rank mean?** The business is not in the first 20 results at that point.

**Can I track the same map every week?** Yes: save your input as a task and add an Apify schedule. Keep the same businesses, keywords, shape and radius to compare maps.

**Is it legal?** The Actor only collects public Google Maps search results: business names, ranks and place IDs. No personal data is collected.

**Something is wrong?** Open an issue on this Actor's Issues tab, with the run link.

# Actor input Schema

## `businesses` (type: `array`):

Google Business Profiles to track, one per line. Write the name with its city or street ("Joe's Pizza, Broadway, New York"), or paste a Google place ID (ChIJ...).

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

Searches to measure, one per line, as a customer would type them in Google Maps ("pizza", "plumber").

## `shape` (type: `string`):

Square grids are set by size. Other shapes are set by density, up to 49 points, and points that fall in the sea are skipped and not charged.

## `gridSize` (type: `string`):

Points per side of a square grid. Ignored for other shapes.

## `density` (type: `string`):

How many points fill a circle, diamond, hexagon, cross, ellipse or rectangle. Ignored for square grids.

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

Distance from the business to the edge of the grid, from 0.5 to 30 km (at least 1 km for shapes other than square). Leave empty for the default: 1.5 km for 3 × 3, 2.5 km for 5 × 5, 3.5 km for 7 × 7, 4.5 km for 9 × 9.

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

Two-letter language code of the Google Maps results ("en", "fr", "de"). Leave empty for English.

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

Two-letter country code ("us", "fr") that helps find the right business when its name exists in several countries.

## `includeImage` (type: `boolean`):

Saves a PNG of each map (Google Maps background, rank on every point) in the key-value store and links it in the results.

## `geogridApiKey` (type: `string`):

Already have GeoGridAPI credits? Paste a key from geogridapi.io: the maps are paid with your credits and this Actor charges no grid points.

## Actor input object example

```json
{
  "businesses": [
    "Joe's Pizza, 1435 Broadway, New York"
  ],
  "keywords": [
    "pizza"
  ],
  "shape": "square",
  "gridSize": "5",
  "density": "medium",
  "includeImage": true
}
```

# Actor output Schema

## `results` (type: `string`):

Dataset items, one per map (business × keyword), with the rank on every grid point.

## `heatmaps` (type: `string`):

PNG heatmaps saved in the run's key-value store, one per completed map (keys starting with grid-).

# 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 = {
    "businesses": [
        "Joe's Pizza, 1435 Broadway, New York"
    ],
    "keywords": [
        "pizza"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("geogridapi/google-maps-geogrid-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 = {
    "businesses": ["Joe's Pizza, 1435 Broadway, New York"],
    "keywords": ["pizza"],
}

# Run the Actor and wait for it to finish
run = client.actor("geogridapi/google-maps-geogrid-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 '{
  "businesses": [
    "Joe'\''s Pizza, 1435 Broadway, New York"
  ],
  "keywords": [
    "pizza"
  ]
}' |
apify call geogridapi/google-maps-geogrid-rank-tracker --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,geogridapi/google-maps-geogrid-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/Z9EOe04swoTKBJhOq/builds/TczXIKK0EdokhJst1/openapi.json
