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.
Run this endpoint
Endpoint
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.
string
Optional
local_results.places[].detail_url from Search Advanced. Required unless svid is set.
https://www.google.com/searchviewer/10?gl=pl&hl=pl&output=search&svid=CAwSHRIbCgNwdnESFENnMHZaeTh4TVdacmNIaGZjREp0GAo
string
Optional
The svid parameter of a /searchviewer URL. Alternative to detail_url.
example
string
Optional
Language of the returned texts (e.g. en, pl). Defaults to the hl in detail_url.
en
string
Optional
Country code (e.g. us, pl). Defaults to the gl in detail_url.
us
Request Examples
<?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
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();
}
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));
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);
}
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
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()
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}")
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());
}
}
}
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))
}
#!/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"
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}");
}
}
}
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();
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
{
"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.
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."
]
}
}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."
}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
Pay-as-you-go scraping API
Compare flexible scraping API billing before scaling Google Search Place Details traffic.
Best MCP servers for web scraping
Compare MCP server options for running structured scraping endpoints from AI agents.
Serper.dev alternative
Compare Google Search API pricing, free credits, request limits, and no-credit-card testing.
Try It Live
Test this endpoint in our interactive playground with real data.