Place Details
Fetch enriched place details from Google Maps as structured JSON
The Place endpoint returns enriched details for a single Google Maps place: menu, popular times, user reviews, images, plus code, opening hours, service options, and more. It's designed to follow up a Search call: take a place_id or data_cid from local_results[] and get the full record back.
Endpoint
GET https://api.scrape.do/plugin/google/maps/placeRequest Parameters
Required
One of place_id or data_cid must be provided.
| Parameter | Type | Description |
|---|---|---|
token | string | Your Scrape.do API authentication token |
place_id | string | Place ID in ChIJ... format. Returned in local_results[].place_id from the Search endpoint |
data_cid | string | Numeric CID. Returned in local_results[].data_cid from the Search endpoint |
The Place endpoint does not accept data_id (the 0xHEX:0xHEX format). Use place_id or data_cid instead. The Reviews API takes data_id and place_id; each endpoint's identifier support differs.
Localization
| Parameter | Type | Default | Description |
|---|---|---|---|
hl | string | en | Host language for UI strings and localized fields (hours, reviews, descriptions) |
gl | string | us | Country perspective |
google_domain | string | google.com | Google domain to query |
Example Usage
Step 1: Get an Identifier from Search
Call the Search endpoint first and pick a result:
curl "https://api.scrape.do/plugin/google/maps/search?q=new+york+pizza&token=YOUR_TOKEN"Extract place_id or data_cid from any local_results[] item.
Step 2: Fetch Place Details
curl --location --request GET 'https://api.scrape.do/plugin/google/maps/place?token=<SDO-token>&place_id=ChIJqU-tg8KHToYRuCE5EsEyHZA'import requests
import json
token = "<SDO-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))const axios = require('axios');
const token = "<SDO-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);
});package main
import (
"fmt"
"io/ioutil"
"net/http"
)
func main() {
token := "<SDO-token>"
placeId := "ChIJqU-tg8KHToYRuCE5EsEyHZA"
url := fmt.Sprintf(
"https://api.scrape.do/plugin/google/maps/place?token=%s&place_id=%s",
token, placeId,
)
resp, err := http.Get(url)
if err != nil {
panic(err)
}
defer resp.Body.Close()
body, _ := ioutil.ReadAll(resp.Body)
fmt.Println(string(body))
}require 'net/http'
require 'json'
token = "<SDO-token>"
placeId = "ChIJqU-tg8KHToYRuCE5EsEyHZA"
url = URI("https://api.scrape.do/plugin/google/maps/place?token=#{token}&place_id=#{placeId}")
response = Net::HTTP.get(url)
puts JSON.pretty_generate(JSON.parse(response))import java.net.HttpURLConnection;
import java.net.URL;
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class GoogleMapsPlace {
public static void main(String[] args) throws Exception {
String token = "<SDO-token>";
String placeId = "ChIJqU-tg8KHToYRuCE5EsEyHZA";
String url = String.format(
"https://api.scrape.do/plugin/google/maps/place?token=%s&place_id=%s",
token, placeId
);
HttpURLConnection conn = (HttpURLConnection) new URL(url).openConnection();
conn.setRequestMethod("GET");
BufferedReader reader = new BufferedReader(
new InputStreamReader(conn.getInputStream())
);
String line;
StringBuilder response = new StringBuilder();
while ((line = reader.readLine()) != null) {
response.append(line);
}
reader.close();
System.out.println(response.toString());
}
}using System;
using System.Net.Http;
using System.Threading.Tasks;
class Program
{
static async Task Main()
{
string token = "<SDO-token>";
string placeId = "ChIJqU-tg8KHToYRuCE5EsEyHZA";
string url = $"https://api.scrape.do/plugin/google/maps/place?token={token}&place_id={placeId}";
using HttpClient client = new HttpClient();
string response = await client.GetStringAsync(url);
Console.WriteLine(response);
}
}<?php
$token = "<SDO-token>";
$placeId = "ChIJqU-tg8KHToYRuCE5EsEyHZA";
$url = "https://api.scrape.do/plugin/google/maps/place?token={$token}&place_id={$placeId}";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
echo json_encode(json_decode($response), JSON_PRETTY_PRINT);
?>Step 3: Receive Structured Details
{
"search_metadata": {
"google_maps_url": "https://www.google.com/maps/place/?cid=6324466594394968992&hl=en&gl=us"
},
"search_parameters": {
"engine": "google_maps",
"type": "place",
"data_cid": "6324466594394968992",
"google_domain": "google.com",
"hl": "en",
"gl": "us"
},
"place_results": {
"title": "New York Pizza Pasta & Subs",
"place_id": "ChIJFTdlBPAoTIYRoJO88NsExVc",
"data_id": "0x864c28f004653715:0x57c504dbf0bc93a0",
"data_cid": "6324466594394968992",
"provider_id": "/g/1tfddwc4",
"gps_coordinates": { "latitude": 32.9416, "longitude": -96.9862 },
"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",
"extracted_price": 10,
"type": ["Italian restaurant", "Bar", "Pizza delivery", "Pizza restaurant"],
"type_ids": ["italian_restaurant", "bar", "pizza_delivery_service", "pizza_restaurant"],
"address": "10009 N MacArthur Blvd # 121, Irving, TX 75063",
"plus_code": "W2RW+PV Irving, Texas",
"phone": "(972) 555-0100",
"website": "https://nypizzapasta.com",
"description": "Casual New York–style pizza, subs and pasta...",
"summary": "Casual pizzeria serving New York–style pies, subs and Italian entrees in a no-frills setting.",
"hours": "Open · Closes 10 PM",
"open_state": "Open · Closes 10 PM",
"service_options": { "dine_in": true, "takeout": true, "delivery": true },
"popular_times": {
"monday": [{ "hour": 11, "busyness": 30 }, { "hour": 12, "busyness": 65 }],
"tuesday": [{ "hour": 11, "busyness": 28 }, { "hour": 12, "busyness": 60 }]
},
"images": [
{ "title": "All", "thumbnail": "https://lh5.googleusercontent.com/..." },
{ "title": "Food & drink", "thumbnail": "https://lh5.googleusercontent.com/..." }
],
"menu": {
"link": "https://nypizzapasta.com/menu",
"source": "nypizzapasta.com"
},
"user_reviews": [
{
"summary": "\"Best New York–style pizza outside of NYC.\"",
"link": "https://www.google.com/maps/reviews/..."
}
],
"thumbnail": "https://lh5.googleusercontent.com/..."
}
}Response Structure
Top-Level Fields
| Field | Type | Description |
|---|---|---|
search_metadata | object | Canonical Google Maps URL for the place |
search_parameters | object | Echo of request parameters |
place_results | object | The enriched place record |
place_results Fields
All the fields from a Search result are preserved, plus a number of Place-only enrichments.
| Field | Type | Description |
|---|---|---|
title | string | Place name |
place_id | string | Google Place ID (ChIJ...) |
data_id | string | Internal data ID (0xHEX:0xHEX). Useful for the Reviews API |
data_cid | string | Numeric CID |
provider_id | string | Provider ID |
gps_coordinates | object | { latitude, longitude } |
rating | float | Average rating (1.0–5.0) |
reviews | int | Total review count |
rating_summary | array | Per-star breakdown: [{ stars: 5, amount: 805 }, ...] |
price | string | Price level or range |
extracted_price | int/null | First numeric price extracted |
type | string[] | All place types (array; the Search endpoint returns a single string in type) |
type_ids | string[] | All type IDs |
address | string | Full address |
plus_code | string | Open Location Code (plus code) |
phone | string | Phone number |
website | string | Website URL |
description | string | Short place description |
summary | string | Longer editorial summary (when available) |
hours | string | Current open/closed status |
open_state | string | Same as hours |
operating_hours | object | Weekly hours keyed by day |
service_options | object | Service options (dine_in, takeout, delivery, etc.) |
popular_times | object | Per-day busyness by hour: { monday: [{ hour, busyness }, ...], ... } |
images | array | Categorized image list: [{ title, thumbnail }, ...] |
menu | object | { link, source } pointing to the restaurant's menu (when available) |
user_reviews | array | Featured snippets with summary and link |
extensions | array | Categorized extension attributes |
unsupported_extensions | array | Extensions marked unavailable by Google |
thumbnail | string | Primary thumbnail URL |
Schema note: type is a string in Search's local_results[] but an array of strings in place_results. Check the array shape before indexing. The same is true for type_ids, always an array on both endpoints.
Error Responses
| Status | Error | Description |
|---|---|---|
400 | token is required | Missing API token |
400 | place_id or data_cid is required | Neither identifier provided. Also returned when data_id is sent (not accepted on this endpoint) |
500 | failed to parse place results | Parser error on the Google response. Retry once before investigating |
502 | request failed | Transient upstream failure. Safe to retry |
502 | failed to extract place data URL | Upstream shell did not contain the expected data URL. Retry |
Full Workflow Example
TOKEN="YOUR_TOKEN"
# 1. Search for a place
curl -s "https://api.scrape.do/plugin/google/maps/search?q=best+pizza+nyc&token=$TOKEN" \
| jq '.local_results[0] | {title, place_id, data_cid}'
# 2. Fetch enriched details for the top result
PLACE_ID="ChIJFTdlBPAoTIYRoJO88NsExVc"
curl -s "https://api.scrape.do/plugin/google/maps/place?place_id=$PLACE_ID&token=$TOKEN" \
| jq '{title: .place_results.title, summary: .place_results.summary, menu: .place_results.menu, popular_times_monday: .place_results.popular_times.monday}'
# 3. Get paginated reviews
DATA_ID=$(curl -s "https://api.scrape.do/plugin/google/maps/place?place_id=$PLACE_ID&token=$TOKEN" | jq -r '.place_results.data_id')
curl -s "https://api.scrape.do/plugin/google/maps/reviews?data_id=$DATA_ID&token=$TOKEN" \
| jq '{place: .place_info.title, topics: [.topics[].keyword], first_review: .reviews[0].snippet}'
