Skip to content
Scrappa Get API key
Google Search API 1 credit/request

Google Search Place Details

GET https://scrappa.co/api/search-advanced/place?detail_url=https%3A%2F%2Fwww.google.com%2Fsearchviewer%2F10%3Fgl%3Dpl%26hl%3Dpl%26output%3Dsearch%26svid%3DCAwSHRIbCgNwdnESFENnMHZaeTh4TVdacmNIaGZjREp0GAo

Resolve a Google Search Advanced local result detail_url (a Google /searchviewer link) into structured place details: name, category, address, phone, website, current opening state, Knowledge Graph ID (kgmid), Maps business_id (0x...:0x...), place_id (ChIJ...) and CID. Google answers anonymous /searchviewer requests with 429 or a /sorry page; Scrappa handles that rate limiting on its side. Pass the detail_url exactly as Search Advanced returned it, or only its svid value. hl and gl default to the values in the link. Each successful lookup is billed as one request; Search Advanced never resolves detail_url on its own. When Google blocks every attempt, the response is an unbilled 503 with Retry-After. A link that no longer points to a place returns an unbilled 404. business_id and place_id work with the Google Maps business details, reviews and photos endpoints.

Google Search Place Details 1 credit/request

Endpoint

Request preview
GET
https://scrappa.co/api/search-advanced/place?detail_url=https%3A%2F%2Fwww.google.com%2Fsearchviewer%2F10%3Fgl%3Dpl%26hl%3Dpl%26output%3Dsearch%26svid%3DCAwSHRIbCgNwdnESFENnMHZaeTh4TVdacmNIaGZjREp0GAo
Auth header
x-api-key
Cost
1 credit/request
Response preview
200 OK
{
    "place": {
        "kgmid": "/g/11fkpx_p2m",
        "title": "WARK Group - producent przyczep",
        "type": "Producent przyczep",
        "address": "Topolowa 1, 62-002 Jelonek",
        "phone": "61 250 07 07",
        "open_state": "Otwarte \u00b7 Zamkni\u0119cie: 16:00",
        "website": "https://www.warkgroup.com/",
        "business_id": "0x470443e14bc7554b:0xbadfa60ad7b611e7",
        "place_id": "ChIJS1XHS-FDBEcR5xG21wqm37o",
        "cid": "13465663976359989735",
        "maps_link": "https://www.google.com/maps/place/data=!4m2!3m1!1s0x470443e14bc7554b:0xbadfa60ad7b611e7"
    },
...

Parameters

Start with the required fields, then add optional filters only when your use case needs them.

Runnable path

This endpoint has no required query parameters.

4 optional filters available.

detail_url string Optional
Open example

local_results.places[].detail_url from Search Advanced. Required unless svid is set.

Example value https://www.google.com/searchviewer/10?gl=pl&hl=pl&output=search&svid=CAwSHRIbCgNwdnESFENnMHZaeTh4TVdacmNIaGZjREp0GAo
svid string Optional

The svid parameter of a /searchviewer URL. Alternative to detail_url.

Example value example
hl string Optional

Language of the returned texts (e.g. en, pl). Defaults to the hl in detail_url.

Example value en
gl string Optional

Country code (e.g. us, pl). Defaults to the gl in detail_url.

Example value us

Request Examples

PHP
<?php

$curl = curl_init();

curl_setopt_array($curl, [
    CURLOPT_URL => "https://scrappa.co/api/search-advanced/place?detail_url=https%3A%2F%2Fwww.google.com%2Fsearchviewer%2F10%3Fgl%3Dpl%26hl%3Dpl%26output%3Dsearch%26svid%3DCAwSHRIbCgNwdnESFENnMHZaeTh4TVdacmNIaGZjREp0GAo",
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_ENCODING => "",
    CURLOPT_MAXREDIRS => 10,
    CURLOPT_TIMEOUT => 30,
    CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
    CURLOPT_CUSTOMREQUEST => "GET",
    CURLOPT_HTTPHEADER => [
        "x-api-key: YOUR_API_KEY_HERE"
    ],
]);

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
    echo "cURL Error #:" . $err;
} else {
    echo $response;
}
PHP
<?php

use Illuminate\Support\Facades\Http;

$response = Http::timeout(30)
    ->withHeaders(['x-api-key' => 'YOUR_API_KEY_HERE'])
    ->get('https://scrappa.co/api/search-advanced/place?detail_url=https%3A%2F%2Fwww.google.com%2Fsearchviewer%2F10%3Fgl%3Dpl%26hl%3Dpl%26output%3Dsearch%26svid%3DCAwSHRIbCgNwdnESFENnMHZaeTh4TVdacmNIaGZjREp0GAo');

if ($response->successful()) {
    echo $response->body();
} else {
    echo "Error: " . $response->status();
}
JavaScript
const options = {
    method: 'GET',
    headers: {
        'x-api-key': 'YOUR_API_KEY_HERE'
    }
};

