# Google Map Review Scraper (`insights_data/google-map-review-scraper`) Actor

Reading Google Maps reviews one by one hides what customers really say. Get reviews for any place: rating, text, author, date, owner replies and optional photos, sorted by newest, most relevant, highest or lowest. No API key, login or browser.

- **URL**: https://apify.com/insights_data/google-map-review-scraper.md
- **Developed by:** [Insights Data](https://apify.com/insights_data) (community)
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.70 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

### 🗺️ What is Google Map Review Scraper?

**Google Map Review Scraper** collects the public reviews of Google Maps places into one table, for local businesses, agencies and analysts who need review monitoring and reputation monitoring. Paste one or more place URLs and click **Start**, no coding needed; you can try it on the Apify Free plan, where the $5 monthly credit pays for result charges and platform usage. For each review you get the star rating, text, language, publish date, reviewer details and the owner's reply, ready for customer review analysis in a spreadsheet, a dashboard or an AI tool.

- 🛡️ **Watch your own locations:** collect the latest reviews (Newest First sort) of your stores, restaurants or hotels on a schedule, then spot the new ones by their review ID.
- 📉 **Reputation management:** sort by lowest rating to find the worst reviews first, and check which ones still have no owner reply.
- 🥊 **Competitor analysis:** pull the reviews of competing places and compare ratings, praise and complaints side by side.
- 🧠 **Customer feedback analysis:** feed review text, rating and language into sentiment, topic or AI tools to learn what customers like and dislike.
- 🔎 **Market research:** collect restaurant reviews, hotel reviews or attraction reviews across an area to spot gaps and trends.
- 🏢 **Brand monitoring:** add every branch of a chain to one run and compare how each location is rated.

**Google's own Places API returns at most 5 reviews per place ([Places API reference](https://developers.google.com/maps/documentation/places/web-service/reference/rest/v1/places)). Google Map Review Scraper collects all reviews Google shows for the place, or as many as you choose.**

#### What can Google Map Review Scraper do?

Use it as a Google review extractor for one place or a long list of places:

- 🔗 **Many places per run:** paste a list of Google Maps place URLs, one per line.
- 🔃 **Four sort orders:** Most Relevant, Newest First, Highest Rating First or Lowest Rating First.
- 🎯 **Per-place limit:** collect all reviews, or set a number such as 10, 100 or 500 per place.
- 💬 **Owner replies:** the reply text and reply date come with each review (on by default).
- 📸 **Review photos:** add the photo links that reviewers uploaded (optional).
- 📦 **Export anywhere:** download as JSON, CSV, Excel, XML or HTML, or read the results with the Apify API.
- ⏰ **Scheduled runs:** run it daily or weekly, get notified with webhooks and connect Make, Zapier, n8n or Google Sheets. With the Newest First sort, each run returns the latest reviews; you find the new ones by `review_id`.

No Google API key, no Google login and no browser extension are needed.

***

### 🗃️ Google Map Review Scraper data: what can you extract?

Every row this Google Maps review extractor saves holds Google Maps reviews data for one review. The field names below are the exact names in the dataset.

| Field | What it means |
|---|---|
| 🆔 `review_id` | Unique ID of the review |
| 🔗 `place_url` | The place URL, exactly as you entered it |
| 👤 `author_name` | Reviewer's display name ("A Google User" when Google shows no name) |
| 🆔 `author_id` | Reviewer's Google contributor ID |
| 🔗 `author_url` | Link to the reviewer's Google Maps profile |
| 🖼️ `author_photo` | Reviewer's profile picture |
| 📊 `author_reviews_count` | How many reviews the reviewer has written |
| 📊 `author_photos_count` | How many photos the reviewer has uploaded |
| ⭐ `rating` | Star rating from 1 to 5 |
| 📝 `text` | The review text |
| 🌐 `language` | Two-letter language code of the text, such as `en` or `fr` |
| 📅 `published_at` | When the review was posted, in UTC (world standard time), for example `2026-10-15T14:32:00Z` |
| 💬 `owner_response` | The business owner's reply |
| 📅 `owner_response_at` | When the owner replied, in UTC |
| 📸 `images` | Review photos as a list of `url` and `id` (only when Include Review Images is on) |

> **Note:** `text` is `null` when the reviewer left only stars. `owner_response` and `owner_response_at` are `null` when the owner has not replied; both fields are left out of the row completely when you turn off Include Owner Response. Profile fields such as `author_id` or `author_reviews_count` can be `null` when Google doesn't show them.

The Google reviews owner response is useful on its own: filter for rows where it is `null` to find reviews nobody has answered yet.

#### What data can't Google Map Review Scraper extract?

- Place details such as name, address, phone, website, opening hours or the overall rating. The only place field is `place_url`. To get those details, or to find places by keyword, use [Google Map Scraper](https://apify.com/insights_data/google-map-scraper).
- Contact data of reviewers (no emails or phone numbers).
- Translations, review "helpful" counts, or filters by date or keyword. You choose the sort order and how many reviews per place.

***

### ▶️ How to scrape Google Maps reviews

This Google Maps review scraper is made for an easy start, even if you've never collected data from the web before. You can scrape Google reviews in five steps:

1. [Create a free Apify account](https://console.apify.com/sign-up) with your email.
2. Open [Google Map Review Scraper](https://apify.com/insights_data/google-map-review-scraper) and click **Try for free**.
3. The form opens with two example places. Replace them with the full URLs of your places in **Place URLs**, one per line (see "How to get the right place URL" below).
4. Keep **Max Reviews Per URL** at the prefilled 10 for a first test and click **Start**. If you set it to 0, the Actor collects all reviews Google shows for each place.
5. Wait until the run's status shows **Succeeded**. The reviews appear in the **Output** tab. To export Google Maps reviews as JSON, CSV, Excel, XML or HTML, go to **Storage → Datasets → Export**.

#### How to get the right place URL

The Actor only accepts the full URL of a single place, the one that contains a `data=` part (Google's code for that place).

1. Open [Google Maps](https://www.google.com/maps) in your browser and search for the place.
2. Click the place's name in the result list, so its details panel opens on the left.
3. Copy the URL from the address bar. It is long and contains `data=`.
4. Paste it into **Place URLs**. Repeat for each place.

> ⚠️ Short links from the **Share** button (`maps.app.goo.gl/...`), search result URLs and URLs without `data=` don't work. They are skipped, and the run goes on with the other places.

#### Words you'll see in Apify

- **Apify Console:** the web app where you start runs and see results.
- **Run:** one start of the Actor with your settings.
- **Dataset:** the results table of a run.
- **Task:** a saved set of input settings that you can run again or schedule.
- **API token:** your personal key for using Apify from code (Console → **Settings** → **API & Integrations**).

***

### 💲 Google Map Review Scraper pricing: how much does it cost?

Google Map Review Scraper uses **pay-per-event** pricing: you pay for each review it saves, plus a small fee when a run starts. Your bill for a run has three parts:

1. **Results:** you pay for each review saved to the dataset. The price depends on your Apify plan (table below). Skipped places add no result charges; reviews saved before a place failed stay in the dataset and are charged, and so are repeated rows when a place is restarted (see Known issues).
2. **Start fee:** $0.00005 per run at the default 1 GB of memory. It is charged once per GB of run memory, so it only grows if you raise the memory yourself.
3. **Platform usage:** the compute resources the run uses, billed at your Apify plan's own rates.

| Apify plan | Price per review | Price per 1,000 reviews |
|---|---|---|
| 🆓 Free | $0.001 | $1.00 |
| 🚀 Starter | $0.0009 | $0.90 |
| 📈 Scale | $0.0008 | $0.80 |
| 💼 Business and higher | $0.0007 | $0.70 |

The plan discount applies to the result price only. The start fee is the same on every plan, and platform usage is billed at your Apify plan's own rates.

**Example:** 1,000 reviews cost $1.00 in result charges on the Free plan, $0.90 on Starter, $0.80 on Scale and $0.70 on Business, plus the $0.00005 start fee and platform usage. The prefilled input (2 places, 10 reviews each) saves up to 20 reviews: $0.02 in result charges on the Free plan, plus the start fee and platform usage.

To see the full cost for your own places, do a small test run (for example 10 reviews per place) and read the cost on the run's page in Apify Console. See the [pricing tab](https://apify.com/insights_data/google-map-review-scraper/pricing) for the current prices.

#### Is scraping Google reviews free?

You can start without paying. On the Apify Free plan, the $5 monthly credit pays for result charges and platform usage, and Free-plan runs work the same as paid runs.

#### How do I keep the cost under control?

- Set **Max Reviews Per URL**. With 0, the Actor collects all reviews Google shows for each place, and each review is a paid result.
- Set a **maximum charge limit**. In Apify Console, open **Run options** below the input form and fill in **Maximum cost per run** before you click **Start** (through the API, send `maxTotalChargeUsd`). It caps what the Actor charges for results; platform usage is billed on top. When the limit is reached, the run stops and keeps the reviews it already saved.

***

### ⬇️ Input

To scrape Google Maps reviews, you only need **one or more Google Maps place URLs**. Everything else has a sensible default. Set the input in Apify Console or send it as JSON through the API.

#### Settings most people change

| Setting (Console title) | What it does | Default |
|---|---|---|
| 🔗 Place URLs (`urls`) | The places to collect reviews from, one URL per line. Required | None (Console prefill: Eiffel Tower, Central Park) |
| 🎯 Max Reviews Per URL (`max_reviews`) | Most reviews to collect per place. 0 = all reviews Google shows for the place | 0 (Console prefill: 10) |
| 🔃 Sort Reviews By (`sort_type`) | Most Relevant (`relevant`), Newest First (`newest`), Highest Rating First (`highest_rating`), Lowest Rating First (`lowest_rating`). Pick Newest First for monitoring and Lowest Rating First to find complaints. With a limit, the sort decides which reviews you get | Newest First |
| 💬 Include Owner Response (`include_owner_response`) | Adds the owner's reply and reply date | On |
| 📸 Include Review Images (`include_images`) | Adds the links of photos in each review | Off |
| 🔒 Proxy Configuration (`proxyConfiguration`) | Optional. Leave it empty for a normal run. If Google keeps refusing a place, set it to use Apify Proxy (Apify's pool of IP addresses) and run again | Empty |

Here's an example that collects the 10 newest reviews of two places:

```json
{
  "urls": [
    "https://www.google.com/maps/place/Eiffel+Tower/@48.8584,2.2945,17z/data=!4m6!3m5!1s0x47e66e2964e34e2d:0x8ddca9ee380ef7e0!8m2!3d48.8584!4d2.2945!16s%2Fm%2F02j81",
    "https://www.google.com/maps/place/Central+Park/@40.7828,-73.9654,15z/data=!4m6!3m5!1s0x89c2589a018531e3:0xb9df1f7387a94119!8m2!3d40.7828!4d-73.9654!16zL20vMDFuN18"
  ],
  "sort_type": "newest",
  "max_reviews": 10,
  "include_owner_response": true,
  "include_images": false
}
```

See the [input tab](https://apify.com/insights_data/google-map-review-scraper/input-schema) for every field.

#### Place URLs

The Actor needs the **full** place URL, the one you see in the address bar after you open a place in Google Maps. It contains a long `data=` part that identifies the place.

- ✅ Good: `https://www.google.com/maps/place/Eiffel+Tower/@48.8584,2.2945,17z/data=!4m6!3m5!1s0x47e66e2964e34e2d:0x8ddca9ee380ef7e0!8m2!...`
- ❌ Bad: `https://www.google.com/maps/place/Eiffel+Tower/@48.8583701,2.2922926,17z` (no `data=` part)
- ❌ Bad: a short share link or a Google search result link

> ⚠️ A URL without the `data=` part is skipped with the message "This is not a full Google Maps place URL" in the run log. It costs nothing in result charges, and the other places in the run still go ahead.

#### Max Reviews Per URL

This number applies to each place on its own. With 3 places and 50, you get up to 150 reviews. With **0**, the Actor collects all reviews Google shows for each place, which can be thousands for a popular place.

- ✅ Good: 10 for a first test, 50 for a weekly check of new reviews, 0 when you really want the full history
- ❌ Bad: 0 on your first run with a famous landmark

> ⚠️ API runs that leave out `max_reviews` use the default 0, which means all reviews. Send a number when you want to limit the cost.

***

### ⬆️ Output

Each review becomes one row in the run's dataset. Open the **Output** tab to see the results as a table. **All Reviews** shows every field except photos. **Reviews with Images** shows the review ID, place URL, author name, rating, text, publish date and photo links. **Full Data** shows every field. To download, go to **Storage → Datasets → Export** and pick JSON, CSV, Excel, XML or HTML. You can choose only the fields you need there, for example to export Google reviews to CSV for a dashboard tool.

Your Google reviews data stays in your Apify account, so you can come back to it, share it or read it through the API.

> **For developers:** run totals are saved as the `RUN_SUMMARY` record under **Storage → Key-value stores** (a small file store that comes with each run): `totalReviews`, `urlsProcessed` (the number of URLs in your input, also when the run stopped early), `errors` (places skipped), `durationSecs` and `spendLimitReached` (`true` when the maximum charge limit stopped the run).

#### JSON example

Results for the input example above (illustrative values, shortened). The first row has a text and an owner reply; the second is a stars-only review without a reply:

```json
[
  {
    "review_id": "ChdDSUhNMG9nS0VJQ0FnSURueWZMak9RRRAB",
    "place_url": "https://www.google.com/maps/place/Eiffel+Tower/@48.8584,2.2945,17z/data=!4m6!3m5!1s0x47e66e2964e34e2d:0x8ddca9ee380ef7e0!8m2!3d48.8584!4d2.2945!16s%2Fm%2F02j81",
    "author_name": "Jane Doe",
    "author_id": "123456789012345678",
    "author_url": "https://www.google.com/maps/contrib/123456789012345678",
    "author_photo": "https://lh3.googleusercontent.com/a/...",
    "author_reviews_count": 47,
    "author_photos_count": 12,
    "rating": 5,
    "text": "Amazing view and wonderful experience!",
    "language": "en",
    "published_at": "2026-10-15T14:32:00Z",
    "owner_response": "Thank you for visiting!",
    "owner_response_at": "2026-10-16T09:00:00Z"
  },
  {
    "review_id": "ChZDSUhNMG9nS0VJQ0FnSUR4d1pqTVdBEAE",
    "place_url": "https://www.google.com/maps/place/Eiffel+Tower/@48.8584,2.2945,17z/data=!4m6!3m5!1s0x47e66e2964e34e2d:0x8ddca9ee380ef7e0!8m2!3d48.8584!4d2.2945!16s%2Fm%2F02j81",
    "author_name": "A Google User",
    "author_id": null,
    "author_url": null,
    "author_photo": null,
    "author_reviews_count": null,
    "author_photos_count": null,
    "rating": 4,
    "text": null,
    "language": null,
    "published_at": "2026-10-14T08:05:00Z",
    "owner_response": null,
    "owner_response_at": null
  }
]
```

To build a Google Maps reviews dataset for research, run many places in one go: every row carries its `place_url`, so you can group and compare places after the export.

***

### 💡 Tips and advanced usage

#### Can I get all Google reviews of a place?

Yes. Set **Max Reviews Per URL** to 0 and the Actor keeps loading reviews until Google shows no more for that place. The number of reviews you get depends on how many the place has. Because each review is a paid result, try 10 or 100 first and look at the cost on the run page.

#### How to get faster or cheaper results

- 🎯 Use **Max Reviews Per URL**. For regular checks, choose Newest First with a number a bit higher than the new reviews a place gets between two runs.
- 📸 Leave **Include Review Images** off unless you need the photo links.
- 🔗 Put all places into one run instead of starting one run per place. You pay the start fee once.
- 💲 Set a maximum charge limit when you are not sure how many reviews a place has.

#### How to track Google reviews over time

The Actor has no "new reviews only" filter. Monitoring means scheduled runs plus removing the reviews you already have, by `review_id`:

1. Fill in your places, choose **Newest First** and set **Max Reviews Per URL** to about 50.
2. Save the input as a task (**Save as new task** in Apify Console).
3. Open **Schedules**, add a [schedule](https://docs.apify.com/platform/schedules) for that task (for example every Monday at 8:00) and save.
4. With Newest First, each run creates a new dataset with the latest reviews, including some you already have. Keep the rows whose `review_id` you haven't seen before: those are the new reviews. Without code, collect the runs in one Google Sheet and use **Data → Data cleanup → Remove duplicates** on the `review_id` column, or filter `published_at` for dates after your last run. `owner_response` shows whether a review has been answered.

This weekly review monitoring loop works well with the Google Sheets and Slack workflows below.

#### Known issues

- ⚠️ When Google doesn't answer, the place is retried, then skipped. A retry starts the place again from the beginning, so a few reviews of that place can appear twice, and the repeated rows are charged like any other review. Remove repeats by `review_id` after the export.
- ⚠️ When **Max Reviews Per URL** is above 0, the run stops once it has saved that number times the number of places. Repeated rows from a restarted place count toward this total, so the run can end before the later places in your list reach their limit. Run those places again if needed.
- ⚠️ Repeated reviews are only removed within one place. If you add the same place twice, you get its reviews twice.
- ⚠️ Short share links and search links are skipped. Use the full place URL.

***

### 🔌 Google Map Review Scraper API and integrations

#### Can I use Google Map Review Scraper as a Google Maps reviews API?

Yes. The [Apify API](https://docs.apify.com/api/v2) lets you start runs, wait for them and fetch the reviews as JSON from your own code. Use the `apify-client` [NPM package](https://apify.com/insights_data/google-map-review-scraper/api/javascript) for Node.js or the `apify-client` [PyPI package](https://apify.com/insights_data/google-map-review-scraper/api/python) for Python. The [API tab](https://apify.com/insights_data/google-map-review-scraper/api) has ready-to-copy code.

#### Google Maps reviews scraper Python example

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_API_TOKEN>")
run = client.actor("insights_data/google-map-review-scraper").call(run_input={
    "urls": [
        "https://www.google.com/maps/place/Eiffel+Tower/@48.8584,2.2945,17z/data=!4m6!3m5!1s0x47e66e2964e34e2d:0x8ddca9ee380ef7e0!8m2!3d48.8584!4d2.2945!16s%2Fm%2F02j81"
    ],
    "sort_type": "newest",
    "max_reviews": 10,
})

for review in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(review["rating"], review["published_at"], review["text"])
```

#### Can I integrate Google Map Review Scraper with other apps?

Yes. Connect it with almost any app through [Apify integrations](https://apify.com/integrations), including Make, Zapier, n8n, Slack, Google Sheets, Google Drive and Airbyte. Here are three workflows:

- 📗 **Send Google reviews to Google Sheets:** open your task's **Integrations** tab and add Google Sheets, so every scheduled run adds its reviews to a shared sheet. Each run adds all its rows, so remove repeats by `review_id` (see above), then sort by `rating` to read the new complaints.
- 🔔 **Slack alert for bad reviews:** add a [webhook](https://docs.apify.com/platform/integrations/webhooks) (a message Apify sends to another app when a run finishes) that fires when a run succeeds and points to a Make, Zapier or n8n scenario. The scenario reads the dataset, keeps rows with `rating` of 1 or 2 and posts them to a Slack channel.
- 🧠 **Google reviews sentiment analysis:** fetch the dataset through the API and pass `text`, `rating` and `language` to your sentiment model or an AI assistant, then chart the results per place.

#### Can I use Google Map Review Scraper with AI agents (MCP)?

Yes. MCP (Model Context Protocol) is the standard that AI assistants use to call outside tools. Connect the Actor to Claude and other AI assistants through the Apify MCP server, so an assistant can collect the reviews of a place and summarize them for you. Open the [MCP tab](https://apify.com/insights_data/google-map-review-scraper/api/mcp) for setup steps.

***

### 🧭 Other Google Maps and review scrapers

These Actors work well alongside Google Map Review Scraper: find places first, add travel and news context, or compare reviews from other sites.

| Actor | What it adds |
|---|---|
| 📍 [Google Map Scraper](https://apify.com/insights_data/google-map-scraper) | Google Maps places by keyword, link or place ID: name, category, address, phone, website, rating, hours and coordinates |
| 🏨 [Google Hotels Scraper](https://apify.com/insights_data/google-hotels-scraper) | Google Hotels prices, ratings, star class, amenities and booking links for any city or hotel |
| 📰 [Google News Scraper](https://apify.com/insights_data/google-news-scraper) | Google News headlines, publishers and article links by search term, topic or link |
| 🧳 [Booking Review Scraper](https://apify.com/insights_data/booking-review-scraper) | Booking.com hotel reviews with liked and disliked text, room type, stay date and category scores |
| 🛒 [Flipkart Reviews Scraper](https://apify.com/insights_data/flipkart-reviews-scraper) | Flipkart product reviews, star ratings, photos and rating summaries |
| 🔑 [Keyword Search Volume — Bulk Google Metrics (CPC & Trend)](https://apify.com/insights_data/keyword-search-volume) | Google search volume, CPC, ad competition and a 12-month trend for thousands of keywords in one run |

***

### ❓ FAQ

#### Is it legal to scrape Google reviews?

Collecting publicly visible reviews is generally allowed, but you are responsible for how you use them. Reviews include personal data such as reviewer names and profile links, so you need a legitimate reason to store them under data protection rules such as the GDPR (the EU's data protection law). Review texts are written by other people, so think twice before republishing them. Also take [Google Maps' Terms of Service](https://www.google.com/intl/en/help/terms_maps/) into account. This is not legal advice; ask a lawyer for your specific case.

#### How does Google Map Review Scraper work?

Google reviews data scraping with this Actor works much like you scrolling through the reviews panel of a place in Google Maps, only automated. For each place URL, the Actor loads the reviews page by page in the sort order you chose and saves each review as a row. It moves to the next place when Google shows no more reviews or your per-place limit is reached. If a place keeps failing, it is retried, then skipped, and the run goes on with the next place.

#### Is there a Google reviews API for any business?

Google's Places API (New) works for any place, but it returns at most 5 reviews per place. That Google Places API reviews limit is the main reason people use a scraper instead.

| | Google Places API (New) | Google Map Review Scraper |
|---|---|---|
| Reviews per place | At most 5 ([Google docs](https://developers.google.com/maps/documentation/places/web-service/reference/rest/v1/places)) | All reviews Google shows for the place, or your own limit |
| Sort orders | Not chosen by you (sorted by relevance) | Most Relevant, Newest First, Highest or Lowest Rating First |

#### Is there a Google reviews scraper that works without coding?

Yes. This Google Maps reviews scraper works from your browser through Apify Console: paste place URLs, click **Start** and download the table. Developers can use the same Actor through the API or Python.

#### Can I download Google reviews of a competitor?

Yes. Any public Google Maps place works, not only places you own, so you can download Google reviews of competitors as easily as your own. This is useful for local SEO competitor analysis: compare how often competitors get reviews, their ratings and what customers praise or complain about.

#### How do I export Google reviews to Excel?

After the run, go to **Storage → Datasets → Export**, choose **Excel** and click **Download**. To export Google reviews for other tools, choose CSV or JSON in the same place.

#### Can I collect all my Google business reviews in one run?

Yes. Add the place URL of each of your locations to **Place URLs** and set **Max Reviews Per URL** to 0. You get all your Google business reviews in one dataset, with `place_url` showing which location each review belongs to.

#### Why scrape Google Maps reviews?

- 🗣️ **Voice of customer analysis:** read what customers say in their own words, by location and by star rating.
- 🍽️ **Hospitality insight:** restaurant groups and hotel teams can use the reviews for hotel review analysis and menu or service checks.
- 📉 **Faster replies:** sort by lowest rating and answer unhappy customers before more people read the review.
- 🧾 **Reports for clients:** agencies can build monthly reputation reports from the export.

#### Why am I getting fewer results than expected?

1. Check that each URL is a full place URL with the `data=` part. Skipped URLs are listed in the run log as "Skipped this place".
2. Check **Max Reviews Per URL**. It limits each place, so a low number gives a short list.
3. The place may simply have fewer reviews than you expected. Check its reviews panel in Google Maps.
4. The run may have stopped at your maximum charge limit. The run's status message then starts with "Stopped at your maximum charge limit".
5. If Google didn't answer for a place, it was retried, then skipped. Run that place again later.

#### What should I do if the run fails or every place is skipped?

Open the run in Apify Console and read the **Log** tab first; it says what happened in plain words.

- **"No place URLs were given":** the Place URLs field was empty. Add at least one URL and start again.
- **"This is not a full Google Maps place URL" for every place:** the URLs are short links or search links. Get the full URLs as shown in "How to get the right place URL" above.
- **"Google did not return reviews for this place after several tries":** wait a while and run the place again. If it keeps happening, set **Proxy Configuration** to use Apify Proxy and try again.
- **Still stuck?** Create an issue on the [Issues tab](https://apify.com/insights_data/google-map-review-scraper/issues/open) and include the link to your run, so we can look at the log.

***

### 📧 Support and feedback

Found a bug or have an idea for a feature? Please create an issue on the [Issues tab](https://apify.com/insights_data/google-map-review-scraper/issues/open).

Need a **custom solution**, more fields or a different review site? Write to us at hello.insights.data@gmail.com.

Built and maintained by [Insights Data](https://apify.com/insights_data).

# Actor input Schema

## `urls` (type: `array`):

Google Maps place URLs to scrape. Open a place in Google Maps, copy the full URL from the browser address bar (it must contain 'data=...' with the place ID), and paste one per line.

## `sort_type` (type: `string`):

Order in which reviews are fetched and returned.

## `max_reviews` (type: `integer`):

Maximum number of reviews to collect per place URL. Set 0 for all available reviews.

## `include_images` (type: `boolean`):

When enabled, each review record includes a list of image URLs uploaded by the reviewer.

## `include_owner_response` (type: `boolean`):

When enabled, each review record includes the business owner's reply text and timestamp (if present).

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

Optional proxy settings. By default the actor runs without a proxy and automatically escalates to datacenter then residential proxies if access is blocked.

## Actor input object example

```json
{
  "urls": [
    "https://www.google.com/maps/place/Eiffel+Tower/@48.8584,2.2945,17z/data=!4m6!3m5!1s0x47e66e2964e34e2d:0x8ddca9ee380ef7e0!8m2!3d48.8584!4d2.2945!16s%2Fm%2F02j81",
    "https://www.google.com/maps/place/Central+Park/@40.7828,-73.9654,15z/data=!4m6!3m5!1s0x89c2589a018531e3:0xb9df1f7387a94119!8m2!3d40.7828!4d-73.9654!16zL20vMDFuN18"
  ],
  "sort_type": "newest",
  "max_reviews": 10,
  "include_images": false,
  "include_owner_response": true
}
```

# Actor output Schema

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

All scraped reviews — overview view.

## `with_images` (type: `string`):

Reviews including photo URL arrays.

## `all` (type: `string`):

All fields, unfiltered.

# 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 = {
    "urls": [
        "https://www.google.com/maps/place/Eiffel+Tower/@48.8584,2.2945,17z/data=!4m6!3m5!1s0x47e66e2964e34e2d:0x8ddca9ee380ef7e0!8m2!3d48.8584!4d2.2945!16s%2Fm%2F02j81",
        "https://www.google.com/maps/place/Central+Park/@40.7828,-73.9654,15z/data=!4m6!3m5!1s0x89c2589a018531e3:0xb9df1f7387a94119!8m2!3d40.7828!4d-73.9654!16zL20vMDFuN18"
    ],
    "max_reviews": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("insights_data/google-map-review-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 = {
    "urls": [
        "https://www.google.com/maps/place/Eiffel+Tower/@48.8584,2.2945,17z/data=!4m6!3m5!1s0x47e66e2964e34e2d:0x8ddca9ee380ef7e0!8m2!3d48.8584!4d2.2945!16s%2Fm%2F02j81",
        "https://www.google.com/maps/place/Central+Park/@40.7828,-73.9654,15z/data=!4m6!3m5!1s0x89c2589a018531e3:0xb9df1f7387a94119!8m2!3d40.7828!4d-73.9654!16zL20vMDFuN18",
    ],
    "max_reviews": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("insights_data/google-map-review-scraper").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 '{
  "urls": [
    "https://www.google.com/maps/place/Eiffel+Tower/@48.8584,2.2945,17z/data=!4m6!3m5!1s0x47e66e2964e34e2d:0x8ddca9ee380ef7e0!8m2!3d48.8584!4d2.2945!16s%2Fm%2F02j81",
    "https://www.google.com/maps/place/Central+Park/@40.7828,-73.9654,15z/data=!4m6!3m5!1s0x89c2589a018531e3:0xb9df1f7387a94119!8m2!3d40.7828!4d-73.9654!16zL20vMDFuN18"
  ],
  "max_reviews": 10
}' |
apify call insights_data/google-map-review-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,insights_data/google-map-review-scraper"
        }
    }
}
```

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/dKTsJzjPd4vmek7Ks/builds/tqGxarsbInGjaI9R6/openapi.json
