Google Maps Reviews Scraper avatar

Google Maps Reviews Scraper

Pricing

from $0.60 / 1,000 review extracteds

Go to Apify Store
Google Maps Reviews Scraper

Google Maps Reviews Scraper

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

Pricing

from $0.60 / 1,000 review extracteds

Rating

0.0

(0)

Developer

Hanna Nosova

Hanna Nosova

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

8 days ago

Last modified

Share

Extract Google Maps reviews from public place URLs and save clean review records to an Apify dataset.

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"
}

Pricing

This actor uses pay-per-event pricing.

EventStore tierPrice
Run startAll tiers$0.005 per run
Review extractedFree$0.00115 per saved review
Review extractedBronze$0.001 per saved review
Review extractedSilver$0.00078 per saved review
Review extractedGold$0.0006 per saved review
Review extractedPlatinum$0.00048 per saved review
Review extractedDiamond$0.0004 per saved review

You can control cost with maxItems and reviewsPerPlace. For example, set maxItems to 100 to stop after 100 reviews even if the input places have many more reviews.

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.

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 with the actual actor slug:

https://mcp.apify.com/?actors=fetch_cat/google-maps-reviews-scraper

For Claude-compatible clients, add the remote server with the actor slug:

$claude mcp add --transport http apify "https://mcp.apify.com/?actors=fetch_cat/google-maps-reviews-scraper"

Configure your MCP client to send your Apify API token as a bearer token. Example configuration for clients that support remote HTTP MCP servers:

{
"mcpServers": {
"apify": {
"url": "https://mcp.apify.com/?actors=fetch_cat/google-maps-reviews-scraper",
"headers": {
"Authorization": "Bearer ${APIFY_TOKEN}"
}
}
}
}

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.

FAQ

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.

Development

npm install
npm run build
npm start