fetch('https://scrappa.co/api/search-advanced/place?detail_url=https%3A%2F%2Fwww.google.com%2Fsearchviewer%2F10%3Fgl%3Dpl%26hl%3Dpl%26output%3Dsearch%26svid%3DCAwSHRIbCgNwdnESFENnMHZaeTh4TVdacmNIaGZjREp0GAo', options)
    .then(response => {
        if (!response.ok) {
            throw new Error(`HTTP error! status: ${response.status}`);
        }
        return response.text();
    })
    .then(data => console.log(data))
    .catch(error => console.error('Error:', error));
JavaScript
const axios = require('axios');

const options = {
    method: 'GET',
    url: 'https://scrappa.co/api/search-advanced/place?detail_url=https%3A%2F%2Fwww.google.com%2Fsearchviewer%2F10%3Fgl%3Dpl%26hl%3Dpl%26output%3Dsearch%26svid%3DCAwSHRIbCgNwdnESFENnMHZaeTh4TVdacmNIaGZjREp0GAo',
    headers: {
        x-api-key: 'YOUR_API_KEY_HERE',
    }
};

try {
    const response = await axios(options);
    console.log(response.data);
} catch (error) {
    console.error('Error:', error.message);
}
Ruby
require 'net/http'
require 'uri'

uri = URI.parse("https://scrappa.co/api/search-advanced/place?detail_url=https%3A%2F%2Fwww.google.com%2Fsearchviewer%2F10%3Fgl%3Dpl%26hl%3Dpl%26output%3Dsearch%26svid%3DCAwSHRIbCgNwdnESFENnMHZaeTh4TVdacmNIaGZjREp0GAo")
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = uri.scheme == 'https'

request = Net::HTTP::Get.new(uri.request_uri)
request['x-api-key'] = 'YOUR_API_KEY_HERE'

begin
    response = http.request(request)
    puts response.body
rescue => e
    puts "Error: #{e.message}"
end
Python
import http.client
import json

conn = http.client.HTTPSConnection("scrappa.co")

headers = {
    'x-api-key': 'YOUR_API_KEY_HERE',
}

try:
    conn.request("GET", "/api/search-advanced/place?detail_url=https%3A%2F%2Fwww.google.com%2Fsearchviewer%2F10%3Fgl%3Dpl%26hl%3Dpl%26output%3Dsearch%26svid%3DCAwSHRIbCgNwdnESFENnMHZaeTh4TVdacmNIaGZjREp0GAo", headers=headers)
    res = conn.getresponse()
    data = res.read()
    print(data.decode("utf-8"))
except Exception as e:
    print(f"Error: {e}")
finally:
    conn.close()
Python
import requests

headers = {
    'x-api-key': 'YOUR_API_KEY_HERE',
}

try:
    response = requests.get('https://scrappa.co/api/search-advanced/place?detail_url=https%3A%2F%2Fwww.google.com%2Fsearchviewer%2F10%3Fgl%3Dpl%26hl%3Dpl%26output%3Dsearch%26svid%3DCAwSHRIbCgNwdnESFENnMHZaeTh4TVdacmNIaGZjREp0GAo', headers=headers)
    response.raise_for_status()
    print(response.text)
except requests.exceptions.RequestException as e:
    print(f"Error: {e}")
Java
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
import java.io.IOException;

public class ApiExample {
    public static void main(String[] args) {
        OkHttpClient client = new OkHttpClient();

        Request request = new Request.Builder()
            .url("https://scrappa.co/api/search-advanced/place?detail_url=https%3A%2F%2Fwww.google.com%2Fsearchviewer%2F10%3Fgl%3Dpl%26hl%3Dpl%26output%3Dsearch%26svid%3DCAwSHRIbCgNwdnESFENnMHZaeTh4TVdacmNIaGZjREp0GAo")
        .addHeader("x-api-key", "YOUR_API_KEY_HERE")
            .build();

        try (Response response = client.newCall(request).execute()) {
            if (response.isSuccessful()) {
                System.out.println(response.body().string());
            } else {
                System.out.println("Error: " + response.code());
            }
        } catch (IOException e) {
            System.out.println("Error: " + e.getMessage());
        }
    }
}
Go
package main

import (
    "fmt"
    "net/http"
    "io/ioutil"
)

func main() {
    client := &http.Client{}
    req, err := http.NewRequest("GET", "https://scrappa.co/api/search-advanced/place?detail_url=https%3A%2F%2Fwww.google.com%2Fsearchviewer%2F10%3Fgl%3Dpl%26hl%3Dpl%26output%3Dsearch%26svid%3DCAwSHRIbCgNwdnESFENnMHZaeTh4TVdacmNIaGZjREp0GAo", nil)
    if err != nil {
        fmt.Println("Error creating request:", err)
        return
    }
    req.Header.Set("x-api-key", "YOUR_API_KEY_HERE")

    resp, err := client.Do(req)
    if err != nil {
        fmt.Println("Error making request:", err)
        return
    }
    defer resp.Body.Close()

    body, err := ioutil.ReadAll(resp.Body)
    if err != nil {
        fmt.Println("Error reading response:", err)
        return
    }

    fmt.Println(string(body))
}
Terminal
#!/bin/bash

