Google Maps Reviews Scraper

Extract public reviews from Google Maps place URLs with structured reviewer, rating, text, and place metadata.

Data fields

FieldTypeDescription
placeTitlestring | nullValue exported as placeTitle.
placeAddressstring | nullValue exported as placeAddress.
placeUrlstringValue exported as placeUrl.
placeDataIdstring | nullValue exported as placeDataId.
placeIdstring | nullValue exported as placeId.
placeRatingnumber | nullValue exported as placeRating.
placeReviewCountinteger | nullValue exported as placeReviewCount.
reviewIdstringValue exported as reviewId.

Input preview

startUrlsGoogle Maps place URLs *
maxItemsMaximum reviews
reviewsPerPlaceReviews per place
sortSort order
languageLanguage
countryCountry

API and agents

This actor can be run through Apify API, datasets, webhooks, schedules, and the official Apify MCP server.

How this actor works

See example inputs, outputs, API usage, and practical limits before running this actor on Apify.

Open Apify page

Extract Google Maps reviews from public place URLs and save clean review records to an Apify dataset. Use the Actor as a Google Maps reviews API or export Google Maps reviews for analysis.

The actor is built for Google Maps place review monitoring, local SEO research, reputation analysis, and customer-feedback collection. It accepts Google Maps place URLs, resolves the place, requests review pages, and outputs one dataset item per review.

Value proposition

Turn public Google Maps place reviews into structured datasets without manually opening each listing. Use it to monitor reputation, compare locations, audit customer feedback, and feed review data into BI, SEO, or support workflows.

Who is it for

This Google Maps Reviews Scraper is useful for local SEO teams, agencies, franchise operators, reputation managers, market researchers, and product teams that need structured public review data for places they monitor.

What data can you get

  • Scrapes Google Maps reviews for one or more places.
  • Supports result limits across the whole run and per place.
  • Supports review sort order: most relevant, newest, highest rating, or lowest rating.
  • Saves reviewer name, rating, review text, language, published time, reviewer profile URL, and place metadata.
  • Uses retries and proxy configuration for more stable Google Maps sessions.
  • Charges per saved review so small runs stay inexpensive.

Input

Provide one or more Google Maps place URLs in startUrls.

Recommended URL format is a full Google Maps place URL that contains the 0x...:0x... place data identifier, for example:

{
  "startUrls": [
    {
      "url": "https://www.google.com/maps/place/Empire+State+Building/@40.7484405,-73.9856644,17z/data=!4m8!3m7!1s0x89c259a9b3117469:0xd134e199a405a163!8m2!3d40.7484405!4d-73.9856644!9m1!1b1"
    }
  ],
  "maxItems": 50,
  "reviewsPerPlace": 50,
  "sort": "mostRelevant"
}

Input fields

  • startUrls — Google Maps place URLs to process.
  • maxItems — maximum number of review records saved across all places.
  • reviewsPerPlace — maximum number of reviews saved for each input place.
  • sort — review sort order: mostRelevant, newest, highestRating, or lowestRating.
  • language — Google UI language code used for requests. Default is en.
  • country — Google region code used for requests. Default is US.
  • pageSize — page size for fallback review requests.
  • requestDelayMillis — delay between review page requests.
  • maxRequestRetries — bounded retries for stale sessions or placeholder responses.
  • proxyConfiguration — Apify Proxy or custom proxy settings.

Output

Each dataset item is one Google Maps review.

Important output fields:

  • placeTitle — place name from the Google Maps URL/session.
  • placeAddress — place address when available.
  • placeUrl — canonical Google Maps place URL used by the run.
  • placeDataId — Google Maps internal place data identifier.
  • placeRating — overall place rating when available.
  • reviewId — unique review identifier.
  • reviewerName — public reviewer display name.
  • reviewerUrl — reviewer profile or reviews URL.
  • reviewerPhotoUrl — reviewer avatar URL when available.
  • rating — review rating from 1 to 5.
  • text — full review text.
  • publishedAt — review publish timestamp when available.
  • ownerResponse — owner response when available.
  • language — detected/source review language when available.
  • scrapedAt — timestamp when the actor saved the item.

Example output

{
  "placeTitle": "Empire State Building",
  "placeAddress": "Empire State Building, 20 W 34th St., New York, NY 10001",
  "placeDataId": "0x89c259a9b3117469:0xd134e199a405a163",
  "reviewerName": "A Google User",
  "rating": 5,
  "text": "Great view and a classic New York experience.",
  "publishedAt": "2026-05-29T01:25:39.874Z",
  "language": "en",
  "scrapedAt": "2026-07-09T15:58:28.897Z"
}

Example inputs

Scrape latest reviews for one place

{
  "startUrls": [{ "url": "https://www.google.com/maps/place/Empire+State+Building/@40.7484405,-73.9856644,17z/data=!4m8!3m7!1s0x89c259a9b3117469:0xd134e199a405a163!8m2!3d40.7484405!4d-73.9856644!9m1!1b1" }],
  "maxItems": 25,
  "reviewsPerPlace": 25,
  "sort": "newest"
}

Scrape a small sample from multiple places

