MAPS

Google Maps Place Details API

Look up one Google Maps place by place id, CID, feature id or a pasted Maps link, and get its name, full address, coordinates, categories, rating, review count, phone, website and opening hours. Pairs with Google Maps Business Search, which returns the identifiers this accepts.

Part of: Google Maps Scraper API

googlemapsplaceslocalbusinessdetailsgeoscraping
Try it freeGet an API key

How to call it

Send one POST to api.upapi.io/google-maps-place.get with your key in the X-Api-Key header and the parameters below as a JSON body. Each call spends 4 weighted units of your monthly quota. The operation times out after 25 seconds. Identical requests are served from cache for 3600 seconds, unbilled.

endpoint
POST https://api.upapi.io/google-maps-place.get

Google Maps Place Details API reference

Request parameters

cid
string — Google customer id, the decimal identifier (e.g. "1868053941146338963").
url
string — A Google Maps link to the place, pasted as-is from the browser or the share sheet.
region
string — Two-letter country code biasing the response (e.g. "ca").
placeId
string — Google place id, as returned by Google Maps Business Search (e.g. "ChIJj61dQgK6j4AR4GeTYWZsKWw").
language
string — Language for the name and opening hours, as an ISO code (e.g. "en").
proxyUrl
string — Route the request through your own proxy (e.g. http://user:pass@host:port). Omit to use upAPI's pool.
featureId
string — Google feature id (e.g. "0x4cce05120f81812b:0x19eca9297f4bc693").

Response fields

cid
string — Google customer id — the decimal form of the feature id
city
string
name
stringrequired
phone
string — Phone as Google displays it locally
domain
string
rating
number
street
string
address
string
placeId
string — Google place id (ChIJ...)
website
string
category
string — Primary Google category
latitude
number
locality
string — Human "City, Region, Country" line
timezone
string
featureId
string — Google feature id (0x<cell>:0x<cid>); pass it to Google Maps Place Details
longitude
number
thumbnail
string
categories
array
countryCode
string
reviewCount
integer — Total Google reviews. Best-effort: Google serves this field inconsistently on the Maps endpoints — the same request returned it one hour and omitted it the next (measured 2026-08-17) — so treat null as 'not published on this response', not as zero reviews.
addressLines
array
openingHours
array — Per weekday, as [{"day": "Monday", "hours": ["8 AM-11 PM"]}]
resolvedFrom
stringrequired — Which input identifier this lookup was resolved from: placeId, cid, featureId or url
googleMapsUrl
string
phoneInternational
string — E.164 phone, when Google publishes one

Example request and response

The example response is generated from this operation’s published output schema — it shows the shape and field names, not values from a recorded call.

json — example request body
{
  "cid": "1868053941146338963",
  "region": "us",
  "language": "en"
}
json — example response shape
{
  "cid": "example",
  "city": "example",
  "name": "example",
  "phone": "example",
  "domain": "example",
  "rating": 1,
  "street": "example",
  "address": "example",
  "placeId": "example",
  "website": "example",
  "category": "example",
  "latitude": 43.65,
  "locality": "example",
  "timezone": "example",
  "featureId": "example",
  "longitude": -79.38,
  "thumbnail": "example",
  "categories": [
    "example"
  ],
  "countryCode": "US",
  "reviewCount": 1,
  "addressLines": [
    "example"
  ],
  "openingHours": [
    {}
  ],
  "resolvedFrom": "example",
  "googleMapsUrl": "example",
  "phoneInternational": "example"
}

Code snippets

cURL
curl
curl -X POST https://api.upapi.io/google-maps-place.get \
  -H 'Content-Type: application/json' \
  -H 'x-api-key: YOUR_API_KEY' \
  -d '{ "cid": "1868053941146338963", "region": "us", "language": "en" }'
JavaScript
javascript
const response = await fetch('https://api.upapi.io/google-maps-place.get', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'x-api-key': 'YOUR_API_KEY',
  },
  body: JSON.stringify({
  "cid": "1868053941146338963",
  "region": "us",
  "language": "en"
}),
});

