Google Maps Business Search & Reviews MCP Server
Pricing
from $0.49 / 1,000 results
Google Maps Business Search & Reviews MCP Server
Search Google Maps businesses or pull reviews for a specific place through one actor, usable as a normal run or as an MCP tool for AI agents. Returns ratings, contact info, hours and flattened reviews.
Pricing
from $0.49 / 1,000 results
Rating
0.0
(0)
Developer
vexaloom-labs
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
0
Monthly active users
5 days ago
Last modified
Categories
Features
Share
A single Google Maps actor that works two ways: as a normal Apify batch run, and as a native MCP (Model Context Protocol) server for AI agents. It reads Google Maps' public pages directly — no login, cookie, or API key.
- Search mode — find businesses by keyword and location with ratings, reviews, contact details, hours and coordinates. Sponsored placements are excluded.
- Details mode — pull the full record for one place by Google Maps URL or canonical Place ID.
- Reviews mode — flatten a place's reviews to one row per review, with place metadata repeated on every row.
- MCP server — the same three capabilities are exposed as typed tools in Apify Standby mode at
/mcp. - Empty fields are omitted — nothing is fabricated to fill a gap.
MCP server (Standby mode)
When the actor runs in Standby, it serves Streamable HTTP MCP at:
https://<actor-standby-url>/mcp
| Tool | What it returns |
|---|---|
search_businesses | Businesses for a keyword + location: name, category, rating, review count, address, phone, website, hours, coordinates and Google Maps URL. |
get_business_details | The full detail record for one place, addressed by place_url or place_id (ChIJ...). |
get_place_reviews | One flattened review per item plus the place summary; accepts place_url or place_id. |
Every tool accepts a language code (en, es, fr, de, it, pt, ja, ko, zh, ar, ru). Tool results are plain JSON objects with count, items/reviews and the resolved place/placeId where relevant. Errors return an error message instead of failing the session. Per-call tool caps are 100 businesses and 1,000 reviews; the batch modes keep the wider caps listed below.
Batch modes
| Mode | Reads | Emits |
|---|---|---|
search | Keyword + location result feed, then each place page | One recordType: "business" row per business |
details | One place page addressed by placeUrl or placeId | One recordType: "business" row |
reviews | A place's public reviews panel | One recordType: "review" row per review |
reviews mode needs either placeUrl or placeId; details accepts the same two alternatives. search needs searchQuery, with location strongly recommended.
Output per business
{"recordType": "business","index": 0,"name": "Joe's Pizza","categoryName": "Pizza restaurant","categories": ["Pizza restaurant"],"totalScore": 4.5,"reviewsCount": 1234,"ratingHistogram": {"5_star": 900, "4_star": 200, "3_star": 80, "2_star": 30, "1_star": 24},"address": "7 Carmine St, New York, NY 10014","plusCode": "Q256+VX New York, USA","phone": "+1 212-366-1182","phoneUnformatted": "+12123661182","website": "https://www.joespizzanyc.com","priceLevel": "$$","hours": [{"day": "Monday", "hours": "11 AM–10 PM"}],"additionalInfo": {"Service options": [{"Dine-in": true}]},"photosSample": ["https://lh3.googleusercontent.com/..."],"menuUrl": "https://www.joespizzanyc.com/menu","permanentlyClosed": false,"temporarilyClosed": false,"placeId": "ChIJ...","featureId": "0x...:0x...","location": {"lat": 40.7308314, "lng": -73.9973325},"googleMapsUrl": "https://www.google.com/maps/place/...","sourceUrl": "https://www.google.com/maps/place/...","scrapedAt": "2026-11-07T12:00:00+00:00"}
Other fields appear when Google publishes them: description, menuUrl, reserveTableUrl, reservationsUrl, orderOnlineUrl. Action links are emitted only when they resolve to a real destination — not a Google ad redirect or another Maps page.
Output per review
{"recordType": "review","order": 1,"placeId": "ChIJ...","featureId": "0x...:0x...","businessName": "Joe's Pizza","businessRating": 4.5,"businessReviewCount": 1234,"businessCategory": "Pizza restaurant","businessAddress": "7 Carmine St, New York, NY 10014","placeMetadata": {"placeUrl": "https://www.google.com/maps/place/...","placeId": "ChIJ...","businessName": "Joe's Pizza","businessRating": 4.5,"businessReviewCount": 1234},"reviewId": "ChZDSUhNMG9nS0VJQ0FnSUQ...","reviewerName": "John Smith","reviewerAvatarUrl": "https://lh3.googleusercontent.com/...","reviewerProfileUrl": "https://www.google.com/maps/contrib/...","reviewerTotalReviews": 87,"isLocalGuide": true,"rating": 5.0,"reviewText": "Best pizza in NYC...","reviewDateOriginal": "2 months ago","likesCount": 12,"reviewLanguage": "en","photosInReview": ["https://lh3.googleusercontent.com/..."],"ownerResponseText": "Thank you!","ownerResponseDate": "1 month ago","placeUrl": "https://www.google.com/maps/place/...","sourceUrl": "https://www.google.com/maps/place/...","scrapedAt": "2026-11-07T12:00:00+00:00"}
order is the 1-based position in this run's output. reviewDateOriginal preserves Google's own date text, which is often relative. Fields Google does not publish for a review are omitted.
Input
| Field | Type | Default | Description |
|---|---|---|---|
mode | string | search | search, details or reviews. |
searchQuery | string | – | What to search for, e.g. coffee shop (mode=search). |
location | string | – | City, region or address scope, e.g. New York, NY (mode=search). |
maxResults | integer | 20 | Maximum businesses, 1–500 (mode=search). Prefill uses 3. |
language | string | en | Google Maps interface language (11 supported codes). |
placeUrl | string | – | Google Maps place URL (mode=details or reviews). |
placeId | string | – | Canonical Place ID beginning with ChIJ (mode=details or reviews). |
maxReviews | integer | 50 | Maximum reviews, 1–200000 (mode=reviews). |
proxyConfiguration | object | – | Optional proxy. Runs start direct and use the automatic Apify proxy pool only after a real block. |
details and reviews accept either placeUrl or placeId, never both.
Examples
Search:
{"mode": "search","searchQuery": "pizza restaurant","location": "New York, NY","maxResults": 20}
Details:
{"mode": "details","placeId": "ChIJabtoT7hlwokRLECK0SW3_8I"}
Reviews:
{"mode": "reviews","placeUrl": "https://www.google.com/maps/place/Joe's+Pizza/@40.7308314,-73.9973325,17z","maxReviews": 100}
Search in another language:
{"mode": "search","searchQuery": "寿司","location": "東京 日本","maxResults": 20,"language": "ja"}
Use cases
- Market research: compare competitor ratings, pricing tier and location in one dataset.
- Site selection: scan an area's existing businesses before choosing a location.
- Review analysis: pull a place's reviews for sentiment or recurring complaint analysis.
- AI agent tooling: call search, details and reviews from an MCP-compatible agent.
- RAG pipelines: feed structured business and review records into a downstream model.
FAQ
Does this need Google login, cookies or an API key? No. All modes read public Google Maps pages.
Can it run as an MCP server? Yes. In Standby mode the actor serves /mcp with the three tools listed above, alongside normal batch runs.
Which mode should I use for one specific place? Use details for one full business row, or reviews when you need the review rows. Both accept a Maps URL or a ChIJ Place ID.
Why might a run return fewer records than requested? Google's own public result set and review surface set the ceiling. The actor returns everything it can observe and never pads the count.
Is a proxy required? No. Batch runs go direct first; if Google serves a challenge, the actor retries through the automatic Apify proxy pool. MCP tool calls are direct-only and return a retryable error object if Google serves a challenge. You can leave proxyConfiguration empty.
Why is a field missing from one record? Only fields Google publishes for that record are included. Empty values are removed rather than emitted as null.
Is this affiliated with Google? No. This is an independent actor reading public Google Maps pages.
Limits
- Google caps the public review panel's first window. The actor retries a bounded number of fresh renders and returns only reviews it actually observed; a very large
maxReviewscan therefore return fewer rows than requested. - Search results are the organic ranked window Google serves for the query, not an exhaustive crawl of every matching business. Sponsored placements are excluded.
- Google may occasionally serve a limited or challenge page. The actor reports that state instead of fabricating rows.
- Each run needs at least the default 2 GB of memory; smaller allocations can crash Chromium during multi-place searches.