curl -X GET \
    -H "x-api-key: YOUR_API_KEY_HERE" \
    "https://scrappa.co/api/search-advanced/place?detail_url=https%3A%2F%2Fwww.google.com%2Fsearchviewer%2F10%3Fgl%3Dpl%26hl%3Dpl%26output%3Dsearch%26svid%3DCAwSHRIbCgNwdnESFENnMHZaeTh4TVdacmNIaGZjREp0GAo"
C#
using System;
using System.Net.Http;
using System.Threading.Tasks;

class Program
{
    static async Task Main()
    {
        using var client = new HttpClient();
        client.DefaultRequestHeaders.Add("x-api-key", "YOUR_API_KEY_HERE");

        try
        {
            var response = await client.SendAsync(new HttpRequestMessage(HttpMethod.Get, "https://scrappa.co/api/search-advanced/place?detail_url=https%3A%2F%2Fwww.google.com%2Fsearchviewer%2F10%3Fgl%3Dpl%26hl%3Dpl%26output%3Dsearch%26svid%3DCAwSHRIbCgNwdnESFENnMHZaeTh4TVdacmNIaGZjREp0GAo"));
            var content = await response.Content.ReadAsStringAsync();
            Console.WriteLine(content);
        }
        catch (Exception ex)
        {
            Console.WriteLine($"Error: {ex.Message}");
        }
    }
}
TypeScript
import axios from 'axios';

async function run(): Promise<void> {
    try {
        const response = await axios({
            method: 'GET',
            url: 'https://scrappa.co/api/search-advanced/place?detail_url=https%3A%2F%2Fwww.google.com%2Fsearchviewer%2F10%3Fgl%3Dpl%26hl%3Dpl%26output%3Dsearch%26svid%3DCAwSHRIbCgNwdnESFENnMHZaeTh4TVdacmNIaGZjREp0GAo',
            headers: {
        'x-api-key': 'YOUR_API_KEY_HERE',
            },
        });

        console.log(response.data);
    } catch (error) {
        console.error('Error:', error);
    }
}

void run();
RUST
use reqwest::Client;

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let client = Client::new();

    let response = client
        .get("https://scrappa.co/api/search-advanced/place?detail_url=https%3A%2F%2Fwww.google.com%2Fsearchviewer%2F10%3Fgl%3Dpl%26hl%3Dpl%26output%3Dsearch%26svid%3DCAwSHRIbCgNwdnESFENnMHZaeTh4TVdacmNIaGZjREp0GAo")
        .header("x-api-key", "YOUR_API_KEY_HERE")
        .send()
        .await?;

    println!("{}", response.text().await?);

    Ok(())
}

Response Schema

Example response fields are illustrative; inspect the JSON before integrating.

Example response fields

Scan these fields before integrating.

place detail_url
JSON Response
200 OK
{
    "place": {
        "kgmid": "/g/11fkpx_p2m",
        "title": "WARK Group - producent przyczep",
        "type": "Producent przyczep",
        "address": "Topolowa 1, 62-002 Jelonek",
        "phone": "61 250 07 07",
        "open_state": "Otwarte \u00b7 Zamkni\u0119cie: 16:00",
        "website": "https://www.warkgroup.com/",
        "business_id": "0x470443e14bc7554b:0xbadfa60ad7b611e7",
        "place_id": "ChIJS1XHS-FDBEcR5xG21wqm37o",
        "cid": "13465663976359989735",
        "maps_link": "https://www.google.com/maps/place/data=!4m2!3m1!1s0x470443e14bc7554b:0xbadfa60ad7b611e7"
    },
    "detail_url": "https://www.google.com/searchviewer/10?hl=pl&gl=pl&output=search&svid=CAwSHRIbCgNwdnESFENnMHZaeTh4TVdacmNIaGZjREp0GAo"
}

Errors

Handle these documented responses before retrying or showing customer-facing failures.

422

Validation Error

detail_url is not a Google /searchviewer URL with a readable svid, or neither detail_url nor svid was sent.

{
    "message": "The request validation failed",
    "errors": {
        "detail_url": [
            "The detail_url must be a Google /searchviewer URL with an svid parameter, as returned in local_results.places[].detail_url."
        ]
    }
}
404

Place Not Found

Google returned no place for this link. The request is not billed.

{
    "error": "Google returned no place for this detail_url. It may have expired or been removed. The request was not billed."
}
503

Place Details Unavailable

Google blocked every attempt. The request is not billed; retry after the Retry-After delay.

{
    "error": "Google did not return the place details for this detail_url. The request was not billed; retry it after a short delay."
}

Generate Code with AI

Copy a ready-made prompt with all the endpoint details, parameters, and example responses. Paste it into ChatGPT, Claude, or any AI assistant to instantly generate working code.

Related reading

Try It Live

Test this endpoint in our interactive playground with real data.