const data = await response.json();
console.log(data);
Python
python
import requests

response = requests.post(
    'https://api.upapi.io/google-maps-place.get',
    headers={
        'Content-Type': 'application/json',
        'x-api-key': 'YOUR_API_KEY',
    },
    json={
  "cid": "1868053941146338963",
  "region": "us",
  "language": "en"
},
)

print(response.json())
Go
go
package main

import (
	"bytes"
	"encoding/json"
	"fmt"
	"io"
	"net/http"
)

func main() {
	payload := []byte(`{ "cid": "1868053941146338963", "region": "us", "language": "en" }`)

	req, _ := http.NewRequest("POST", "https://api.upapi.io/google-maps-place.get", bytes.NewBuffer(payload))
	req.Header.Set("Content-Type", "application/json")
	req.Header.Set("x-api-key", "YOUR_API_KEY")

	client := &http.Client{}
	resp, err := client.Do(req)
	if err != nil {
		panic(err)
	}
	defer resp.Body.Close()

	body, _ := io.ReadAll(resp.Body)
	var result map[string]any
	json.Unmarshal(body, &result)
	fmt.Println(result)
}
PHP
php
<?php

$payload = json_encode([
    'cid' => '1868053941146338963',
    'region' => 'us',
    'language' => 'en',
]);

$ch = curl_init('https://api.upapi.io/google-maps-place.get');
curl_setopt_array($ch, [
    CURLOPT_POST           => true,
    CURLOPT_POSTFIELDS     => $payload,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER     => [
        'Content-Type: application/json',
        'x-api-key: YOUR_API_KEY',
    ],
]);

$response = curl_exec($ch);
curl_close($ch);

$data = json_decode($response, true);
var_dump($data);
Ruby
ruby
require 'net/http'
require 'uri'
require 'json'

uri = URI('https://api.upapi.io/google-maps-place.get')
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = uri.scheme == 'https'

request = Net::HTTP::Post.new(uri.path)
request['Content-Type'] = 'application/json'
request['x-api-key'] = 'YOUR_API_KEY'
request.body = { "cid": "1868053941146338963", "region": "us", "language": "en" }.to_json

response = http.request(request)
puts JSON.parse(response.body)
Java
java
import okhttp3.*;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.Map;

OkHttpClient client = new OkHttpClient();
ObjectMapper mapper = new ObjectMapper();

String json = "{ \"cid\": \"1868053941146338963\", \"region\": \"us\", \"language\": \"en\" }";

RequestBody body = RequestBody.create(json, MediaType.get("application/json"));
Request request = new Request.Builder()
    .url("https://api.upapi.io/google-maps-place.get")
    .post(body)
    .addHeader("Content-Type", "application/json")
    .addHeader("x-api-key", "YOUR_API_KEY")
    .build();

try (Response response = client.newCall(request).execute()) {
    Map<?, ?> result = mapper.readValue(response.body().string(), Map.class);
    System.out.println(result);
}
C#
csharp
using System.Net.Http;
using System.Net.Http.Json;
using System.Text.Json;

using var client = new HttpClient();
client.DefaultRequestHeaders.Add("x-api-key", "YOUR_API_KEY");

var payload = JsonSerializer.Deserialize<object>("{ \"cid\": \"1868053941146338963\", \"region\": \"us\", \"language\": \"en\" }");
var response = await client.PostAsJsonAsync("https://api.upapi.io/google-maps-place.get", payload);

var result = await response.Content.ReadFromJsonAsync<JsonElement>();
Console.WriteLine(result);

Frequently asked questions

How much does the Google Maps Place Details API cost per call?

Each call spends 4 weighted units of your plan's monthly quota. Full pricing is at https://upapi.io/pricing.

How do I authenticate to the Google Maps Place Details API?

Send your key in the X-Api-Key header. A free guest key is available without creating an account.

Are Google Maps Place Details API responses cached?

Yes — identical requests are served from cache for 3600 seconds, and a cache hit is not billed.

More Maps APIs

Browse every Maps API →