Google Maps Scraper API

Google Maps Scraper API

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.

START SCRAPING FOR FREE

Start scraping today with 1000 free credits. No Credit Card Required

Google Maps Scraper API
240+ Countries, 150+ Languages, Precise Geo-Targeting

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

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

Select your endpoint:
1

Select a Target

Search Places screenshot
2

Send API Request

import requests
import json

token = "<SDO-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))
3

Get Structured JSON

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

Scrape.do has been a game-changer with powerful scraping tools, but what truly sets them apart is their excellent customer support.

user avatar
Rogerio C.

CTO

timertimer
capterra best customer support
< 5 min

Average Response Time

No tickets connect with expert engineers.

like changelike change
99.98%

Success rate

hierarchyhierarchy
110 Million

Proxies

trellotrello
+40%

Faster gateway than the closest competitor.

  • Trustpilot Reviews
  • G2 Reviews
  • Capterra Reviews
  • scrapedo capterra most recommended
  • scrapedo capterra best ease of use
  • scrapedo capterra best value
  • capterra best customer support
  • scrapedo capterra front runners

Reliable, Scalable,Unstoppable Web Scraping

START SCRAPING FOR FREE

Frequently Asked Questions

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

The Google Maps API documentation covers all three endpoints, with full parameter tables, response schemas, supported Google domains, localization details, and filtering/sorting deep-dives for reviews.