{
  "startUrls": [
    { "url": "https://www.google.com/maps/place/Empire+State+Building/@40.7484405,-73.9856644,17z/data=!4m8!3m7!1s0x89c259a9b3117469:0xd134e199a405a163!8m2!3d40.7484405!4d-73.9856644!9m1!1b1" }
  ],
  "maxItems": 10,
  "reviewsPerPlace": 10,
  "sort": "mostRelevant"
}

API usage

You can run the actor from the Apify API or client libraries. Pass the same JSON input you would use in the Apify Console.

Apify CLI

apify call fetch_cat/google-maps-reviews-scraper --input-file input.json

Node.js

import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('fetch_cat/google-maps-reviews-scraper').call({
  startUrls: [{ url: 'https://www.google.com/maps/place/Empire+State+Building/@40.7484405,-73.9856644,17z/data=!4m8!3m7!1s0x89c259a9b3117469:0xd134e199a405a163' }],
  maxItems: 10
});
console.log(run.defaultDatasetId);

Python

from apify_client import ApifyClient

client = ApifyClient('YOUR_APIFY_TOKEN')
run = client.actor('fetch_cat/google-maps-reviews-scraper').call(run_input={
    'startUrls': [{'url': 'https://www.google.com/maps/place/Empire+State+Building/@40.7484405,-73.9856644,17z/data=!4m8!3m7!1s0x89c259a9b3117469:0xd134e199a405a163'}],
    'maxItems': 10,
})
print(run['defaultDatasetId'])

cURL

curl -X POST "https://api.apify.com/v2/acts/fetch_cat~google-maps-reviews-scraper/runs?token=$APIFY_TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{"startUrls":[{"url":"https://www.google.com/maps/place/Empire+State+Building/@40.7484405,-73.9856644,17z/data=!4m8!3m7!1s0x89c259a9b3117469:0xd134e199a405a163"}],"maxItems":10}'

After the run finishes, download results from the default dataset.

Slack + n8n research workflow

Use Google Maps Reviews Scraper as a research input when a teammate asks a bounded question in Slack. Connect an MCP-compatible assistant through the hosted Apify MCP server, using the same documented startUrls, maxItems, reviewsPerPlace, and sort inputs. Keep maxItems and reviewsPerPlace small for an interactive brief. The batch run writes structured results to its Apify dataset; use n8n or an Apify webhook to send a summary with source URLs to Slack, Sheets, Notion, or your CRM.

Research prompt: “Collect up to 30 reviews per listed location; compare rating and recurring feedback themes.”

This Actor returns data and does not install or operate a Slack bot. Review the dataset and source URLs before acting on an AI-generated summary. See the shared Slack research brief recipes with Apify MCP + n8n.

MCP

You can use this actor through the Apify MCP server by passing the same JSON input fields. Keep maxItems low for interactive assistant workflows and increase it for scheduled monitoring.

Remote MCP URL

Use the hosted Apify MCP endpoint and select this Actor through the MCP configurator for your client:

https://mcp.apify.com

For Claude-compatible clients, add the hosted server:

claude mcp add --transport http apify "https://mcp.apify.com"

Configure your MCP client with the hosted endpoint and OAuth or a bearer token as supported by that client:

{
  "mcpServers": {
    "apify": {
      "url": "https://mcp.apify.com"
    }
  }
}

Example prompts showing MCP usage

Prompt: "Run the Google Maps Reviews Scraper for this place URL and return the five newest negative reviews."

Prompt: "Monitor this Google Maps location and summarize recurring complaints from the latest 20 reviews."

Prompt: "Extract reviews for this place and group them by rating and language."

Legality

This actor extracts publicly available Google Maps review data. You are responsible for using the results lawfully, respecting applicable privacy rules, Google terms, and any compliance requirements for your jurisdiction or organization.

Tips for best results

  • Use full Google Maps place URLs whenever possible.
  • Keep maxItems modest for smoke tests.
  • Use newest when monitoring recent reputation changes.
  • Use Apify Proxy for cloud runs if direct requests are unstable from your network.
  • If a place URL resolves to a limited or ambiguous view, open the exact place in Google Maps and copy the full URL again.

Limitations

Google Maps changes its internal responses regularly. Some places, regions, or sessions can return limited data or placeholder responses. The actor uses retries and fallback requests, but a small number of URLs may still need a more specific Google Maps place URL.

Support

If a run does not return the reviews you expected, include these details when contacting support:

  • Apify run ID or run URL.
  • The full input JSON used for the run.
  • Expected output, such as the place and approximate number of reviews you expected.
  • Actual output, including dataset item count and any warning messages.
  • One reproducible public URL, preferably the full Google Maps place URL copied from Google Maps.

Development

npm install
npm run build
npm start

Common questions

Questions and answers reused from the canonical actor README.

Can I scrape all reviews for a place?

Set a high reviewsPerPlace and maxItems. Very large places can have many pages, so start with a smaller test first.

Why did a run return fewer reviews than expected?

Google may return fewer reviews for a session, place, language, sort order, or region. Check the input URL and try a full place URL with the internal 0x...:0x... identifier.

Does this require my own Google API key?

No. The actor does not require a Google Maps Platform API key.

Can I use proxies?

Yes. Use the proxyConfiguration input. Apify Proxy is enabled by default in the schema.