# Google Maps Reviews Scraper (`yugenox/google-maps-reviews`) Actor

Paste a Google Maps place link, get all its reviews — reviewer, star rating, date, full text, and owner responses.

- **URL**: https://apify.com/yugenox/google-maps-reviews.md
- **Developed by:** [Yugenox Corp](https://apify.com/yugenox) (community)
- **Categories:** Lead generation, SEO tools, Social media
- **Stats:** 2 total users, 0 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.03 / 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/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 Reviews Scraper

Paste a Google Maps place link and get back that place's reviews — every reviewer, star rating, date, full review text, and even the business's replies. Point it at one place or many, cap the count or pull **all** of them.

There's nothing to set up or configure — just give it a place URL and it returns the reviews, whether you want the latest handful or the entire history.

> ⚡ **You only need one thing: the place's Google Maps URL** — the full link from your browser's address bar that starts with `https://www.google.com/maps/place/…`. **Not sure how to get it?** See **[How to get a Google Maps place URL](#how-to-get-a-google-maps-place-url)** right below. 👇

**Who it's for:**

- 📊 **Reputation monitoring** — track what customers are saying about your locations over time
- 💬 **Sentiment analysis** — feed real review text into your NLP / AI pipeline
- 🔍 **Competitor review mining** — see exactly why customers love (or leave) a rival
- 🎯 **Lead research** — qualify businesses by rating volume, recency, and response behavior

***

### How to get a Google Maps place URL

This is the #1 question, so here's the exact, foolproof way. The actor needs the **full place URL** (the one that starts with `https://www.google.com/maps/place/...`).

#### 💻 Desktop (recommended — gives the exact URL the actor needs)

1. Go to **[google.com/maps](https://www.google.com/maps)**.
2. **Search** for the business or place, then **click its pin on the map** — or click its **name** in the results list.
3. When the place's panel opens on the left, look at your browser's **address bar**. The URL now starts with:
   `https://www.google.com/maps/place/<Name>/@<lat>,<lng>,17z/data=...`
4. **Select the whole address-bar URL and copy it.** Paste that into the actor's **"📍 Google Maps place link(s)"** field.

> ⚠️ **Important:** The blue **"Share"** button's **"Copy link"** gives a **shortened** link (like `https://maps.app.goo.gl/...`). **Prefer the full address-bar URL** (`https://www.google.com/maps/place/...`) — that's the format the actor expects.

#### 📱 Mobile

1. Open the place in the Google Maps app.
2. Tap **Share → Copy link**.
3. Then **open that link in a desktop browser** and copy the **expanded** address-bar URL — the one that contains `/maps/place/`. Paste *that* into the actor.

#### ✅ Example of a good URL

```
https://www.google.com/maps/place/Flos+Music+%26+Bar/@28.7067705,77.1839605,17z/data=!4m6!3m5!1s0x390d03c87620376d:0x7ec0084cad8ed5df!8m2!3d28.7067705!4d77.1839605!16s%2Fg%2F11vq3fmm9d
```

***

### What you get

One dataset item **per review**, with:

- 🏷️ **placeName** — the business / place name
- 🔗 **placeUrl** — the place URL you supplied
- 🆔 **fid** — Google's stable place feature ID
- 👤 **reviewer** — the reviewer's name
- ⭐ **rating** — star rating, 1–5 (every review has one)
- 📅 **date** — when it was posted, relative (e.g. `"3 months ago"`) — present on every review
- 📝 **text** — the written review body (present when the reviewer wrote text; some reviews are rating-only)
- 🧭 **reviewerInfo** — the reviewer's badge / activity, e.g. `"Local Guide · 58 reviews"`
- 🔗 **reviewerUrl** — link to the reviewer's Google profile
- 🆔 **reviewId** — Google's unique ID for the review
- 👍 **likes** — how many people found the review helpful
- 💬 **ownerResponse** — the business's reply to the review, if there is one
- ⏱️ **scrapedAt** — timestamp of the run

***

### Input

| Field | Key | Type | Default | Description |
|---|---|---|---|---|
| 📍 Google Maps place link(s) | `startUrls` | array of URLs | — (**required**) | One or more Google Maps place URLs (`https://www.google.com/maps/place/...`). Add as many places as you like. |
| ⭐ Max reviews per place | `maxReviews` | integer | `0` | How many reviews to pull per place. **`0` = ALL reviews** (complete, but slower on very large places). Set a number to cap and finish fast — the run stops the instant it hits your target. |
| Proxy | `proxyConfiguration` | proxy | Apify Residential | **Residential proxy strongly recommended** — clean IPs give the most reliable access to Google. |

#### Example input

```json
{
  "startUrls": [
    { "url": "https://www.google.com/maps/place/Flos+Music+%26+Bar/@28.7067705,77.1839605,17z/data=!4m6!3m5!1s0x390d03c87620376d:0x7ec0084cad8ed5df!8m2!3d28.7067705!4d77.1839605!16s%2Fg%2F11vq3fmm9d" }
  ],
  "maxReviews": 200,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": ["RESIDENTIAL"]
  }
}
```

***

### Output

Each item in the dataset is a single review. Here's a realistic example:

```json
{
  "placeName": "Flos Music & Bar",
  "placeUrl": "https://www.google.com/maps/place/Flos+Music+%26+Bar/@28.7067705,77.1839605,17z/data=...",
  "fid": "0x390d03c87620376d:0x7ec0084cad8ed5df",
  "reviewer": "Priya Sharma",
  "rating": 5,
  "date": "3 months ago",
  "text": "Amazing vibe and live music every weekend. The cocktails were excellent and the staff went out of their way to get us a good table. Will definitely come back.",
  "reviewerInfo": "Local Guide · 58 reviews",
  "reviewerUrl": "https://www.google.com/maps/contrib/103482759812345678901/reviews",
  "reviewId": "ChdDSUhNMG9nS0VJQ0FnSUNfeXZ1cnJnRRAB",
  "likes": 4,
  "ownerResponse": "Thank you so much for the kind words, Priya! We can't wait to host you again. 🎶",
  "scrapedAt": "2026-07-08T15:42:11.302Z"
}
```

#### Output fields

| Field | Type | Description |
|---|---|---|
| `placeName` | string | The business / place name. |
| `placeUrl` | string | The place URL you supplied. |
| `fid` | string | Google's stable place feature ID (identifies the place across links). |
| `reviewer` | string | The reviewer's display name. |
| `rating` | number | Star rating, 1–5. Present on every review. |
| `date` | string | Relative post date, e.g. `"3 months ago"`. Present on every review. |
| `text` | string | null | The written review body. Present when the reviewer wrote text; `null` for rating-only reviews. |
| `reviewerInfo` | string | null | Reviewer badge / activity, e.g. `"Local Guide · 58 reviews"`. |
| `reviewerUrl` | string | null | Link to the reviewer's Google profile. |
| `reviewId` | string | null | Google's unique ID for the review. |
| `likes` | number | How many people marked the review helpful (`0` if none). |
| `ownerResponse` | string | null | The business's reply to the review, if there is one. |
| `scrapedAt` | string | ISO timestamp of when the run scraped this review. |

***

### Speed & completeness

The actor returns the **complete review list** for a place — not just the handful shown by default.

- **Set `maxReviews` to a number** and the run finishes fast: it stops the instant it reaches your target. Great when you only need, say, the latest 100 or 500.
- **Leave `maxReviews` at `0` (all)** and it returns every review. This is complete, but on places with **thousands** of reviews it can take **several minutes** to work through the full list — that's expected for very large places.

**Rule of thumb:** if you need everything, use `0` and let it run. If you need speed, set a cap.

***

### FAQ

**Does it get ALL reviews?**
Yes. Set `maxReviews` to `0` (the default) and it loads the place's entire review list. Set a number to cap it instead.

**How long does a big place take?**
Small and mid-size places finish quickly. A place with thousands of reviews pulled with `maxReviews: 0` can take several minutes to work through the full list. Capping `maxReviews` keeps runs fast.

**Can I scrape multiple places at once?**
Yes — add multiple URLs to `startUrls` and the actor processes each place and outputs reviews for all of them into the same dataset (each review carries its own `placeName` / `placeUrl` / `fid`).

**Do I need a proxy?**
Yes — a **residential** proxy is strongly recommended. Clean IPs give the most reliable access to Google, and residential IPs work best. Apify Residential proxy is preselected by default.

**What export formats are available?**
All of Apify's standard exports — **JSON, CSV, and Excel** (plus HTML, XML, RSS) — from the run's dataset via the Apify Console or API.

**What if a review has no text?**
You still get it. Every review includes a `rating` and `date`; `text` is filled in only when the reviewer actually wrote something (rating-only reviews come back with `text: null`).

**Is it legal to scrape Google Maps reviews?**
This Actor only collects publicly available data: reviews that anyone can read on a Google Maps place page without signing in. Collecting publicly available data is generally legal, but you're responsible for how you use it. Results can include reviewers' public display names and profile links, and that counts as personal data. You must follow privacy laws such as GDPR, PIPEDA and CCPA, as well as Google's terms. If you're unsure, check with a lawyer. More on this: [Is web scraping legal?](https://blog.apify.com/is-web-scraping-legal/)

**Does it access any private data?**
No. Everything comes from pages Google Maps shows to any visitor without logging in. It never uses a login, never touches private or restricted accounts, and never reaches password-protected areas.

# Actor input Schema

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

Paste the FULL Google Maps place link — the one from your browser's ADDRESS BAR that starts with https://www.google.com/maps/place/…

How to get it: open google.com/maps → search the place → click its pin/name → copy the whole URL from the address bar.

⚠️ The blue 'Share → Copy link' button gives a SHORT link (maps.app.goo.gl/…) — use the full address-bar URL instead.

Example: https://www.google.com/maps/place/Flos+Music+%26+Bar/@28.7067705,77.1839605,17z/data=!4m6!3m5!1s0x390d03c87620376d:0x7ec0084cad8ed5df!8m2!3d28.7067705!4d77.1839605!16s%2Fg%2F11vq3fmm9d

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

How many reviews per place. 0 = ALL (complete, but slower on very large places). Set a number to cap and finish fast — it stops the instant it hits your target.

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

Residential proxy strongly recommended — clean IPs give the most reliable access to Google.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.google.com/maps/place/Flos+Music+%26+Bar/@28.7067705,77.1839605,17z/data=!4m6!3m5!1s0x390d03c87620376d:0x7ec0084cad8ed5df!8m2!3d28.7067705!4d77.1839605!16s%2Fg%2F11vq3fmm9d"
    }
  ],
  "maxReviews": 0,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# 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/Flos+Music+%26+Bar/@28.7067705,77.1839605,17z/data=!4m6!3m5!1s0x390d03c87620376d:0x7ec0084cad8ed5df!8m2!3d28.7067705!4d77.1839605!16s%2Fg%2F11vq3fmm9d"
        }
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("yugenox/google-maps-reviews").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/Flos+Music+%26+Bar/@28.7067705,77.1839605,17z/data=!4m6!3m5!1s0x390d03c87620376d:0x7ec0084cad8ed5df!8m2!3d28.7067705!4d77.1839605!16s%2Fg%2F11vq3fmm9d" }] }

# Run the Actor and wait for it to finish
run = client.actor("yugenox/google-maps-reviews").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 '{
  "startUrls": [
    {
      "url": "https://www.google.com/maps/place/Flos+Music+%26+Bar/@28.7067705,77.1839605,17z/data=!4m6!3m5!1s0x390d03c87620376d:0x7ec0084cad8ed5df!8m2!3d28.7067705!4d77.1839605!16s%2Fg%2F11vq3fmm9d"
    }
  ]
}' |
apify call yugenox/google-maps-reviews --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,yugenox/google-maps-reviews"
        }
    }
}
```

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/XO3nRfS5WBYs1kd6m/builds/whNsECypc01yv5IIu/openapi.json
