# Google Maps Reviews Scraper ⚡ Fast & Low-Cost (`analytics_tupiniquim/google-maps-reviews-scraper`) Actor

Fast, low-cost Google Maps reviews scraper. Extract review text, rating, date, author, images and owner replies from any place URL. HTTP-only, no browser.

- **URL**: https://apify.com/analytics\_tupiniquim/google-maps-reviews-scraper.md
- **Developed by:** [Guilherme Teixeira](https://apify.com/analytics_tupiniquim) (community)
- **Categories:** E-commerce, Travel, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.10 / 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 web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — 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

## Google Maps Reviews Scraper 🗺️⭐

Extract **all reviews** from any Google Maps place — fast, cheap, and without a browser.
Get review text, star rating, date, author details, photos and owner replies from any place URL.

> 🇬🇧 English · [🇧🇷 Português](#-português-brasil) · [🇪🇸 Español](#-español)

***

### Why this scraper?

- 💸 **Up to 75% cheaper** than the alternatives — pay only **$0.10 per 1,000 reviews**, all-inclusive, no hidden add-ons.
- ⚡ **HTTP-only, no browser** — runs in seconds and uses minimal compute.
- 🔌 **Configurable proxy** — datacenter by default (cheapest), residential if you need it.
- 🌎 **Trilingual docs** — English, Portuguese, Spanish.
- 🧹 **Automatic de-duplication** of reviews by review id.
- 🔐 **GDPR toggle** — turn reviewer personal data off with one switch.

### Input

| Field | Type | Description |
|---|---|---|
| `startUrls` | array | Google Maps place URLs (must contain the place feature id — normal place URLs do). |
| `placeIds` | array | Alternative: raw feature ids in the form `0x...:0x...`. |
| `maxReviews` | integer | Max reviews to scrape in total. Default `100`. |
| `reviewsSort` | select | `newest`, `mostRelevant`, `highestRanking`, `lowestRanking`. |
| `reviewsStartDate` | string | Absolute (`2025-01-01`) or relative (`3 months`, `8 days`). Only newer reviews are kept. |
| `language` | select | Result language (English, Português, Español, …). |
| `personalData` | boolean | Include reviewer name/id/URL/photo. Disable for GDPR. Default `true`. |
| `proxyConfiguration` | object | Proxy settings. Datacenter by default. |

#### Example input

```json
{
    "startUrls": [
        { "url": "https://www.google.com/maps/place/Joe's+Pizza+Broadway/data=!4m7!3m6!1s0x89c259ab3c1ef289:0x3b67a41175949f55!8m2!3d40.7546795!4d-73.9870291" }
    ],
    "maxReviews": 200,
    "reviewsSort": "newest",
    "language": "en",
    "personalData": true,
    "proxyConfiguration": { "useApifyProxy": true }
}
```

### Output

Each review is one dataset item, carrying both the review data and the place it belongs to:

```json
{
    "searchString": "https://www.google.com/maps/place/Eiffel+Tower/@48.85837,2.29448,17z/data=!4m2!3m1!1s0x47e66e2964e34e2d:0x8ddca9ee380ef7e0",
    "title": "Eiffel Tower",
    "placeId": "ChIJLU7jZClu5kcR4Pcew-6pyo0",
    "fid": "0x47e66e2964e34e2d:0x8ddca9ee380ef7e0",
    "cid": "10222232094831998944",
    "location": { "lat": 48.8583701, "lng": 2.2944813 },
    "categoryName": null,
    "categories": [],
    "address": null,
    "city": null,
    "countryCode": null,
    "totalScore": null,
    "reviewsCount": null,
    "imageUrl": null,
    "reviewId": "Ci9DQUlRQUNvZENodHlj...",
    "reviewUrl": "https://www.google.com/maps/reviews/data=...",
    "name": "Michael Aframian",
    "reviewerId": "109765276527927207672",
    "reviewerUrl": "https://www.google.com/maps/contrib/109765276527927207672/reviews",
    "reviewerPhotoUrl": "https://lh3.googleusercontent.com/a-/...",
    "reviewerNumberOfReviews": 137,
    "isLocalGuide": true,
    "stars": 5,
    "text": "Amazing views over Paris...",
    "textTranslated": null,
    "originalLanguage": "en",
    "translatedLanguage": null,
    "language": "en",
    "publishedAtDate": "2026-07-27T22:28:33.061Z",
    "publishAt": "an hour ago",
    "likesCount": 3,
    "reviewImageUrls": ["https://lh3.googleusercontent.com/..."],
    "reviewContext": { "When did you visit?": "Weekend", "How long did you wait to enter?": "Up to 10 min" },
    "reviewDetailedRating": {},
    "visitedIn": "Jul 2026",
    "responseFromOwnerText": null,
    "responseFromOwnerDate": null,
    "isAdvertisement": false,
    "reviewOrigin": "Google",
    "scrapedAt": "2026-07-28T00:37:29.404Z"
}
```

> ℹ️ **Place metadata:** `title`, `location`, `fid`, `cid` and `placeId` are read straight from your input URL. The deeper place fields (`categoryName`, `categories`, `address`, `totalScore`, `reviewsCount`, `imageUrl`…) are part of the schema but come back `null` here — for full place details use our companion **Google Maps Scraper**, which is built for place data. This actor focuses on returning **every review field** (context, likes, visit date, translations and owner responses included).

### 💰 Cost example

Pricing is **pay-per-event**: a tiny actor-start fee plus a per-review fee.

| Event | Price |
|---|---|
| Actor start | $0.001 per run |
| Review scraped | $0.0001 per review ($0.10 / 1,000) |

**Scraping 1,000 reviews from one place** → `1 × $0.001` (start) `+ 1,000 × $0.0001` (reviews) = **≈ $0.101 total**.

### How to get a place URL

Open [Google Maps](https://www.google.com/maps), search for a place, click it, and copy the URL from your browser's address bar. It contains the feature id the scraper needs.

### FAQ

**Does it need login or cookies?** No. It reads Google's public review data over plain HTTP.

**Which reviews does it return?** Google-native reviews for the place, newest first by default.

**Is it GDPR-safe?** Set `personalData` to `false` to omit reviewer name, id, profile URL and photo. The review id is always kept.

***

### 🇧🇷 Português (Brasil)

Extraia **todas as avaliações** de qualquer lugar no Google Maps — rápido, barato e sem navegador.
Obtenha texto da avaliação, nota, data, dados do autor, fotos e respostas do proprietário a partir de qualquer URL de lugar.

#### Por que este scraper?

- 💸 **Até 75% mais barato** que as alternativas — pague apenas **$0,10 por 1.000 avaliações**, tudo incluso, sem taxas escondidas.
- ⚡ **Só HTTP, sem navegador** — roda em segundos e usa pouquíssimo processamento.
- 🔌 **Proxy configurável** — datacenter por padrão (mais barato), residencial se precisar.
- 🌎 **Documentação trilíngue** — inglês, português e espanhol.
- 🧹 **Deduplicação automática** de avaliações pelo id.
- 🔐 **Interruptor GDPR** — desative os dados pessoais do autor com um clique.

#### Entrada

| Campo | Tipo | Descrição |
|---|---|---|
| `startUrls` | array | URLs de lugares do Google Maps (devem conter o feature id — URLs normais de lugar contêm). |
| `placeIds` | array | Alternativa: feature ids no formato `0x...:0x...`. |
| `maxReviews` | integer | Máximo de avaliações no total. Padrão `100`. |
| `reviewsSort` | select | `newest`, `mostRelevant`, `highestRanking`, `lowestRanking`. |
| `reviewsStartDate` | string | Absoluta (`2025-01-01`) ou relativa (`3 months`, `8 days`). Só mantém avaliações mais novas. |
| `language` | select | Idioma dos resultados. |
| `personalData` | boolean | Incluir nome/id/URL/foto do autor. Desative para GDPR. Padrão `true`. |
| `proxyConfiguration` | object | Configuração de proxy. Datacenter por padrão. |

#### 💰 Exemplo de custo

Modelo **pay-per-event**: uma pequena taxa de início mais uma taxa por avaliação.

| Evento | Preço |
|---|---|
| Início do actor | $0,001 por execução |
| Avaliação coletada | $0,0001 por avaliação ($0,10 / 1.000) |

**Coletar 1.000 avaliações de um lugar** → `1 × $0,001` + `1.000 × $0,0001` = **≈ $0,101 no total**.

#### Como obter a URL de um lugar

Abra o [Google Maps](https://www.google.com/maps), busque um lugar, clique nele e copie a URL da barra de endereços. Ela contém o feature id que o scraper precisa.

***

### 🇪🇸 Español

Extrae **todas las reseñas** de cualquier lugar en Google Maps — rápido, económico y sin navegador.
Obtén el texto de la reseña, la calificación, la fecha, los datos del autor, fotos y respuestas del propietario desde cualquier URL de lugar.

#### ¿Por qué este scraper?

- 💸 **Hasta 75% más barato** que las alternativas — paga solo **$0,10 por cada 1.000 reseñas**, todo incluido, sin cargos ocultos.
- ⚡ **Solo HTTP, sin navegador** — se ejecuta en segundos y usa muy pocos recursos.
- 🔌 **Proxy configurable** — datacenter por defecto (el más económico), residencial si lo necesitas.
- 🌎 **Documentación trilingüe** — inglés, portugués y español.
- 🧹 **Deduplicación automática** de reseñas por id.
- 🔐 **Interruptor GDPR** — desactiva los datos personales del autor con un clic.

#### Entrada

| Campo | Tipo | Descripción |
|---|---|---|
| `startUrls` | array | URLs de lugares de Google Maps (deben contener el feature id — las URLs normales de lugar lo tienen). |
| `placeIds` | array | Alternativa: feature ids en formato `0x...:0x...`. |
| `maxReviews` | integer | Máximo de reseñas en total. Predeterminado `100`. |
| `reviewsSort` | select | `newest`, `mostRelevant`, `highestRanking`, `lowestRanking`. |
| `reviewsStartDate` | string | Absoluta (`2025-01-01`) o relativa (`3 months`, `8 days`). Solo se conservan las más nuevas. |
| `language` | select | Idioma de los resultados. |
| `personalData` | boolean | Incluir nombre/id/URL/foto del autor. Desactiva para GDPR. Predeterminado `true`. |
| `proxyConfiguration` | object | Configuración de proxy. Datacenter por defecto. |

#### 💰 Ejemplo de costo

Modelo **pay-per-event**: una pequeña tarifa de inicio más una tarifa por reseña.

| Evento | Precio |
|---|---|
| Inicio del actor | $0,001 por ejecución |
| Reseña extraída | $0,0001 por reseña ($0,10 / 1.000) |

**Extraer 1.000 reseñas de un lugar** → `1 × $0,001` + `1.000 × $0,0001` = **≈ $0,101 en total**.

#### Cómo obtener la URL de un lugar

Abre [Google Maps](https://www.google.com/maps), busca un lugar, haz clic en él y copia la URL de la barra de direcciones. Contiene el feature id que el scraper necesita.

# Actor input Schema

## `startUrls` (type: `array`):

List of Google Maps place URLs to scrape reviews from. Open a place on Google Maps and copy the URL from your browser — it must contain the place feature id (the /maps/place/... URL does).

## `placeIds` (type: `array`):

Alternative to URLs: raw Google Maps feature ids in the form 0x...:0x... (found in a place URL after !1s). Add them one per line.

## `maxReviews` (type: `integer`):

Maximum number of reviews to scrape in total (across all places). Keep this sensible to control cost.

## `reviewsSort` (type: `string`):

Order in which reviews are collected.

## `reviewsStartDate` (type: `string`):

Absolute date (e.g. 2025-01-01) or relative (e.g. "3 months", "8 days"). When set, sorting is forced to Newest and scraping stops at the first older review.

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

Language for review details and translated text.

## `personalData` (type: `boolean`):

When enabled, includes the reviewer's name, id, profile URL and photo, plus the review URL. Disable to comply with GDPR when you have no legitimate reason to collect personal data. The review id is always included.

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

Proxy settings. Datacenter (the default) is cheapest and works well for this target; switch to residential only if you hit blocks.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.google.com/maps/place/Joe's+Pizza+Broadway/data=!4m7!3m6!1s0x89c259ab3c1ef289:0x3b67a41175949f55!8m2!3d40.7546795!4d-73.9870291!16s%2Fg%2F11bw4ws2mt!19sChIJifIePKtZwokRVZ-UdRGkZzs"
    }
  ],
  "placeIds": [
    "0x89c259ab3c1ef289:0x3b67a41175949f55"
  ],
  "maxReviews": 100,
  "reviewsSort": "newest",
  "reviewsStartDate": "2025-01-01",
  "language": "en",
  "personalData": true,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `reviews` (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 = {
    "startUrls": [
        {
            "url": "https://www.google.com/maps/place/Joe's+Pizza+Broadway/data=!4m7!3m6!1s0x89c259ab3c1ef289:0x3b67a41175949f55!8m2!3d40.7546795!4d-73.9870291!16s%2Fg%2F11bw4ws2mt!19sChIJifIePKtZwokRVZ-UdRGkZzs"
        }
    ],
    "maxReviews": 100,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("analytics_tupiniquim/google-maps-reviews-scraper").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 = {
    "startUrls": [{ "url": "https://www.google.com/maps/place/Joe's+Pizza+Broadway/data=!4m7!3m6!1s0x89c259ab3c1ef289:0x3b67a41175949f55!8m2!3d40.7546795!4d-73.9870291!16s%2Fg%2F11bw4ws2mt!19sChIJifIePKtZwokRVZ-UdRGkZzs" }],
    "maxReviews": 100,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("analytics_tupiniquim/google-maps-reviews-scraper").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 '{
  "startUrls": [
    {
      "url": "https://www.google.com/maps/place/Joe'\''s+Pizza+Broadway/data=!4m7!3m6!1s0x89c259ab3c1ef289:0x3b67a41175949f55!8m2!3d40.7546795!4d-73.9870291!16s%2Fg%2F11bw4ws2mt!19sChIJifIePKtZwokRVZ-UdRGkZzs"
    }
  ],
  "maxReviews": 100,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call analytics_tupiniquim/google-maps-reviews-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/LypN3iCuhh7uFvSYs/builds/yUDw6V63T1XrJeGCI/openapi.json
