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, orlowestRating.language— Google UI language code used for requests. Default isen.country— Google region code used for requests. Default isUS.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
maxItemsmodest for smoke tests. - Use
newestwhen 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