Protobuf Endpoints & Internal APIs
Google Maps Internal Protobuf API
Section titled “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
Section titled “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=1Returns: nested arrays parseable with JSON indexing — business names, ratings, review counts, categories, addresses, coordinates, thumbnails.
/maps/preview/place — Place Details
Section titled “/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
Section titled “/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
Section titled “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
Section titled “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.txtendpoint with “XHR1” signature
Data Available
Section titled “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
Section titled “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.