# Google Maps Reviews Scraper - Unlimited Reviews Per Place (`zen-studio/google-maps-reviews-scraper`) Actor

Scrape unlimited Google Maps reviews from place URLs or IDs. Get ratings, full text, owner replies, sub-ratings, photos and reviewer details.

- **URL**: https://apify.com/zen-studio/google-maps-reviews-scraper.md
- **Developed by:** [Zen Studio](https://apify.com/zen-studio) (community)
- **Categories:** SEO tools, Lead generation
- **Stats:** 2 total users, 1 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.30 / 1,000 reviews

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

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

## What's an Apify Actor?

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 | Unlimited Reviews Per Place, Owner Replies (2026)

<blockquote style="margin:0 0 16px;border-left:5px solid #4C945E;background:#F0FDF4;padding:16px 20px">
<span style="font-size:18px;font-weight:700;color:#1C1917">41 fields per review, including the owner's reply and the reviewer's own Food, Service and Atmosphere scores.</span>
</blockquote>

<a href="https://console.apify.com/actors/ojjo6BxQiOiLYRca1/input"><img src="https://api.apify.com/v2/key-value-stores/pJ7iaZsTFhR3k9tjV/records/google-maps-reviews-scraper-hero.png" alt="Google Maps reviews scraper: unlimited reviews per place with rating, review text, owner replies, reviewer sub-ratings and photos as structured JSON" style="max-width:100%"></a>

<table>
<tr>
<td colspan="4" style="padding:10px 14px;background:#4C945E;border:none;border-radius:4px 4px 0 0">
<span style="color:#FAFAF9;font-size:14px;font-weight:700;letter-spacing:0.5px">Maps &amp; Review Tools</span>
<span style="color:#E8F5E9;font-size:13px">&nbsp;&nbsp;&bull;&nbsp;&nbsp;Use one source or combine hotel reviews</span>
</td>
</tr>
<tr>
<td style="padding:12px 16px;border:1px solid #E7E5E4;border-radius:0 0 0 4px;background:#D3EDD9;border-right:none;border-top:none;vertical-align:top;width:25%">
<span style="white-space:nowrap"><img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/NWYsOG96fMDy8ycdf-actor-ojjo6BxQiOiLYRca1-RU3DuH650K-google-maps-directions-api-logo.png" width="20" height="20" style="vertical-align:middle"> &nbsp;<a href="https://apify.com/zen-studio/google-maps-reviews-scraper" style="color:#4C945E;text-decoration:none;font-weight:700;font-size:13px">Google Reviews</a></span><br>
<span style="color:#4C945E;font-size:12px;font-weight:600">&#10148; You are here</span>
</td>
<td style="padding:12px 16px;border:1px solid #E7E5E4;background:#E8F5E9;border-right:none;border-top:none;vertical-align:top;width:25%">
<span style="white-space:nowrap"><img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/DSvMCAwsufMyZeLyt-actor-qIdkSE8q4I8DIfNlD-lKLPnrjTrn-hotel-review-aggregator-logo2.png" width="20" height="20" style="vertical-align:middle"> &nbsp;<a href="https://apify.com/clearpath/hotel-review-aggregator" style="color:#1C1917;text-decoration:none;font-weight:700;font-size:13px">Hotel Review Aggregator</a></span><br>
<span style="color:#78716C;font-size:12px">Four sources, one dataset</span>
</td>
<td style="padding:12px 16px;border:1px solid #E7E5E4;background:#E8F5E9;border-right:none;border-top:none;vertical-align:top;width:25%">
<span style="white-space:nowrap"><img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/NWYsOG96fMDy8ycdf-actor-5bSvAQKSK3LPq9OXb-AgVhcT1mQC-apple-maps-scraper-logo.png" width="20" height="20" style="vertical-align:middle"> &nbsp;<a href="https://apify.com/zen-studio/apple-maps-scraper-pro" style="color:#1C1917;text-decoration:none;font-weight:700;font-size:13px">Apple Maps</a></span><br>
<span style="color:#78716C;font-size:12px">Places, ratings and details</span>
</td>
<td style="padding:12px 16px;border:1px solid #E7E5E4;border-radius:0 0 4px 0;background:#E8F5E9;border-top:none;vertical-align:top;width:25%">
<span style="white-space:nowrap"><img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/NWYsOG96fMDy8ycdf-actor-fRSgBvgbsRB4o7t30-UkaIbH1Yhq-yandex-maps-scraper-logo.png" width="20" height="20" style="vertical-align:middle"> &nbsp;<a href="https://apify.com/zen-studio/yandex-maps-reviews-scraper" style="color:#1C1917;text-decoration:none;font-weight:700;font-size:13px">Yandex Reviews</a></span><br>
<span style="color:#78716C;font-size:12px">Reviews, replies and media</span>
</td>
</tr>
</table>

#### Copy to your AI assistant

```
zen-studio/google-maps-reviews-scraper on Apify. Scrapes every review of a Google Maps place, with owner responses and sub-ratings. Call ApifyClient("TOKEN").actor("zen-studio/google-maps-reviews-scraper").call(run_input={...}), then client.dataset(run["defaultDatasetId"]).list_items().items. Needs startUrls or placeIds; maxReviewsPerPlace=0 means the whole history. Full spec: GET https://api.apify.com/v2/acts/zen-studio~google-maps-reviews-scraper/builds/default (Bearer TOKEN) -> inputSchema, actorDefinition.storages.dataset, readme. Token: https://console.apify.com/account/integrations
```

### Key Features

- **No limit per place**: set *Reviews per place* to `0` and the complete history comes back, however long it is. Rows stream out as they land, so a place with tens of thousands of reviews stays within 512 MB.
- **41 fields per review**: rating and its scale, full text, the owner's reply, per-question sub-ratings, translations, likes, photos and videos, Local Guide standing, and the place the review belongs to.
- **Filter at the source**: keyword, date cutoff and sort are applied before delivery, so you are not billed for reviews you discard.
- **Partner reviews handled**: Tripadvisor, Booking and Trip.com reviews arrive with their own rating scale, so an 8 out of 10 is never read as an 8 out of 5.
- **Free tier**: 10 lifetime runs, 100 reviews per run, no credit card.

### How to Scrape Google Maps Reviews

1. Open **Google Maps Reviews Scraper** in the Apify Console and click **Try for free**.
2. Paste your Google Maps place URLs into *Start URLs*, or place IDs into *Place IDs*.
3. Set *Reviews per place*, or leave it at `0` to pull the complete history.
4. Click **Start**, then download the reviews as JSON, CSV, Excel, XML or HTML.

#### Basic: the latest reviews for a place

```json
{
  "startUrls": [
    { "url": "https://www.google.com/maps/place/Hotel+Adlon+Kempinski+Berlin/@52.5161791,13.3805048,17z" }
  ],
  "maxReviewsPerPlace": 100,
  "reviewsSort": "newest"
}
```

#### Monitoring: only what changed since last week

```json
{
  "placeIds": ["ChIJHQQciMZRqEcR2X4b8-vf5Bk"],
  "newerThan": "7 days",
  "maxReviewsPerPlace": 0
}
```

`newerThan` is measured from the moment the run starts, so a scheduled run keeps the same window instead of drifting behind a fixed date.

It compares each review's **latest activity**, not its original post date. A review edited this week comes back even if it was first posted years ago, which is what you want when watching for changes.

#### Complaints only

```json
{
  "placeIds": ["ChIJHQQciMZRqEcR2X4b8-vf5Bk"],
  "reviewsSort": "lowestRanking",
  "maxReviewsPerPlace": 50
}
```

#### One topic across a portfolio

```json
{
  "placeIds": ["ChIJHQQciMZRqEcR2X4b8-vf5Bk", "0x47a851db960e0eb1:0x6ce7f513876203dd"],
  "reviewsKeyword": "parking",
  "maxReviewsPerPlace": 0
}
```

Keyword matching works the way the search box on the Google Maps reviews panel does, so related wording is included, not just the exact word.

### Input Parameters

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `startUrls` | array | `[]` | Google Maps place URLs, including shortened `maps.app.goo.gl` links. Max 500 |
| `placeIds` | array | one example place | `ChIJ...` place IDs or `0x...:0x...` feature IDs. Max 500 |
| `maxReviewsPerPlace` | integer | `100` | Stop after this many per place. `0` for the complete history |
| `reviewsSort` | string | `newest` | `newest`, `mostRelevant`, `highestRanking`, `lowestRanking` |
| `newerThan` | string | `""` | A date (`2026-08-01`) or a rolling period (`7 days`). Forces newest first |
| `reviewsKeyword` | string | `""` | Keep only reviews about a topic |
| `reviewsOrigin` | string | `all` | `all`, or `google` for first-party reviews only |
| `language` | string | `en` | Display language for place names, categories and relative dates |
| `countryCode` | string | `us` | Two-letter country code used when loading each place |

Feature IDs need no lookup, so they start fastest. The Google Maps Scraper emits them as `hexId`.

### What Data Can You Extract from Google Maps Reviews?

Every row carries its place, so the dataset is usable on its own with no join.

- **Review**: `reviewId`, `rating`, `ratingScale`, `text`, `textTranslated`, `language`, `translatedLanguage`, `date`, `publishedAtMicros`, `editedAtMicros`, `isEdited`, `likes`, `source`, `sourceIcon`, `reviewUrl`
- **Owner reply**: `ownerResponse` with its own text, date and language
- **Attributes**: `attributes[]`, the sub-ratings and chip answers the reviewer filled in (Food, Service, Atmosphere, Rooms, Location, price per person, trip type, wait time, parking)
- **Media**: `photos[]` plus `media[]` with type, caption, capture date, dimensions and coordinates
- **Author**: `author`, `authorId`, `authorProfile`, `authorPhoto`, `authorReviewCount`, `authorPhotoCount`, `isLocalGuide`, `localGuideLevel`
- **Place**: `placeName`, `placeRating`, `reviewsCount`, `primaryCategory`, `categories`, `address`, `addressFormatted`, `countryCode`, `latitude`, `longitude`, `placeId`, `hexId`, `googleMapsUrl`

#### Output Example

```json
{
  "recordType": "review",
  "reviewId": "Ci9DQUlRQUNvZENodHljRjlvT2tkWFJWOXRVbkp5ZEVOb1JGcHFTR3h4TlhNMWRsRRAB",
  "rating": 5,
  "ratingScale": 5,
  "date": "a week ago",
  "publishedAtMicros": 1787263048020576,
  "editedAtMicros": null,
  "isEdited": false,
  "text": "This one turned into a full Latin-food spread because nobody at the table could agree on one thing, which was honestl...",
  "textTranslated": null,
  "language": "en",
  "translatedLanguage": null,
  "likes": 0,
  "source": "Google",
  "sourceIcon": "https://www.gstatic.com/images/branding/product/1x/googleg_48dp.png",
  "ownerResponse": {
    "text": "Thank you so much for such a fun review! 🥂 Sounds like the perfect “order everything and share” kind of night: cevich...",
    "date": "6 days ago",
    "publishedAtMicros": 1787756409000000,
    "language": "en"
  },
  "attributes": [
    {
      "key": "GUIDED_DINING_PRICE_RANGE",
      "label": "Price per person",
      "question": "How much did you spend per person?",
      "rating": null,
      "values": [
        "$90–100"
      ]
    },
    {
      "key": "GUIDED_DINING_FOOD_ASPECT",
      "label": "Food",
      "question": "Food",
      "rating": 5,
      "values": null
    },
    {
      "key": "GUIDED_DINING_SERVICE_ASPECT",
      "label": "Service",
      "question": "Service",
      "rating": 5,
      "values": null
    }
  ],
  "media": [
    {
      "id": "CIABIhBcXh1w1Lv1bZjMlpky9qVP",
      "caption": null,
      "takenAt": "2026-08-20",
      "date": "a week ago",
      "latitude": 40.75683722983638,
      "longitude": -73.99349376183964,
      "type": "photo",
      "url": "https://lh3.googleusercontent.com/grass-cs/ACvplmP6PRg9yN5VFq29XMKymDc2sNCu-94zbG5XarFLd003s0UM1zBi006x8derDy0MRN7roe...",
      "width": 320,
      "height": 320,
      "durationMs": null
    },
    {
      "id": "CIABIhC1Nwo3ebJZP-6_vrvcER16",
      "caption": null,
      "takenAt": "2026-08-20",
      "date": "a week ago",
      "latitude": 40.75683722983638,
      "longitude": -73.99349376183964,
      "type": "photo",
      "url": "https://lh3.googleusercontent.com/grass-cs/ACvplmM1iJGmHnylX-vgKGy4nk7nibgEploD7eCalm0INy1yzGfShqfSVcBdVwaXmgOWCtE3gV...",
      "width": 348,
      "height": 348,
      "durationMs": null
    },
    {
      "id": "CIABIhC6VBo3VR3indeW-_uDqMwW",
      "caption": null,
      "takenAt": "2026-08-20",
      "date": "a week ago",
      "latitude": 40.75683722983638,
      "longitude": -73.99349376183964,
      "type": "photo",
      "url": "https://lh3.googleusercontent.com/grass-cs/ACvplmPngX4DFyuMf3LNAdBrsEfOPjvVEn1p9Yj6RLKvHuTAyoQBg4scDeTb_tPnUfcpeyuEUi...",
      "width": 1200,
      "height": 756,
      "durationMs": null
    }
  ],
  "photos": [
    "https://lh3.googleusercontent.com/grass-cs/ACvplmP6PRg9yN5VFq29XMKymDc2sNCu-94zbG5XarFLd003s0UM1zBi006x8derDy0MRN7roe...",
    "https://lh3.googleusercontent.com/grass-cs/ACvplmM1iJGmHnylX-vgKGy4nk7nibgEploD7eCalm0INy1yzGfShqfSVcBdVwaXmgOWCtE3gV...",
    "https://lh3.googleusercontent.com/grass-cs/ACvplmPngX4DFyuMf3LNAdBrsEfOPjvVEn1p9Yj6RLKvHuTAyoQBg4scDeTb_tPnUfcpeyuEUi..."
  ],
  "author": "Moali Timon",
  "authorPhoto": "https://lh3.googleusercontent.com/a/ACg8ocJnOlG6L38fGzjtbFUdUY_aDWbVfSt73qw_y7IAan4hwrFNTg=s120-c-rp-mo-br100",
  "authorProfile": "https://www.google.com/maps/contrib/115266825635927578667/reviews?hl=en",
  "authorId": "115266825635927578667",
  "authorReviewCount": 4,
  "authorPhotoCount": 14,
  "isLocalGuide": false,
  "localGuideLevel": 3,
  "reviewUrl": "https://www.google.com/maps/reviews/data=!4m8!14m7!1m6!2m5!1sCi9DQUlRQUNvZENodHljRjlvT2tkWFJWOXRVbkp5ZEVOb1JGcHFTR3h4...",
  "placeId": "ChIJ__8ztFJYwokRm2x1-poe3ks",
  "hexId": "0x89c25852b433ffff:0x4bde1e9afa756c9b",
  "placeName": "Buena Vista Restaurant & Bar",
  "googleMapsUrl": "https://www.google.com/maps/place/?q=place_id:ChIJ__8ztFJYwokRm2x1-poe3ks",
  "address": "Buena Vista Restaurant & Bar, 536 9th Ave, New York, NY 10018",
  "addressFormatted": "536 9th Ave, New York, NY 10018",
  "latitude": 40.7568372,
  "longitude": -73.9934938,
  "placeRating": 4.7,
  "reviewsCount": 1508,
  "primaryCategory": {
    "id": 8,
    "slug": "restaurants"
  },
  "categories": [
    "Latin American restaurant",
    "Bar & grill",
    "Cocktail bar"
  ],
  "countryCode": "US"
}
```

Download the results as JSON, CSV, Excel, XML or HTML from the run's Storage tab, or pull them through the Apify API.

### Advanced Usage

Ready-made configurations for review monitoring, reputation management, competitor tracking and sentiment analysis.

#### Track a portfolio daily

```json
{
  "placeIds": ["ChIJHQQciMZRqEcR2X4b8-vf5Bk", "0x47a851db960e0eb1:0x6ce7f513876203dd"],
  "newerThan": "2 days",
  "maxReviewsPerPlace": 0,
  "reviewsOrigin": "google"
}
```

#### Pull a full history for analysis

```json
{
  "placeIds": ["0x47a851c6881c041d:0x19e4dfebf31b7ed9"],
  "maxReviewsPerPlace": 0,
  "reviewsSort": "newest"
}
```

#### Local-language reviews with local labels

```json
{
  "placeIds": ["0x47a851c6881c041d:0x19e4dfebf31b7ed9"],
  "maxReviewsPerPlace": 200,
  "language": "de",
  "countryCode": "de"
}
```

### How much does it cost to scrape Google Maps reviews?

**$0.399 per 1,000 reviews** on the Free and Bronze plans, falling automatically to $0.349 on Silver and $0.299 on Gold and above. A $0.05 start fee applies once per run.

| Reviews | Total cost |
|---------|------------|
| 100 | $0.09 |
| 1,000 | $0.46 |

Reviews are charged as they are delivered, so a run that returns 40 reviews is charged for 40. Filtering by keyword, date or sort happens before delivery, so narrowing your input is the direct way to lower cost.

Free tier: 10 lifetime runs, 100 reviews per run, no credit card.

### Keeping it running

Reviews arrive continuously, so this Actor earns its place on a schedule rather than as a one-off.

**Suggested cadence.** Daily with `newerThan: "2 days"` for active monitoring, or weekly with `newerThan: "8 days"` for reporting. The small overlap covers a missed run.

**Where the rows go.** The dataset connects to Google Sheets, Make, Zapier, Slack and plain webhooks from the Actor's Integrations tab. A webhook on run completion is the usual way to push new reviews straight into a helpdesk or an alerting channel.

How to run the scraper and put it on a schedule (official Apify videos):

https://www.youtube.com/watch?v=1OW8gOqlZbY

https://www.youtube.com/watch?v=1jI7WcVQmwM

### FAQ

#### What is Google Maps, and what counts as a review here?

Google Maps is Google's mapping and local-business service, where visitors rate places from one to five stars and leave written reviews. This Actor returns those reviews for places you already have, one row each, including the reviews Google syndicates from partner sites such as Tripadvisor and Booking.

#### Does Google have an official reviews API, and why use this instead?

The Google Places API returns at most five reviews per place, with no owner replies, no reviewer sub-ratings and no partner reviews. This Actor returns the complete history with all 41 fields, and needs no Google Cloud project, billing account or API key.

#### How many reviews can I extract per place?

There is no cap. Set *Reviews per place* to `0` and the complete history comes back; places with tens of thousands of reviews stream through in bounded batches.

#### How do I find the places to feed in?

Paste Google Maps URLs, or use [Google Maps Scraper](https://apify.com/zen-studio/google-maps-scraper) to find places by search term and location and feed its `placeId` or `hexId` values straight in here.

#### Can I search for places from this Actor?

No, this one starts from places you already have. [Google Maps Scraper](https://apify.com/zen-studio/google-maps-scraper) does the discovery, and [Google Maps Directions & Routes API](https://apify.com/zen-studio/google-maps-directions-api) covers travel times between them.

#### How do I export the data?

JSON, CSV, Excel, XML or HTML from the run's Storage tab, or through the Apify API. JSON preserves the nested `ownerResponse`, `attributes` and `media` fields exactly; CSV flattens them.

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

The Actor collects only publicly visible information. Reviews contain personal data such as author names and profile links, so you are the controller under GDPR, CCPA and equivalent laws, and you need a lawful basis to process them. Using the output is your responsibility, and so is compliance with Google's terms.

#### Why is a partner review's rating not out of 5?

Syndicated reviews keep their source's scale. `ratingScale` tells you what the number is out of, so always read `rating` together with `ratingScale`.

#### What are `attributes` on a review?

The structured answers reviewers give alongside the stars: Food, Service and Atmosphere scores for restaurants, Rooms and Location for hotels, plus chips such as trip type, price per person, wait time and parking. Each entry carries the question Google asked, so an unfamiliar key still explains itself.

#### Does it return reviews in one language?

Reviews come back in the language they were written in. Where Google offers a translation it is included as `textTranslated`, with both language codes.

#### What happens if a place cannot be loaded?

It is skipped and reported in the run log, and the rest of the run continues. If a place's history comes back only partially, the run says so explicitly rather than presenting it as complete.

#### What is the free tier?

10 lifetime runs, 100 reviews per run, no credit card.

### More Zen Studio scrapers for maps & local data

- <img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/NWYsOG96fMDy8ycdf-actor-EgDf0I1X8lNhCes2E-kpZCa398Jg-baidu-maps-scraper-logo.png" width="16" height="16" style="vertical-align:middle;border-radius:3px"> **Baidu Maps 百度地图**
  - [Baidu Maps Scraper](https://apify.com/zen-studio/baidu-maps-scraper)
- <img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/NWYsOG96fMDy8ycdf-actor-y6Jak0F6vxdZew3b2-HljeTJZkhm-google-maps-directions-api-logo.png" width="16" height="16" style="vertical-align:middle;border-radius:3px"> **Google Maps**
  - [Google Maps Scraper](https://apify.com/zen-studio/google-maps-scraper)
  - [Google Maps Directions & Routes API](https://apify.com/zen-studio/google-maps-directions-api)
- <img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/NWYsOG96fMDy8ycdf-actor-5bSvAQKSK3LPq9OXb-AgVhcT1mQC-apple-maps-scraper-logo.png" width="16" height="16" style="vertical-align:middle;border-radius:3px"> **Apple Maps**
  - [Apple Maps Scraper](https://apify.com/zen-studio/apple-maps-scraper-pro)
  - [Apple Maps Directions & Route API](https://apify.com/zen-studio/apple-maps-directions-route-api)
- <img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/NWYsOG96fMDy8ycdf-actor-fRSgBvgbsRB4o7t30-UkaIbH1Yhq-yandex-maps-scraper-logo.png" width="16" height="16" style="vertical-align:middle;border-radius:3px"> **Yandex Maps Яндекс Карты**
  - [Yandex Maps Scraper](https://apify.com/zen-studio/yandex-maps-scraper)
  - [Yandex Maps Reviews Scraper](https://apify.com/zen-studio/yandex-maps-reviews-scraper)
- <img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/NWYsOG96fMDy8ycdf-actor-NBmcHCtkUEhA0DNP3-SrXbUedsVm-2gis-scraper-api-logo.png" width="16" height="16" style="vertical-align:middle;border-radius:3px"> **2GIS 2ГИС**
  - [2GIS Places Scraper](https://apify.com/zen-studio/2gis-places-scraper-api)
  - [2GIS Reviews Scraper](https://apify.com/zen-studio/2gis-reviews-scraper)
- <img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/NWYsOG96fMDy8ycdf-actor-F5g6zADHgY9XgfKpv-uUDQtIEe9Q-naver-place-maps-scraper-logo.png" width="16" height="16" style="vertical-align:middle;border-radius:3px"> **Naver Map & Place 네이버 지도**
  - [Naver Map & Place Scraper](https://apify.com/zen-studio/naver-place-scraper)
- <img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/NWYsOG96fMDy8ycdf-actor-NrhaGcIgNVy9fCV5b-mEAgbbceA8-bing-maps-scraper-logo.png" width="16" height="16" style="vertical-align:middle;border-radius:3px"> **Bing Maps**
  - [Bing Maps Scraper](https://apify.com/zen-studio/bing-maps-scraper)

### Support

- **Bugs**: Issues tab
- **Features**: Issues tab

### Legal Compliance

Extracts publicly available data. Users must comply with Google's terms and data protection regulations (GDPR, CCPA).

***

*Google Maps reviews scraper: unlimited reviews per place with ratings, review text, owner responses, reviewer sub-ratings, photos and videos, exported to CSV, JSON or Excel.*

# Actor input Schema

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

The places to scrape reviews for. Accepts <code>/maps/place/...</code>, <code>/maps?cid=...</code>, and shortened <code>maps.app.goo.gl</code> links. Paste the links themselves; a link to a hosted list of URLs is not supported.

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

Google Maps place IDs like <code>ChIJN1t\_tDeuEmsRUsoyG83frY4</code> (the <code>place\_id:</code> prefix is optional). Feature IDs like <code>0x89c25a1bd8d6f2f7:0xf28aad03aa6f0532</code> also work, and start fastest.

## `maxReviewsPerPlace` (type: `integer`):

Stop after this many reviews per place, or earlier if the place has fewer. Set <code>0</code> for the complete history; some places have tens of thousands. Each review is billed at $0.399 per 1,000.

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

<b>Newest first</b> orders by latest activity, so an edited review counts as recent; it is the one to use for monitoring. <b>Most relevant</b> matches what the Google Maps page shows by default. Combine <b>Lowest rating first</b> with a small <b>Reviews per place</b> to pull just the complaints.

## `newerThan` (type: `string`):

A date (<code>2026-08-01</code>) or a rolling period (<code>7 days</code>, <code>3 months</code>). A period is measured from the moment the run starts, so scheduled runs keep the same window instead of drifting. Compared against each review's latest activity, so a review edited inside the window is kept even if it was first posted years ago. Dates with no time zone are read as UTC; a month counts as 30 days. Leave blank for no cutoff. Setting this forces <b>Newest first</b>.

## `reviewsKeyword` (type: `string`):

Keep only reviews about a topic, e.g. <code>parking</code> or <code>breakfast</code>. Matches the way the search box on the Google Maps reviews panel does, so related wording is included, not just the exact word. Leave blank for all reviews.

## `reviewsOrigin` (type: `string`):

Places like hotels also show reviews syndicated from partner sites. Restrict to Google-native reviews if you only want first-party ratings.

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

Display language for place names, categories, and relative dates. Review text is always returned in the language it was written in.

## `countryCode` (type: `string`):

Two-letter country code used when loading each place, e.g. <code>de</code>. Affects regional labels only, not which reviews are returned.

## `parentActor` (type: `string`):

Optional integration label for orchestrated runs. It does not change scraping or output.

## Actor input object example

```json
{
  "startUrls": [],
  "placeIds": [
    "ChIJHQQciMZRqEcR2X4b8-vf5Bk"
  ],
  "maxReviewsPerPlace": 100,
  "reviewsSort": "mostRelevant",
  "reviewsOrigin": "all",
  "language": "en",
  "countryCode": "us",
  "parentActor": ""
}
```

# Actor output Schema

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

No description

## `summary` (type: `string`):

No description

## `places` (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": [],
    "placeIds": [
        "ChIJHQQciMZRqEcR2X4b8-vf5Bk"
    ],
    "maxReviewsPerPlace": 100,
    "reviewsSort": "mostRelevant",
    "newerThan": "",
    "reviewsKeyword": ""
};

// Run the Actor and wait for it to finish
const run = await client.actor("zen-studio/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": [],
    "placeIds": ["ChIJHQQciMZRqEcR2X4b8-vf5Bk"],
    "maxReviewsPerPlace": 100,
    "reviewsSort": "mostRelevant",
    "newerThan": "",
    "reviewsKeyword": "",
}

# Run the Actor and wait for it to finish
run = client.actor("zen-studio/google-maps-reviews-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 '{
  "startUrls": [],
  "placeIds": [
    "ChIJHQQciMZRqEcR2X4b8-vf5Bk"
  ],
  "maxReviewsPerPlace": 100,
  "reviewsSort": "mostRelevant",
  "newerThan": "",
  "reviewsKeyword": ""
}' |
apify call zen-studio/google-maps-reviews-scraper --silent --output-dataset

```

## MCP server setup

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