Skip to main content

Protobuf Endpoints & Internal APIs

Google Maps Internal Protobuf API

Google Maps communicates with its backend using Protocol Buffer (protobuf) encoding over HTTP. Several internal endpoints have been documented.

tbm=map Search Endpoint

Adding tbm=map to a Google search returns protobuf-over-JSON instead of HTML. Single HTTP request, no browser rendering needed.

https://www.google.com/search?tbm=map&hl=en&q=restaurants+in+berlin&tch=1&ech=1

Returns: nested arrays parseable with JSON indexing — business names, ratings, review counts, categories, addresses, coordinates, thumbnails.

/maps/preview/place — Place Details

Returns protobuf-over-JSON place details via a pb parameter with feature ID embedded. More stable than HTML scraping — follows internal schema, not frontend layout.

/maps/vt/pb — Tile Endpoint

Map tile requests containing ~730 fields across ~125 protobuf messages. Uses !-separated text-based protobuf with type characters (s, i, d, f, j, u, v, x, y, g, h, n, o, e, z, B, b, m).

window.APP_INITIALIZATION_STATE

Google Maps embeds data in window.APP_INITIALIZATION_STATE in the HTML response. No headless browser needed:

JSON.parse(window.APP_INITIALIZATION_STATE[3][2].split("'\n")[1])

Source: r/webscraping

Protobuf Pagination Details

  • PSI parameter: stored in window.APP_OPTIONS[11], changes after each page reload — no static URL construction possible
  • Altitude formula: altitude = (27.3611 * 6371010 * 768 * cos(lat)) / (2^zoom * 256)
  • Pagination: !7i20 = 20 results/page, !8i[offset] = offset (increments of 20)
  • Responses: served through f.txt endpoint with "XHR1" signature

Data Available

Potentially everything visible in the Maps UI: full review text with timestamps, all photos, Q&A, popular times histograms, wait times, related places, owner responses — far exceeding the official API's 5-review limit.

Fragility Warning

Google's cryptographic constants rotate continuously. SearchGuard makes "reverse-engineered bypasses obsolete within minutes." One Reddit user reported successfully building a pure HTTP/protobuf scraper that reduced costs from $50K/mo to $1K/mo — but maintenance is constant.