# Google Maps Review Tracker & Extractor (`scraperpro/google-review-tracker`) Actor

scraper to track deleted Google Maps reviews, monitor fake review purges, and extract rich reviewer metadata stars, text, replies, etc

- **URL**: https://apify.com/scraperpro/google-review-tracker.md
- **Developed by:** [ScraperPro](https://apify.com/scraperpro) (community)
- **Categories:** E-commerce, Lead generation, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.50 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## 🚀 Fast Google Review Tracker & Extractor

The most efficient, resilient, and cost-effective way to track Google Maps reviews. Verify if reviews are still active, detect fake review purges, and extract rich metadata—at lightning speed.

**Powered by 100% HTTP requests.** No bulky headless browsers. No slow startups. Just blazing-fast results at a fraction of the compute cost.

---

### 🎯 Why this Actor?

Checking the status of hundreds or thousands of Google Reviews can be painful. Google actively blocks scrapers, and running headless browsers (like Puppeteer or Playwright) for this simple task is unnecessarily expensive and slow.

This Actor solves this by using **advanced HTTP fingerprinting** to blend in perfectly with real user traffic. It bypasses the need for slow browsers entirely.

#### ✨ Key Benefits:
- **⚡ 10x Faster:** Bypasses browser startup and rendering overhead.
- **💰 10x Cheaper:** Extremely low memory and CPU usage = minimal Apify Compute Units (CUs).
- **🛡️ Anti-Scraping Built-in:** Automatically handles 403s, rate limits, and CAPTCHAs by intelligently rotating proxies.
- **💾 Smart Auto-Save:** Apify server restarts? No problem. The Actor remembers exactly which URLs it already processed and resumes instantly without duplicating work (or billing).
- **🔍 Deep Extraction:** Retrieves the full review text, star rating, business name, and reviewer details instantly and reliably.

---

### 🔗 Supported URL Formats

We support the two most common types of Google Maps review URLs:

1. **Review Data URLs** (`/maps/reviews/data=...`)
   *The direct link to a specific review on a business profile.*
2. **Contrib Profile URLs** (`/maps/contrib/.../place/...`)
   *The link to a review from a specific user's public contribution timeline.*

Just paste your URLs into the input, and the Actor handles the rest!

---

### 💼 High-Value Use Cases

1. **Reputation Management:** Automatically track false-positive deletions of legitimate 5-star reviews so you can appeal them immediately.
2. **Competitor Analysis:** Track if competitors are losing reviews due to fake review purges.
3. **Agency Reporting:** Provide accurate, verified reporting to clients on exactly which reviews are currently live on their Google Business Profile.

---

### 📊 Extracted Data (Output)

For every URL provided, the Actor returns a rich JSON object indicating its exact status and metadata. 

| Field | Description |
|---|---|
| `is_active` | **Boolean**. `true` if the review is live, `false` if it was removed/hidden. |
| `reviewer_name` | The public name of the person who left the review. |
| `review_stars` | The rating given (1 to 5). |
| `review_text` | The full text of the review (translated to English if applicable). |
| `review_text_original` | The original text of the review (if translated). |
| `review_date` | The relative date the review was posted (e.g. "3 months ago"). |
| `business_name` | The name of the Google Business Profile the review was left on. |
| `owner_reply` | The text of the response from the business owner (if any). |

#### Example JSON Output:

```json
{
  "url": "https://www.google.com/maps/contrib/114972551601633519894/place/...",
  "reviewer_name": "John Doe",
  "is_active": true,
  "text_snippet": "This place has amazing coffee and great service!",
  "timestamp": "2024-05-15T14:32:01.123Z",
  "review_text": "This place has amazing coffee and great service!",
  "review_text_original": null,
  "review_date": "3 months ago",
  "review_stars": 5,
  "review_language": "en",
  "business_name": "Awesome Cafe",
  "business_address": "123 Main St, City, ST 12345, United States",
  "owner_reply": "Thank you for the kind words!",
  "owner_reply_date": "3 months ago",
  "error": null
}
````

*(Note: The full raw API payload is also returned in `api_payload` for advanced use cases).*

***

### 📈 Performance & Cost Expectations

Because this Actor uses pure HTTP requests:

- **Speed:** Can process ~50-100 reviews per minute (depending on proxy speed and concurrency).
- **Cost:** Costs fractions of a cent per run. A standard $5/month Apify plan can run tens of thousands of checks.

***

### 👨‍💻 Support & Maintenance

This Actor is actively maintained by an expert scraping team. If Google updates their API structures or DOM, we patch the Actor within 24-48 hours. If you encounter any bugs or need feature requests, please use the **Issues** tab.

***

#### 🔍 Search Keywords

*Google Maps Review Scraper, Google Review Tracker, Monitor Google Reviews, Check Removed Google Reviews, Google Business Profile Scraper, Reputation Management Tool, Google Maps Contributor Scraper, Review Status Checker, Fake Review Detection, Local SEO Tracking, Extract Google Reviews*

# Actor input Schema

## `reviewsToCheck` (type: `array`):

Paste your Google Maps review URLs here. We support both direct Review URLs (`/maps/reviews/data=...`) and Contrib Profile URLs (`/maps/contrib/...`).

## `proxyConfiguration` (type: `object`):

Select the proxies to use. Google actively blocks datacenter IPs, so **Apify Residential Proxies** are highly recommended for this Actor.

## `maxConcurrency` (type: `integer`):

How many reviews to check at the exact same time. Higher values are faster but require more stable proxies. (Default: 3)

## `maxProxyRetries` (type: `integer`):

How many times to automatically swap your proxy IP if Google temporarily blocks the request. Set to 5 or higher for maximum reliability.

## Actor input object example

```json
{
  "reviewsToCheck": [
    "https://www.google.com/maps/contrib/114972551601633519894/place/ChIJa5s6R5u3QjQRvF2bS-Vlq58/@39.6953258,-101.4082729,6z/data=!4m6!1m5!8m4!1e1!2s114972551601633519894!3m1!1e1?hl=en-US",
    "https://www.google.com/maps/reviews/data=!4m8!14m7!1m6!2m5!1sCi9DQUlRQUNvZENodHljRjlvT2xKT1JXRkdkbXhFTjNWbWVESTFWbEZYUlhvdFJYYxAB!2m1!1s0x0:0x57656ffbe42744ba!3m1!1s2@1:CAIQACodChtycF9oOlJORWFGdmxEN3VmeDI1VlFXRXotRXc%7C%7C?hl=en-US"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true
  },
  "maxConcurrency": 3,
  "maxProxyRetries": 5
}
```

# Actor output Schema

## `results` (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 = {
    "reviewsToCheck": [
        "https://www.google.com/maps/contrib/114972551601633519894/place/ChIJa5s6R5u3QjQRvF2bS-Vlq58/@39.6953258,-101.4082729,6z/data=!4m6!1m5!8m4!1e1!2s114972551601633519894!3m1!1e1?hl=en-US",
        "https://www.google.com/maps/reviews/data=!4m8!14m7!1m6!2m5!1sCi9DQUlRQUNvZENodHljRjlvT2xKT1JXRkdkbXhFTjNWbWVESTFWbEZYUlhvdFJYYxAB!2m1!1s0x0:0x57656ffbe42744ba!3m1!1s2@1:CAIQACodChtycF9oOlJORWFGdmxEN3VmeDI1VlFXRXotRXc%7C%7C?hl=en-US"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("scraperpro/google-review-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 = {
    "reviewsToCheck": [
        "https://www.google.com/maps/contrib/114972551601633519894/place/ChIJa5s6R5u3QjQRvF2bS-Vlq58/@39.6953258,-101.4082729,6z/data=!4m6!1m5!8m4!1e1!2s114972551601633519894!3m1!1e1?hl=en-US",
        "https://www.google.com/maps/reviews/data=!4m8!14m7!1m6!2m5!1sCi9DQUlRQUNvZENodHljRjlvT2xKT1JXRkdkbXhFTjNWbWVESTFWbEZYUlhvdFJYYxAB!2m1!1s0x0:0x57656ffbe42744ba!3m1!1s2@1:CAIQACodChtycF9oOlJORWFGdmxEN3VmeDI1VlFXRXotRXc%7C%7C?hl=en-US",
    ],
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("scraperpro/google-review-tracker").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{
  "reviewsToCheck": [
    "https://www.google.com/maps/contrib/114972551601633519894/place/ChIJa5s6R5u3QjQRvF2bS-Vlq58/@39.6953258,-101.4082729,6z/data=!4m6!1m5!8m4!1e1!2s114972551601633519894!3m1!1e1?hl=en-US",
    "https://www.google.com/maps/reviews/data=!4m8!14m7!1m6!2m5!1sCi9DQUlRQUNvZENodHljRjlvT2xKT1JXRkdkbXhFTjNWbWVESTFWbEZYUlhvdFJYYxAB!2m1!1s0x0:0x57656ffbe42744ba!3m1!1s2@1:CAIQACodChtycF9oOlJORWFGdmxEN3VmeDI1VlFXRXotRXc%7C%7C?hl=en-US"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call scraperpro/google-review-tracker --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=scraperpro/google-review-tracker",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Google Maps Review Tracker & Extractor",
        "description": "scraper to track deleted Google Maps reviews, monitor fake review purges, and extract rich reviewer metadata stars, text, replies, etc",
        "version": "0.0",
        "x-build-id": "STmcuf92rrU18oG7o"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/scraperpro~google-review-tracker/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-scraperpro-google-review-tracker",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/scraperpro~google-review-tracker/runs": {
            "post": {
                "operationId": "runs-sync-scraperpro-google-review-tracker",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/scraperpro~google-review-tracker/run-sync": {
            "post": {
                "operationId": "run-sync-scraperpro-google-review-tracker",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "reviewsToCheck"
                ],
                "properties": {
                    "reviewsToCheck": {
                        "title": "Google Review URLs",
                        "type": "array",
                        "description": "Paste your Google Maps review URLs here. We support both direct Review URLs (`/maps/reviews/data=...`) and Contrib Profile URLs (`/maps/contrib/...`).",
                        "items": {
                            "type": "string"
                        }
                    },
                    "proxyConfiguration": {
                        "title": "Proxy Configuration",
                        "type": "object",
                        "description": "Select the proxies to use. Google actively blocks datacenter IPs, so **Apify Residential Proxies** are highly recommended for this Actor.",
                        "default": {
                            "useApifyProxy": true
                        }
                    },
                    "maxConcurrency": {
                        "title": "Max Concurrency",
                        "minimum": 1,
                        "maximum": 10,
                        "type": "integer",
                        "description": "How many reviews to check at the exact same time. Higher values are faster but require more stable proxies. (Default: 3)",
                        "default": 3
                    },
                    "maxProxyRetries": {
                        "title": "Max Anti-Bot Retries",
                        "minimum": 0,
                        "maximum": 20,
                        "type": "integer",
                        "description": "How many times to automatically swap your proxy IP if Google temporarily blocks the request. Set to 5 or higher for maximum reliability.",
                        "default": 5
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
