# Google Maps Rank Tracker (`vasram/google-maps-rank-tracker`) Actor

Track Google Maps rankings across a geo-grid heatmap. Get SoLV score, competitor leaderboard, gap analysis, zone breakdown, trend tracking & interactive HTML dashboard. Bulk scan up to 10 businesses. White-label reports. Free LocalFalcon & BrightLocal alternative — 50% cheaper, no monthly fees.

- **URL**: https://apify.com/vasram/google-maps-rank-tracker.md
- **Developed by:** [Vasram Sonagara](https://apify.com/vasram) (community)
- **Categories:** SEO tools, Lead generation, Automation
- **Features:** Limited permissions
- **Stats:** 32 total users, 1 monthly users, 92.9% runs succeeded, 2 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

from $600.00 / 1,000 5x5 grid scans

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 — interactive SoLV heatmap dashboard on Apify](https://plain-apac-prod-public.komododecks.com/202605/19/4ehM04ZzHaYSlbgO334S/image.png)

Track your **Google Business Profile ranking** across a geographic grid with a **pay-per-scan geo-grid rank tracker**. Whether you need a **Google Maps rank tracker API** for programmatic tracking, or a **local SEO rank heatmap automation** tool without monthly fees, this actor does one job well: enter a business name, keyword, and location — it scans [Google Maps](https://maps.google.com) at every point of a customizable geo-grid and computes professional **Local SEO metrics**: Share of Local Voice (SoLV), Average Rank Position (ARP), a competitor leaderboard with threat levels, gap analysis, zone-by-zone breakdown, trend tracking, **AI-generated action plans**, **rank history charts**, and an **interactive HTML heatmap dashboard** — ready for client presentations. No Google API key required — just fill in 3 fields and press Start.

**No monthly subscription. No expiring credits. Pay only per scan, starting at $0.25.** Results come as JSON, CSV, Excel, or a self-contained HTML dashboard. Every Apify account gets **$5 free platform credits/month** — enough for ~8 scans (5×5 grid) at no cost.

🌐 **[See a live dashboard example →](https://api.apify.com/v2/key-value-stores/D5VC4lbybNzLr9ieV/records/report.html)** — open a real scan result in your browser right now.

***

### 🎯 What does Google Maps Rank Tracker do?

This actor is a **complete local SEO geo-grid rank tracking tool** built for agencies, small business owners, and SEO consultants. It runs the same core workflow that made LocalFalcon popular — scan a grid of coordinates around a business, check the Google Maps ranking for your keyword at each point, and turn the results into a heatmap and metrics — at **pay-per-scan prices, without a subscription**.

**Core capabilities:**

- 📍 **Geo-grid rank scanning** — Scan a 3×3, 5×5, 7×7, or 9×9 grid around your business location
- 📊 **Industry-standard metrics** — SoLV (Share of Local Voice), ARP (Average Rank Position), ATRP (Average True Rank Position), Dominance Score, Visibility %
- 🏆 **Competitor leaderboard** — See who's outranking you, where they beat you, and their threat level (🔴 HIGH / 🟡 MEDIUM / 🟢 LOW)
- 📉 **Gap analysis** — Rating gap, review count gap, and category advantage vs. the market leader
- 🗺️ **Interactive HTML heatmap** — A self-contained dashboard with Leaflet.js map, color-coded grid, and score cards
- 📈 **Trend tracking over time** — Compare scans to see rank changes, SoLV deltas, and new/lost competitors
- 🔍 **Zone-by-zone analysis** — North, South, East, West, Center — see exactly where you're strong, weak, or have opportunities
- 💡 **Automated insights & alerts** — CRITICAL / WARNING / OPPORTUNITY alerts with suggested actions and recommendations
- ⭐ **Review breakdown** — Star distribution (1★–5★) for your business without extra tools
- 🏷️ **Category mismatch detection** — Flags competitors ranking for your keyword who are in a different business category
- 🤖 **AI Action Plan** — An AI local-SEO consultant reads your scan and returns 3–6 prioritized actions with expected impact — bring your own API key (OpenAI, OpenRouter, Groq, or any OpenAI-compatible provider)
- 📈 **Rank history charts** — Every scan builds your history automatically: SoLV, score, and review growth over time with progress-since-first-scan badges (up to 60 scans)
- 🔔 **Monitor mode & alerts** — Run on a schedule and get change alerts (SoLV drops, score drops, disappeared rankings, new competitors) pushed to Slack/email/Zapier via Apify webhooks
- 🌍 **10 language support** — English, Hindi, Spanish, French, German, Portuguese, Arabic, Japanese, Korean, Chinese
- 🔗 **Apify platform integrations** — Schedule daily/weekly scans, use webhooks, connect with Zapier, Make, or your own API
- 📦 **Bulk multi-location scanning** — Scan up to 10 businesses in a single run — perfect for agencies managing multiple clients
- 🏷️ **White-label reports** — Add your agency name and logo to the HTML dashboard for professional client presentations

![Local SEO scoring dashboard — overall grade A+ with SoLV, visibility, rank quality, and geographic coverage breakdown](https://plain-apac-prod-public.komododecks.com/202605/19/JA9A6UlZruWHJCdTe1OW/image.png)

***

### 📊 What data can you extract from Google Maps rankings?

| Data Category | What You Get |
|:---|:---|
| **Your Business Profile** | Name, address, rating, reviews, categories, phone, website, opening hours, Place ID, Google Maps URL, business status |
| **Review Breakdown** | Star-by-star distribution (5★ to 1★ count), price level |
| **Rank at Each Grid Point** | Rank position (1–20+), Local Pack status (top 3), zone color (🟢🟡🔴⚫), direction (N/S/E/W/NE/NW/SE/SW/Center), distance from center, Google Maps search link |
| **Core Metrics** | SoLV, ARP, ATRP, Visibility %, Dominance Score (0–100), Letter Grade (A+ to F), rank distribution, median rank |
| **Scoring Breakdown** | Overall score with 4 weighted components: Local Pack Presence (35%), Overall Visibility (25%), Rank Quality (25%), Geographic Coverage (15%) |
| **Competitor Leaderboard** | Top competitors ranked by threat score — with their SoLV, ARP, rating, reviews, head-to-head comparison, and category mismatch flag |
| **Gap Analysis** | Rating gap to leader, review count gap, category advantage detection |
| **Zone Analysis** | N/S/E/W/Center performance with per-zone SoLV, grade, and status (DOMINANT / STRONG / WEAK / CRITICAL) + strongest, weakest, and opportunity zone |
| **Trend Tracking** | Rank changes vs. previous scan, SoLV delta, new/lost competitors (requires 2+ scans) |
| **Automated Insights** | Alerts (CRITICAL / WARNING / POSITIVE / OPPORTUNITY), actionable recommendations, and a plain-English summary |
| **AI Action Plan** | 3–6 prioritized actions (HIGH/MEDIUM/LOW) with details and expected impact, generated from your scan data |
| **Rank History** | SoLV-over-time, score-over-time, and review-growth charts across all your scans + progress-since-first-scan deltas |
| **Monitoring Alerts** | Change alerts vs the previous scan (SoLV/score drops and gains, lost rankings, new competitors) |
| **HTML Dashboard** | Interactive map with color-coded grid markers, score card, competitor table, zone chart — downloadable as a single HTML file |

***

### 💡 Why track your Google Maps rankings?

Tracking your Google Maps rank from a single location gives you **incomplete data**. Your ranking changes depending on where the searcher is standing. A customer 2 miles north of your business might see you at #1, while someone 3 miles south sees you at #15 — or not at all.

**Geo-grid rank tracking solves this** by scanning your rank from dozens of locations across your service area.

Here's how businesses use this data:

- 🏢 **Local SEO agencies** — Generate professional client reports showing exactly where they rank (and where they don't)
- 🔧 **Service businesses** (plumbers, HVAC, lawyers, dentists) — Discover which neighborhoods you're invisible in
- 📈 **Track SEO progress** — Run weekly scans to measure whether your optimization efforts are actually working
- 🕵️ **Competitive intelligence** — See which competitors dominate your area and how you compare head-to-head
- 📋 **Multi-location brands** — Audit Google Maps performance for each branch or franchise location
- 💼 **Pitch new clients** — Show prospects their current ranking gaps to win local SEO contracts

***

### 🆚 LocalFalcon alternative — an honest comparison

LocalFalcon is the best-known geo-grid rank tracker and a genuinely great product. This actor exists for a different need: the **core geo-grid tracking workflow** — grids, SoLV, competitor gap analysis, client-ready heatmaps — **paid per scan, without a monthly subscription**.

#### Where this actor is cheaper

LocalFalcon's pay-as-you-go rate is **$0.05 per grid point** (its subscription plans run $24.99–$199.99/month, and unused monthly credits expire). This actor charges per scan:

| Grid Size | Points | 💰 This Actor (pay per scan) | LocalFalcon (pay-as-you-go) | You Save |
|:---:|:---:|:---:|:---:|:---:|
| 3×3 | 9 | **$0.25** | $0.45 | 44% |
| 5×5 | 25 | **$0.60** | $1.25 | 52% |
| 7×7 | 49 | **$1.10** | $2.45 | 55% |
| 9×9 | 81 | **$1.80** | $4.05 | 56% |

**Included in every scan at no extra cost:** competitor leaderboard with threat scoring, gap analysis, zone breakdown, automated insights, review breakdown, trend comparison, rank history charts, and the downloadable HTML heatmap — things some tools charge extra for or gate behind higher tiers. The AI Action Plan runs on your own API key (any OpenAI-compatible provider), so AI costs stay on your account.

**No subscription, no expiring credits:** you pay only when you actually run a scan, and nothing expires at the end of the month.

> 📌 LocalFalcon rates are calculated from its published $0.05/point pay-as-you-go rate; subscription pricing changes over time, so check LocalFalcon's site for current numbers.

#### When LocalFalcon is the better choice

To be upfront — LocalFalcon is a larger, more established product, and it does things this actor doesn't:

- **Larger grids** — LocalFalcon supports grids up to 21×21 (441 points); this actor goes up to 9×9 (81 points)
- **AI-powered features** — AI search visibility tracking and AI-generated recommendations
- **Extra channels & tools** — Apple Maps tracking, keyword research, Looker Studio connectors, and broader GBP management
- **High monthly volume** — if you scan constantly, LocalFalcon's subscription tiers can work out cheaper per point than any pay-per-scan pricing

Choose LocalFalcon if you need those. Choose this actor if you want the core geo-grid scan, competitor gap analysis, and client-ready reports — paid per scan, only in the months you need them.

#### How about other local SEO tools?

BrightLocal, Local Viking, Whitespark, Semrush Local, and Localo are subscription-based local SEO suites that include rank tracking among many other features. They suit teams that want an all-in-one monthly platform. If you'd rather pay per scan — a few dollars only in the months you actually need reports — that's the gap this actor fills.

***

### 🚀 Getting Started in 60 Seconds

You **do not** need a Google Place ID, exact lat/lng coordinates, or any complex setup. The actor automatically finds your business using just the basic details!

> ### ⚡ Quick Start
>
> 1. Click **"Try for free"** to open the Apify Console.
> 2. Fill in the **3 basic fields**:
>    - 🏢 **Business Name:** e.g., `"Joe's Pizza"`
>    - 🔍 **Keyword:** e.g., `"best pizza near me"`
>    - 📍 **Location:** e.g., `"Brooklyn, NY"`
> 3. Click **"Start"**!
>
> *(No Google API key needed — the actor handles everything. Your geo-grid and HTML heatmap report generate automatically.)*

![Google Maps rank checker input form — enter business name, keyword, location, and grid size to start scanning](https://i.ibb.co/0p5C71CJ/apify-input.png)

> 💡 **Pro tip:** Schedule this actor to run daily or weekly using [Apify Schedules](https://docs.apify.com/platform/schedules) to automatically track your ranking trends over time.

***

### 📥 Google Maps Rank Tracker input configuration

The actor accepts the following inputs. For full technical details, see the **Input tab** on the actor page.

| Field | Required | Default | Description |
|:---|:---:|:---:|:---|
| `businessName` | ✅ | — | Your business name as shown on Google Maps |
| `keyword` | ✅ | — | Search keyword to track (e.g., `"dentist near me"`) |
| `location` | ⭐ | — | Address or city name (auto-geocoded to lat/lng) |
| `gridSize` | — | `3x3` | Grid dimensions: `3x3`, `5x5`, `7x7`, or `9x9` |
| **📦 Bulk Scan** | | | *(Scan up to 10 businesses in one run)* |
| `businesses` | — | — | Array of businesses to scan — each with `businessName`, optional `keyword` and `location` |
| **⚙️ Advanced Settings** | | | *(Optional — skip for a quick scan)* |
| `placeId` | — | — | Google Place ID for exact business matching (starts with `ChI`) |
| `lat` / `lng` | — | — | Exact coordinates (use instead of location) |
| `radius` | — | `5` | Search radius from center (0.1–100) |
| `measurement` | — | `km` | Unit: `km` or `miles` |
| `language` | — | `en` | Search language (10 languages supported) |
| `country` | — | `us` | 2-letter country code (e.g., `in`, `uk`, `de`) |
| `maxCompetitorsPerPoint` | — | `5` | Competitors to track per grid point (1–20) |
| `fetchReviews` | — | `true` | Fetch star distribution for your business |
| `gridSpacingKm` | — | auto | Custom grid spacing in km (overrides auto-calculation) |
| **🤖 AI Action Plan** | | | *(Bring your own API key)* |
| `enableAiPlan` | — | `true` | Generate the AI Action Plan section (requires `aiApiKey`) |
| `aiApiKey` | ⭐ | — | **Your API key — powers the AI plan, billed to your account.** Any OpenAI-compatible provider: OpenAI, OpenRouter, Groq, Together, DeepSeek |
| `aiBaseUrl` | — | — | Base URL for non-OpenAI keys, e.g. `https://openrouter.ai/api/v1` |
| `aiModel` | — | — | Model id on your provider (default `gpt-4o-mini`, ~$0.001/scan on OpenAI) |
| **🔔 Monitoring & Alerts** | | | *(For scheduled rank tracking)* |
| `monitor` | — | `false` | Monitor Mode: push a `MONITOR_ALERT` item when a scheduled re-scan detects changes (for webhooks) |
| `alertSolvDropPct` | — | `5` | SoLV change threshold (percentage points) that triggers a monitoring alert |
| **🏷️ White-Label** | | | *(Customize report branding)* |
| `agencyName` | — | — | Your agency/brand name for the HTML report header |
| `agencyLogo` | — | — | URL of your agency logo for the HTML report navbar |

**Example input (JSON):**

```json
{
    "businessName": "Joe's Pizza",
    "keyword": "best pizza",
    "location": "Brooklyn, NY",
    "gridSize": "5x5",
    "radius": 5,
    "measurement": "km",
    "language": "en",
    "country": "us",
    "maxCompetitorsPerPoint": 5,
    "fetchReviews": true
}
```

**Bulk scan example (multiple businesses in one run):**

```json
{
    "keyword": "best pizza",
    "location": "Brooklyn, NY",
    "gridSize": "5x5",
    "businesses": [
        { "businessName": "Joe's Pizza" },
        { "businessName": "Domino's Pizza" },
        { "businessName": "Papa John's", "keyword": "pizza delivery", "location": "Manhattan, NY" }
    ],
    "agencyName": "Your SEO Agency",
    "agencyLogo": "https://youragency.com/logo.png"
}
```

***

### 📤 Google Maps Rank Tracker output example

You can download the dataset in **JSON, CSV, Excel, XML, or HTML** format from the Output tab. The actor also generates an **interactive HTML dashboard** saved in the Key-Value Store.

Here's a simplified example of the JSON output for a single scan:

```json
{
    "scanId": "scan_586f0187b2ba",
    "status": "COMPLETED",
    "scanDate": "2026-05-18T11:06:41.807Z",
    "scanDurationSeconds": 39.1,
    "platform": "google_maps",
    "version": "1.1.0",

    "scanConfig": {
        "gridSize": "3x3",
        "totalGridPoints": 9,
        "radiusKm": 2.0,
        "keyword": "mexican restaurant near me",
        "language": "en",
        "country": "in"
    },

    "targetBusiness": {
        "name": "Mexicano by the Bay",
        "placeId": "ChIJ2X9gXEaFXjkR2appNaI5hYM",
        "address": "Ground Floor, Riverfront House, Ahmedabad, Gujarat 380009",
        "googleMapsUrl": "https://maps.google.com/?cid=9477044359714679513",
        "rating": 4.3,
        "totalReviews": 4297,
        "primaryCategory": "Mexican restaurant",
        "reviewsBreakdown": { "5star": 2148, "4star": 1289, "3star": 215, "2star": 215, "1star": 430 },
        "priceLevel": "₹400–600",
        "openingHours": { "Monday": "10 AM–11:30 PM", "...": "..." },
        "businessStatus": "OPERATIONAL"
    },

    "metrics": {
        "solv": 100.0,
        "solvGrade": "A+",
        "solvDescription": "You DOMINATE this area",
        "arp": 1.33,
        "arpGrade": "A",
        "atrp": 1.33,
        "visibilityPercent": 100.0,
        "dominanceScore": 98.1,
        "totalPoints": 9,
        "pointsRanked": 9,
        "pointsInTop3": 9,
        "pointsInTop10": 9,
        "bestRank": 1,
        "worstRank": 3,
        "medianRank": 1.0,
        "rankDistribution": { "rank1": 7, "rank2": 1, "rank3": 1, "rank4to5": 0, "rank6to10": 0, "notRanked": 0 }
    },

    "scoring": {
        "overallScore": 98,
        "overallGrade": "A+",
        "breakdown": {
            "localPackPresence": { "score": 100.0, "weight": 0.35, "label": "Local Pack Presence (Top 3)" },
            "overallVisibility": { "score": 100.0, "weight": 0.25, "label": "Overall Visibility (Top 20)" },
            "rankQuality": { "score": 93.7, "weight": 0.25, "label": "Rank Quality (Avg Position)" },
            "coverageSpread": { "score": 96.6, "weight": 0.15, "label": "Geographic Coverage Spread" }
        }
    },

    "gridData": {
        "totalPoints": 9,
        "gridSummaryMatrix": [[1, 1, 1], [3, 1, 1], [1, 2, 1]],
        "points": [
            {
                "pointIndex": 0,
                "lat": 23.041151,
                "lng": 72.540717,
                "direction": "NW",
                "rank": 1,
                "rankFound": true,
                "zone": "localPack",
                "zoneColor": "#22C55E",
                "zoneEmoji": "🟢",
                "inLocalPack": true,
                "searchUrl": "https://www.google.com/maps/search/...",
                "topCompetitorsAtPoint": [
                    { "rank": 1, "name": "Mexicano by the Bay", "rating": 4.3, "totalReviews": 4297 },
                    { "rank": 2, "name": "DosBros Mexican Restaurant", "rating": 4.4, "totalReviews": 1360 }
                ]
            }
        ]
    },

    "competitorAnalysis": {
        "totalUniqueCompetitors": 12,
        "leaderboard": [
            {
                "rank": 1,
                "name": "The Mexican Tapas Bar",
                "solv": 66.67,
                "solvGrade": "B",
                "arp": 3.5,
                "threatLevel": "LOW",
                "threatEmoji": "🟢",
                "pointsWhereTheyBeatYou": 0,
                "pointsWhereYouBeatThem": 8,
                "isCategoryMismatch": true
            }
        ],
        "gapAnalysis": {
            "ratingGapToLeader": -0.4,
            "reviewGapToLeader": 4232,
            "categoryAdvantage": false,
            "leader": { "name": "The Mexican Tapas Bar", "rating": 4.7, "totalReviews": 65 }
        }
    },

    "zoneAnalysis": {
        "zones": [
            { "zone": "CENTER", "emoji": "🏠", "avgRank": 1.0, "solv": 100.0, "grade": "A+", "status": "DOMINANT", "insight": "You dominate CENTER. Excellent core presence!" },
            { "zone": "NORTH", "emoji": "⬆️", "avgRank": 1.0, "solv": 100.0, "grade": "A+", "status": "DOMINANT" },
            { "zone": "SOUTH", "emoji": "⬇️", "avgRank": 1.5, "solv": 100.0, "grade": "A+", "status": "DOMINANT" },
            { "zone": "EAST", "emoji": "➡️", "avgRank": 1.0, "solv": 100.0, "grade": "A+", "status": "DOMINANT" },
            { "zone": "WEST", "emoji": "⬅️", "avgRank": 1.7, "solv": 100.0, "grade": "A+", "status": "DOMINANT" }
        ],
        "strongestZone": { "zone": "CENTER", "grade": "A+" },
        "weakestZone": { "zone": "WEST", "grade": "A+" },
        "opportunityZone": { "zone": "WEST", "grade": "A+" }
    },

    "insights": {
        "alerts": [
            {
                "type": "POSITIVE",
                "emoji": "🏆",
                "title": "Excellent Local Pack Presence!",
                "message": "You appear in the Local Pack at 9 out of 9 points (100% SoLV).",
                "suggestedAction": "Keep it up! Continue posting regularly and collecting reviews."
            }
        ],
        "totalAlerts": 1,
        "criticalAlerts": 0,
        "recommendations": [
            "🏷️ Consider adding categories: Takeout Restaurant (used by a top competitor).",
            "📝 Post weekly Google Business updates with local keywords and photos."
        ],
        "summary": "Your business ranks in the Google Maps Local Pack (top 3) at 9 out of 9 grid points (100% SoLV)."
    },

    "trendComparison": {
        "hasPreviousScan": true,
        "previousScanId": "scan_a1b2c3d4e5f6",
        "previousScanDate": "2026-05-17T11:06:41.807Z",
        "daysBetweenScans": 1,
        "changes": {
            "solv": { "previous": 88.9, "current": 100.0, "delta": 11.1, "direction": "UP", "emoji": "⬆️" },
            "arp": { "previous": 2.1, "current": 1.33, "delta": -0.77, "direction": "IMPROVED", "emoji": "📈" },
            "atrp": { "previous": 2.1, "current": 1.33, "delta": -0.77, "direction": "IMPROVED", "emoji": "📈" },
            "visibilityPercent": { "previous": 88.9, "current": 100.0, "delta": 11.1, "direction": "UP", "emoji": "⬆️" },
            "overallScore": { "previous": 91, "current": 98, "delta": 7, "direction": "UP", "emoji": "⬆️" }
        },
        "pointChanges": { "improved": 3, "declined": 0, "unchanged": 6, "newRankings": 0, "lostRankings": 0 },
        "newCompetitors": ["New Thai Place"],
        "lostCompetitors": ["Old Sushi Bar"],
        "trendSummary": "SoLV improved by 11.1%. 3 points improved. 1 new competitor(s) appeared. 1 competitor(s) disappeared."
    },

    "exportInfo": {
        "generatedBy": "GMaps-Rank-Grid-Tracker v1.1.0",
        "reportUrl": "https://api.apify.com/v2/key-value-stores/.../records/report.html"
    }
}
```

> 📌 This is a **simplified example** from an actual scan. The full output contains detailed data for every grid point, all competitors with contact info, and complete zone breakdowns. `trendComparison` populates automatically when you run multiple scans. Version 1.2 also outputs three more objects (omitted above for brevity): **`aiActionPlan`** (prioritized AI actions), **`history`** (SoLV/score/review series across your scans), and **`monitoring`** (change alerts vs the previous scan).
>
> 🔗 **[View the full JSON output from a live scan →](https://api.apify.com/v2/datasets/qEhIQ6BvjZKD9yD4r/items?format=json\&limit=1000\&clean=true)**

***

### 🗺️ Interactive HTML heatmap dashboard

Every scan generates a **self-contained HTML report** saved in the Key-Value Store as `report.html`. Open it in any browser — no server needed.

**The dashboard includes:**

- 🗺️ **Interactive Leaflet map** — Color-coded grid markers showing your rank at each point (🟢 Top 3 / 🟡 4-10 / 🔴 11-20 / ⚫ Not Found)
- 📊 **Score card** — Overall grade, SoLV, ARP, ATRP, and Dominance Score at a glance
- 🤖 **AI Action Plan panel** — 3–6 prioritized actions (HIGH/MEDIUM/LOW) with expected impact, generated from your scan
- 📈 **Rank History charts** — SoLV, score, and review growth over time across all your scans (builds automatically, scan #1 onward)
- 🏆 **Competitor leaderboard table** — Sortable list of all competitors with head-to-head metrics
- 🧭 **Zone analysis chart** — Compass-based geographic performance (N/S/E/W/Center)
- 💡 **Insights panel** — Automated alerts and recommended actions
- 🔔 **Monitoring alerts strip** — Changes detected vs your previous scan (drops, gains, new competitors)
- 📈 **Trend comparison** — Side-by-side metric changes (SoLV, ARP, Score), point-level rank movements, and new/lost competitor tracking — activates automatically after your second scan

The report is designed for **client presentations** — print it or save as PDF directly from your browser.

> 🌐 **[Open a live HTML dashboard example →](https://api.apify.com/v2/key-value-stores/D5VC4lbybNzLr9ieV/records/report.html)**

![Google Maps local rank heatmap dashboard — interactive Leaflet map with color-coded grid markers and competitor leaderboard](https://plain-apac-prod-public.komododecks.com/202605/19/rjTbC9JS6NCFijA4GCad/image.png)

![Geo-grid rank tracking map — close-up of colored grid point markers showing rank positions across service area](https://plain-apac-prod-public.komododecks.com/202605/19/5nXLDg5YuCmGhkPezhdm/image.png)

***

### 💰 Pay-per-scan pricing — no monthly subscription

This actor uses a simple **pay-per-scan** model. No monthly fee, no minimum commitment, no expiring credits — you pay only in the months you actually scan.

| Grid Size | Points Scanned | Cost per Scan |
|:---:|:---:|:---:|
| 3×3 | 9 | **$0.25** |
| 5×5 | 25 | **$0.60** |
| 7×7 | 49 | **$1.10** |
| 9×9 | 81 | **$1.80** |

- **Free to try:** every Apify account gets **$5 free usage credits every month** on the [Free plan](https://apify.com/pricing) — enough for approximately **8 scans (5×5 grid)** at no cost.
- **Apify Store tier discounts** may reduce per-scan prices further as the actor earns badges on the platform.
- **Predictable cost:** the price of a scan is fixed and shown before you run it — no credit math, no surprise overages.

> 💡 **Example:** 10 client scans (5×5 grid) in a month = **$6.00 total**. The LocalFalcon pay-as-you-go equivalent would be $12.50, and most subscription tools start at $24.99+/month whether you scan or not.

***

### 🔗 Google Maps geo-grid rank tracker API

Yes. You can use the [Apify API](https://docs.apify.com/api/v2) to run this geo-grid rank tracker programmatically from any language.

**Python example:**

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_API_TOKEN")

run = client.actor("YOUR_USERNAME/google-maps-rank-tracker").call(run_input={
    "businessName": "Joe's Pizza",
    "keyword": "best pizza",
    "location": "Brooklyn, NY",
    "gridSize": "5x5",
})

dataset = client.dataset(run["defaultDatasetId"]).list_items().items
print(dataset[0]["metrics"]["solv"])  # 72.5
print(dataset[0]["scoring"]["overallGrade"])  # "B+"
```

**Node.js example:**

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

const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });

const run = await client.actor('YOUR_USERNAME/google-maps-rank-tracker').call({
    businessName: "Joe's Pizza",
    keyword: "best pizza",
    location: "Brooklyn, NY",
    gridSize: "5x5",
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items[0].metrics.solv); // 72.5
```

You can also integrate with **[Zapier](https://apify.com/integrations)**, **[Make](https://apify.com/integrations)**, **Google Sheets**, **Slack**, and more using Apify's built-in integrations.

***

### 📅 How to schedule automatic rank monitoring

Automate your rank tracking by scheduling recurring scans with [Apify Schedules](https://docs.apify.com/platform/schedules) — no coding required.

1. **Open Apify Console** → Go to [Schedules](https://console.apify.com/schedules)
2. **Click "Create new"** → Select this actor (`google-maps-rank-tracker`)
3. **Set your input** — Enter the same business name, keyword, and location you want to track
4. **Choose frequency** — Select "Weekly" (recommended), "Daily", or custom cron expression
5. **Turn on Monitor Mode** — Set `"monitor": true` in the input so every re-scan compares against the previous one
6. **Save and activate** — Your scan will run automatically, rank history charts will build, and change alerts will be pushed as `MONITOR_ALERT` dataset items

> 💡 **Tip:** Combine Monitor Mode with [Apify Webhooks](https://docs.apify.com/platform/integrations/webhooks) to get notified via email, Slack, or your own API **only when something actually changed** — SoLV drops, score drops, disappeared rankings, or new competitors. You can also push results to Google Sheets automatically using [Apify Integrations](https://apify.com/integrations).

***

### ❓ Frequently Asked Questions

#### What is Share of Local Voice (SoLV)?

SoLV measures the percentage of grid points where your business appears in the **top 3 results** (the Google Maps "Local Pack"). A SoLV of 72% means your business shows up in the Local Pack at 72% of the scanned locations. Higher is better — top-performing local businesses typically score 70%+.

#### How do I check my Google Maps ranking for free?

Every Apify account gets **$5 free usage credits every month** — that's about **20 scans on a 3×3 grid** or **8 scans on a 5×5 grid** at no cost, no credit card required. Schedule them weekly and your rank history charts build automatically.

#### Does this Google Maps rank tracker need an API key?

For rank tracking itself — no. The actor handles Google Maps data internally; you only enter a business name, keyword, and location. The **AI Action Plan** is the one exception: it runs on your own OpenAI-compatible API key (`aiApiKey` — OpenAI, OpenRouter, Groq, Together, DeepSeek all work), so AI usage is billed to your account at roughly $0.001 per scan with the default model. No key? Everything else still works — the AI section is simply skipped.

#### What is a geo-grid rank tracker?

A geo-grid rank tracker checks your ranking from **many GPS points arranged in a grid** around your business, instead of one average position. Because Google Maps results change with the searcher's location, the grid reveals exactly where you rank #1 and where you're invisible — visualized as a color-coded heatmap.

#### How do I monitor ranking changes automatically?

Enable **Monitor Mode** (`monitor: true`), schedule the scan with [Apify Schedules](https://docs.apify.com/platform/schedules), and connect an [Apify Webhook](https://docs.apify.com/platform/integrations/webhooks). Every re-scan compares against the previous one and pushes a compact `MONITOR_ALERT` item when SoLV or score drops, rankings disappear, or new competitors appear — delivered to email, Slack, or Zapier only when something actually changed.

#### Is this a LocalFalcon alternative?

Yes — an **affordable, pay-per-scan alternative** to LocalFalcon's geo-grid rank tracking. Both tools scan a grid of points around a business and compute SoLV-style local visibility metrics. The differences are honest ones: LocalFalcon supports larger grids (up to 21×21), AI-powered analysis, Apple Maps tracking, and a broader local SEO toolkit; this actor focuses on the core geo-grid scan, competitor gap analysis, and client-ready reporting — at roughly **half of LocalFalcon's pay-as-you-go price per scan**, with **no subscription and no expiring credits**. See the honest comparison section above for the full details.

#### Is this the cheapest LocalFalcon alternative?

It depends on how you scan. For **pay-per-scan** use, this actor starts at $0.25 per 9-point scan — less than half of LocalFalcon's $0.05/point pay-as-you-go rate for the same scan. If you run very high scan volumes every single month, a subscription tool can work out cheaper per point. But if you scan occasionally and don't want another monthly line item, pay-per-scan is almost always the cheaper path.

#### How is this different from a monthly local SEO subscription?

With a subscription, you pay the same amount whether you run 1 scan or 100. With this actor, you pay **per scan** — $0.25–$1.80 depending on grid size — and pay nothing in months where you don't need reports. There are no credits to lose and no plan to remember to cancel.

#### Is this a BrightLocal alternative?

For **geo-grid rank tracking** specifically, yes. BrightLocal is a full local SEO suite (citations, reviews, audits) with plans starting around $39/month and a 14-day trial. This actor does one thing — geo-grid scans with competitor analysis and client-ready reports — from $0.25 per scan, with no monthly commitment.

#### Is this a Local Viking alternative?

For geo-grid rank tracking, yes. Local Viking combines grid tracking with GMB posting on subscription plans. This actor is pay-per-scan only, includes the competitor leaderboard, gap analysis, white-label reports, and full API access in every scan.

#### Is there a free trial?

Yes — Apify gives every account **$5 free usage credits every month** on the [Free plan](https://apify.com/pricing). That's enough for approximately **8 scans (5×5 grid)** — completely free, every month, no credit card required.

#### Can I track multiple keywords?

Currently, each scan tracks **one keyword at a time**. To track multiple keywords (e.g., "plumber near me" AND "emergency plumber"), run separate scans for each keyword. You can automate this using [Apify Schedules](https://docs.apify.com/platform/schedules).

#### Can I scan multiple businesses at once?

Yes! Use the `businesses` input field to scan **up to 10 businesses in a single run**. Each entry needs a `businessName` — you can optionally override the `keyword` and `location` per business. This is ideal for agencies managing multiple clients in the same area. Each business is charged separately via PPE pricing (e.g., 5 businesses × $0.60 = $3.00 for 5×5 grids).

#### Can I add my agency branding to the report?

Yes. Use the `agencyName` and `agencyLogo` input fields to replace the default branding in the HTML dashboard. Your agency name appears in the report header and footer, and your logo appears in the navigation bar. This makes the report ready for client presentations without any post-processing.

#### How does trend tracking work?

Trend comparison activates automatically when you run **2 or more scans** for the same business name and keyword combination. The actor saves a compact snapshot after each scan to a persistent named storage. On the next run, it automatically compares:

- **SoLV change** — Did your Local Pack presence go up (⬆️) or down (⬇️)?
- **ARP change** — Is your average rank position improving (📈) or declining?
- **Point-level changes** — How many grid points improved, declined, or stayed the same
- **Competitor movement** — New competitors that appeared and old ones that disappeared
- **Overall score delta** — Your composite score change between scans

You don't need to wait between scans — even two runs on the **same day** will generate a valid trend comparison. Schedule regular scans using [Apify Schedules](https://docs.apify.com/platform/schedules) to build a ranking history over time. The interactive HTML report also includes a visual trend comparison section.

> 💡 **Tip:** The first scan always shows `trendComparison: null`. Run it once more with the same business name and keyword, and you'll see the full comparison data with metric deltas, point-level changes, and competitor shifts.

#### What grid size should I use?

- **3×3 (9 points)** — Quick overview. Good for initial testing or tight budgets. **$0.25/scan**
- **5×5 (25 points)** — Recommended for most businesses. Provides detailed coverage. **$0.60/scan**
- **7×7 (49 points)** — Deep analysis for competitive markets. **$1.10/scan**
- **9×9 (81 points)** — Full coverage for maximum detail and agency reports. **$1.80/scan**

#### What is the Dominance Score?

The Dominance Score (0–100) is a composite metric that combines your Local Pack presence, overall visibility, rank quality, and geographic coverage into a single number. It's accompanied by a letter grade (A+ to F) so you can quickly assess your local SEO health at a glance.

#### What is Gap Analysis?

Gap Analysis compares your business against the top competitor in your area. It shows you:

- **Rating gap** — How your Google rating compares to the market leader
- **Review gap** — How many more (or fewer) reviews you have
- **Category advantage** — Whether you're in the same business category as your top competitors

This helps you identify exactly what to improve to overtake the competition.

#### How accurate is the rank data?

The actor queries real-time Google Maps results with geographic precision (latitude/longitude + search keyword). Results reflect what a user would see when searching from that exact location at the time of the scan. Each grid point triggers an independent search to ensure location-specific accuracy.

#### Can I use this for local SEO client reporting?

Absolutely. This actor is built for **local SEO agencies and consultants**. Every scan generates a professional, self-contained HTML dashboard you can share with clients — no login needed, just open in a browser or save as PDF. The report includes color-coded geo-grid heatmaps, score cards, competitor tables, zone analysis, and actionable insights. Schedule automated scans with [Apify Schedules](https://docs.apify.com/platform/schedules) to deliver weekly or monthly reports automatically.

#### What are the advantages over the Google Maps API?

The official [Google Maps Places API](https://developers.google.com/maps/documentation/places/web-service) does **not** provide ranking data — it only returns place details. This actor uses a different approach to determine your actual position in Google Maps search results for a given keyword at specific geographic coordinates. The official API also has strict rate limits and costs $17 per 1,000 requests.

***

### ⚖️ Is it legal to track Google Maps rankings?

This actor queries publicly available Google Maps search results — the same data any person can see by searching on Google Maps. It does **not** extract private user data, personal information, or data behind a login wall.

We believe this tool, when used for ethical business intelligence and SEO analysis, is safe and compliant. However, you should be aware that your results could contain publicly listed business information. If you are unsure about your use case, consult your legal team.

You can also read Apify's blog post on the [legality of web scraping](https://blog.apify.com/is-web-scraping-legal/).

***

### 🆘 Support and feedback

- **Found a bug?** Report it on the [Issues tab](https://apify.com/vasram/google-maps-rank-tracker/issues) — I respond within 24 hours
- **Need help?** Leave a comment on the [Issues tab](https://apify.com/vasram/google-maps-rank-tracker/issues) or contact me directly
- **Feature request?** I'm actively developing this actor and welcome suggestions
- **Need a custom solution?** I can build custom Local SEO tools tailored to your needs — reach out via the [Issues tab](https://apify.com/vasram/google-maps-rank-tracker/issues)

Your feedback helps make this tool better for everyone. If you find it useful, please leave a ⭐ review!

# Changelog

This Actor's version history is a separate document: https://apify.com/vasram/google-maps-rank-tracker/changelog.md

# Actor input Schema

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

🏢 Your business name **exactly as it appears on Google Maps** — copy it from the Maps listing so the spelling matches. If several businesses in the area share a name, also provide the Place ID below for exact matching.

## `keyword` (type: `string`):

🔍 The search a customer would type on Google Maps — rankings are checked for this keyword at **every grid point**. Use the words your customers use, e.g. `dentist near me`, `best pizza`, `emergency plumber Brooklyn`.

## `location` (type: `string`):

📌 Where the grid is centered. A **full street address** is most accurate; a city or neighborhood (`Brooklyn, NY`) also works. Leave empty only if you provide Latitude & Longitude below.

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

📏 How many points around your business are scanned. More points = more detail = higher cost per scan. Start with **3×3** (cheapest) to test, or **5×5** for the sweet spot most agencies use.

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

📦 A JSON array. Each item needs `businessName`; all other fields are optional overrides:

```json
[
  { "businessName": "Joe's Pizza" },
  { "businessName": "Pizza Palace", "keyword": "pizza delivery", "location": "Manhattan, NY" }
]
```

Entries without a `businessName` are skipped with a warning.

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

🏢 Optional. Google Place ID (starts with `ChI`) for **exact** business matching. Use it when several businesses share a name. Leave empty to match by name. Find it with Google's Place ID finder.

## `lat` (type: `number`):

🗺️ Optional. Latitude of the grid center (−90 to 90). Use this + Longitude instead of Location for exact positioning (e.g. service-area businesses). Leave empty to geocode from Location.

## `lng` (type: `number`):

🗺️ Optional. Longitude of the grid center (−180 to 180). Must be provided together with Latitude.

## `radius` (type: `number`):

⭕ How far the grid stretches from the center. 2–3 works for dense cities, the default 5 covers most towns, 10+ for wide service areas.

## `measurement` (type: `string`):

📏 Unit for the Radius above — kilometers or miles. Miles are converted to km internally.

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

🌐 Language of the Google Maps results — matching what a local customer would see. Does not translate your keyword.

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

🏳️ Country bias for the Google Maps search. Auto-detected from Location when provided, so you usually don't need to touch this.

## `maxCompetitorsPerPoint` (type: `integer`):

📊 How many competitor listings to save at each grid point (1–20, default 5). More detail in the report, same price.

## `fetchReviews` (type: `boolean`):

⭐ Adds a 1★–5★ star-distribution chart for your business to the report. Recommended: keep it on. No extra cost.

## `gridSpacingKm` (type: `number`):

📏 Advanced: exact distance between grid points in km. Leave empty to auto-calculate from Radius (2 × radius ÷ (points − 1)). Use smaller values (0.5) for dense urban areas.

## `enableAiPlan` (type: `boolean`):

🤖 Adds an **AI Action Plan** section to the HTML report — e.g. 'collect 20 more reviews', 'add service-area keywords for the weak North zone'. **Requires the API key below** — without a key this section is skipped.

## `aiApiKey` (type: `string`):

🔑 Your API key — this is what powers the AI Action Plan, billed to your account. Works with OpenAI (platform.openai.com), OpenRouter, Groq, Together, DeepSeek, or any OpenAI-compatible provider. Stored encrypted, never included in results.

## `aiBaseUrl` (type: `string`):

🌐 Only needed if your key is NOT from OpenAI. Examples: `https://openrouter.ai/api/v1`, `https://api.groq.com/openai/v1`, `https://api.together.xyz/v1`, `https://api.deepseek.com/v1`. Leave empty for OpenAI.

## `aiModel` (type: `string`):

🧠 Model id on your provider. Default: `gpt-4o-mini` (~$0.001 per scan on OpenAI). Examples: `openrouter/auto`, `llama-3.3-70b-versatile` (Groq). Leave empty for the default.

## `monitor` (type: `boolean`):

🔔 When ON, a run with changes vs the previous scan also pushes a compact `status=MONITOR_ALERT` item — ideal for webhooks. Rank history charts build on every scan regardless of this setting.

## `alertSolvDropPct` (type: `number`):

📉 Trigger a monitoring alert when SoLV (Local Pack presence) changes by at least this many percentage points between scans. Drops and gains both alert. Default 5.

## `agencyName` (type: `string`):

🏷️ Your agency or brand name. Replaces the default branding in the report header and footer, so the report looks like it came from you.

## `agencyLogo` (type: `string`):

🖼️ Public URL of your logo (PNG/JPG/SVG, ~120×40px looks best). Shown in the report navigation bar next to your agency name.

## Actor input object example

```json
{
  "businessName": "Joe's Pizza",
  "keyword": "best pizza near me",
  "location": "Brooklyn, NY",
  "gridSize": "5x5",
  "radius": 5,
  "measurement": "km",
  "language": "en",
  "country": "us",
  "maxCompetitorsPerPoint": 5,
  "fetchReviews": true,
  "enableAiPlan": true,
  "monitor": false,
  "alertSolvDropPct": 5
}
```

# Actor output Schema

## `scanResults` (type: `string`):

Full scan data with rankings, SoLV, ARP, competitor leaderboard, gap analysis, zone breakdown, and trend comparison.

## `htmlDashboard` (type: `string`):

Self-contained HTML report with Leaflet.js map, color-coded grid, score cards, and competitor analysis. Opens in any browser.

## `csvExport` (type: `string`):

Flat CSV-compatible rows for spreadsheet import with one row per grid point.

# 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 = {
    "businessName": "Joe's Pizza",
    "keyword": "best pizza near me",
    "location": "Brooklyn, NY",
    "gridSize": "5x5",
    "radius": 5
};

// Run the Actor and wait for it to finish
const run = await client.actor("vasram/google-maps-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 = {
    "businessName": "Joe's Pizza",
    "keyword": "best pizza near me",
    "location": "Brooklyn, NY",
    "gridSize": "5x5",
    "radius": 5,
}

# Run the Actor and wait for it to finish
run = client.actor("vasram/google-maps-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 '{
  "businessName": "Joe'\''s Pizza",
  "keyword": "best pizza near me",
  "location": "Brooklyn, NY",
  "gridSize": "5x5",
  "radius": 5
}' |
apify call vasram/google-maps-rank-tracker --silent --output-dataset

```

## MCP server setup

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