# Google Maps Scraper API - Scrape Places, Details, and Reviews at Scale > Source: https://scrape.do/products/ready-api/google-maps-scraper/ Scrape Google Maps places, enriched place details, and user reviews as structured JSON. Ratings, opening hours, menus, popular times, owner responses, and localized review details. No blocks, no CAPTCHAs. > Each successful request costs **10 credits**. **Structured Google Maps Data at City, Country, or Global Scale** Scrape Google Maps search results, enriched place details, and paginated user reviews. Ratings, addresses, opening hours, menus, popular times, user reviews, and guided review details, all as clean JSON. No protobuf parsing, no headless browsers. ![Structured Google Maps Data at City, Country, or Global Scale](/uploads/google-maps-api.svg) ## Highlights ### 240+ Countries, 150+ Languages, Precise Geo-Targeting - Target any country, language, or region with **240+ country codes, 150+ interface languages, 84 Google domains, and lat/lng/zoom pinning via the `ll` parameter**. - Get the exact Maps results your target audience sees, from a specific Shibuya neighborhood to a Chicago borough, with the right language and domain. ### Three Endpoints, One Consistent Schema - **Search** returns a paginated list of places with 25+ parsed fields each. **Place** returns enriched details: menu, popular times, user reviews, rating summary, plus code. **Reviews** returns paginated user reviews with guided details and owner responses. - All three share a consistent response shape, all take the same localization parameters, all identifiers chain cleanly from Search → Place → Reviews. ## How It Works ### Search Places Search Google Maps for any query and get a paginated list of places with ratings, addresses, opening hours, contact info, price levels, and more. Up to 20 results per page, 6 pages per query. ![Search Places](/uploads/google-maps-search-results.png) **cURL (API mode)** ```bash curl --location --request GET 'https://api.scrape.do/plugin/google/maps/search?token=&q=pizza+new+york' ``` **Python (API mode)** ```python import requests import json token = "" query = "pizza+new+york" url = f"https://api.scrape.do/plugin/google/maps/search?token={token}&q={query}" response = requests.request("GET", url) print(json.dumps(response.json(), indent=2)) ``` **Node.js (API mode)** ```javascript const axios = require('axios'); const token = ""; const query = "pizza+new+york"; const url = `https://api.scrape.do/plugin/google/maps/search?token=${token}&q=${query}`; axios.get(url) .then(response => { console.log(JSON.stringify(response.data, null, 2)); }) .catch(error => { console.error(error); }); ``` *(Go, Ruby, Java, C#, PHP examples are also available on the HTML version.)* **Example response** ```json { "search_parameters": { "engine": "google_maps", "type": "search", "q": "pizza new york", "google_domain": "google.com", "hl": "en", "gl": "us" }, "search_information": { "local_results_state": "Results for exact spelling", "query_displayed": "pizza new york" }, "local_results": [ { "position": 1, "title": "Joe's Pizza", "place_id": "ChIJLSsVbGBZwokRR0LlGBSvMOI", "data_id": "0x89c259606c152b2d:0xe230af1b18e542a7", "data_cid": "16313085445244584615", "gps_coordinates": { "latitude": 40.7306458, "longitude": -73.9969874 }, "rating": 4.4, "reviews": 12847, "price": "$", "type": "Pizza restaurant", "address": "7 Carmine St, New York, NY 10014", "open_state": "Open · Closes 4 AM", "operating_hours": { "monday": "10 AM–4 AM", "friday": "10 AM–5 AM", "saturday": "10 AM–5 AM" }, "phone": "(212) 366-1182", "website": "https://www.joespizzanyc.com/", "service_options": { "dine_in": true, "takeout": true } }, { "position": 2, "title": "NY Pizza Suprema", "place_id": "ChIJYQ4j7YhZwokRGFmzjqS1Qxw", "rating": 4.6, "reviews": 8234, "price": "$$", "address": "413 8th Ave, New York, NY 10001" } ] } ``` ### Place Details Fetch enriched details for a specific place. Menu, popular times, user reviews, images, rating summary, plus code, and editorial summary. Use place_id or data_cid from a search result. ![Place Details](/uploads/google-maps-place-details.png) **cURL (API mode)** ```bash curl --location --request GET 'https://api.scrape.do/plugin/google/maps/place?token=&place_id=ChIJqU-tg8KHToYRuCE5EsEyHZA' ``` **Python (API mode)** ```python import requests import json token = "" placeId = "ChIJqU-tg8KHToYRuCE5EsEyHZA" url = f"https://api.scrape.do/plugin/google/maps/place?token={token}&place_id={placeId}" response = requests.request("GET", url) print(json.dumps(response.json(), indent=2)) ``` **Node.js (API mode)** ```javascript const axios = require('axios'); const token = ""; const placeId = "ChIJqU-tg8KHToYRuCE5EsEyHZA"; const url = `https://api.scrape.do/plugin/google/maps/place?token=${token}&place_id=${placeId}`; axios.get(url) .then(response => { console.log(JSON.stringify(response.data, null, 2)); }) .catch(error => { console.error(error); }); ``` *(Go, Ruby, Java, C#, PHP examples are also available on the HTML version.)* **Example response** ```json { "search_parameters": { "engine": "google_maps", "type": "place", "place_id": "ChIJqU-tg8KHToYRuCE5EsEyHZA" }, "place_results": { "title": "New York Pizza Pasta & Subs", "place_id": "ChIJFTdlBPAoTIYRoJO88NsExVc", "data_id": "0x864c28f004653715:0x57c504dbf0bc93a0", "rating": 4.6, "reviews": 1031, "rating_summary": [ { "stars": 5, "amount": 805 }, { "stars": 4, "amount": 123 }, { "stars": 3, "amount": 50 }, { "stars": 2, "amount": 15 }, { "stars": 1, "amount": 38 } ], "price": "$10–20", "type": ["Italian restaurant", "Pizza restaurant"], "address": "10009 N MacArthur Blvd # 121, Irving, TX 75063", "plus_code": "W2RW+PV Irving, Texas", "summary": "Casual pizzeria serving New York-style pies, subs and Italian entrees.", "popular_times": { "friday": [ { "hour": 11, "busyness": 30 }, { "hour": 12, "busyness": 65 }, { "hour": 19, "busyness": 95 } ] }, "menu": { "link": "https://nypizzapasta.com/menu", "source": "nypizzapasta.com" }, "images": [ { "title": "All", "thumbnail": "https://lh5.googleusercontent.com/..." }, { "title": "Food & drink", "thumbnail": "https://lh5.googleusercontent.com/..." } ] } } ``` ### Reviews Fetch paginated user reviews for a specific place with ratings, review text, images, likes, guided review details (food/service/atmosphere for restaurants, bed/location/rooms for hotels), owner responses, and third-party sources (Priceline, Tripadvisor). ![Reviews](/uploads/google-maps-reviews.png) **cURL (API mode)** ```bash curl --location --request GET 'https://api.scrape.do/plugin/google/maps/reviews?token=&data_id=0x864c28f004653715:0x57c504dbf0bc93a0' ``` **Python (API mode)** ```python import requests import json token = "" dataId = "0x864c28f004653715:0x57c504dbf0bc93a0" url = f"https://api.scrape.do/plugin/google/maps/reviews?token={token}&data_id={dataId}" response = requests.request("GET", url) print(json.dumps(response.json(), indent=2)) ``` **Node.js (API mode)** ```javascript const axios = require('axios'); const token = ""; const dataId = "0x864c28f004653715:0x57c504dbf0bc93a0"; const url = `https://api.scrape.do/plugin/google/maps/reviews?token=${token}&data_id=${dataId}`; axios.get(url) .then(response => { console.log(JSON.stringify(response.data, null, 2)); }) .catch(error => { console.error(error); }); ``` *(Go, Ruby, Java, C#, PHP examples are also available on the HTML version.)* **Example response** ```json { "search_parameters": { "engine": "google_maps_reviews", "data_id": "0x864c28f004653715:0x57c504dbf0bc93a0", "hl": "en", "num": 10 }, "place_info": { "title": "New York Pizza Pasta & Subs", "address": "10009 N MacArthur Blvd # 121, Irving, TX 75063", "rating": 4.6, "reviews": 1031 }, "topics": [ { "keyword": "ny style pizza", "mentions": 41, "id": "EPwqTcuhb0c" }, { "keyword": "stromboli", "mentions": 21, "id": "AB8BSPrzZX4" } ], "reviews": [ { "position": 1, "rating": 5, "date": "2 months ago", "iso_date": "2026-02-18T14:40:45Z", "snippet": "Stopped into NY Pizza Pasta & Subs - solid crust, generous toppings.", "user": { "name": "Al Phillips", "local_guide": true, "reviews": 82, "photos": 150 }, "details": { "food": 5, "service": 5, "atmosphere": 5, "order_type": "Dine in" }, "response": { "date": "2 months ago", "snippet": "Al, your review truly captures what we strive for..." } } ], "pagination": { "next_page_token": "CAESY0NB..." } } ``` ## FAQ ### What's the difference between Search, Place, and Reviews? Search returns a paginated list of places matching a query, with ratings, addresses, opening hours, and contact info. Place fetches an enriched record for one specific place, including menu, popular times, user reviews, rating summary, plus code, and editorial summary. Reviews returns paginated user reviews with full text, guided details (food/service ratings), images, and owner responses. Identifiers (place_id, data_id, data_cid) chain cleanly between them. Pick a result from Search, pass its ID to Place or Reviews. ### How does this differ from scraping Google Maps myself? Google Maps data isn't in the initial HTML. It loads through internal APIs that return protobuf-over-JSON. Scraping it directly means reverse-engineering those endpoints, managing sessions, handling tile-based pagination, and staying ahead of internal API changes. This API does all of that and returns clean JSON. You send a query, you get back structured data. No browser automation, no protobuf parsers, no HTML scraping. ### Can I get results for a specific city or neighborhood? Yes. The `ll` parameter pins a Maps search to a specific latitude, longitude, and zoom level. `@40.7580,-73.9855,15z` locks results to Times Square, New York. Without `ll`, Google uses IP-based geolocation from the proxy network. You can also combine `ll` with `gl`, `hl`, and `google_domain` for coherent regional targeting. ### What languages does this support? All 150+ Google interface languages via the `hl` parameter, from major world languages (en, tr, de, ja, ar) to regional dialects. When `hl` is non-English, localized fields come back in the requested language. `operating_hours` day names, guided review `details` keys (`cuisine` instead of `food` for `hl=fr`), and review `extracted_snippet` all return in the requested language. Reviews also include both the original text and a translation inline. ### How do I paginate through search results? Use `start=20`, `start=40`, etc. Each page carries up to 20 results. Google Maps tops out at about 120 results per query (6 pages). `position` values adjust across pages, so page 2 starts at position 21 and page 3 at 41. ### How do I paginate through reviews? First-page response includes a `pagination.next_page_token`. Pass that as `next_page_token` on the next request. Continue until `pagination` is absent. That's the last page. Default page size is 10 reviews, max 20 via the `num` parameter. The first page also carries `place_info` and a `topics` array; subsequent pages omit those. ### What if I get a 502 "no results" error on a page I know has data? These are transient. Google occasionally returns an empty data shell. Retry the same request once and it almost always succeeds. Only treat repeated failures as a real "no results" state. ### Can I filter reviews by topic or keyword? Yes. The first-page response includes a `topics[]` array with keywords Google identified across the place's reviews. Pass a topic's `id` as `topic_id` on a follow-up request to filter reviews to just that topic. Separately, `query=breakfast` filters reviews to those matching a keyword. The two parameters are mutually exclusive. ### Do I need Google Maps Search before I can get reviews? Not strictly. The Reviews endpoint takes any valid `data_id` or `place_id`, regardless of source. If you already have IDs from Google's own Places API, from Maps URLs you've scraped, or from a legacy database, you can call Reviews directly. The Search → Reviews flow is the common path, not a requirement. ### Are third-party reviews (Priceline, Tripadvisor) included? For hotels, yes. Reviews from Google appear alongside reviews aggregated from Priceline, Tripadvisor, Booking.com, and Trip.com. Check the `source` field on each review. Third-party reviews have limited user profile data (no `contributor_id`, no `local_guide`) but their ratings, text, and dates come through intact. ### Where can I find the full API reference? The [Google Maps API documentation](/documentation/google-scraper-api/maps/) covers all three endpoints, with full parameter tables, response schemas, supported Google domains, localization details, and filtering/sorting deep-dives for reviews.