logo

Search Places

Search Google Maps and get a structured list of places as JSON

The Search endpoint performs a Google Maps search for any query and returns a paginated list of places with ratings, addresses, contact info, opening hours, and more. All results are parsed and returned as structured JSON.


Endpoint

GET https://api.scrape.do/plugin/google/maps/search

Request Parameters

Required

ParameterTypeDescription
tokenstringYour Scrape.do API authentication token
qstringSearch query. URL-encode spaces and special characters. Examples: pizza+new+york, dentist, hotels+chicago

General

ParameterTypeDefaultDescription
startinteger0Result offset for pagination. Must be a non-negative multiple of 20 (0, 20, 40, 60, 80, 100)
llstringLocation constraint in the format @lat,lng,zoom. Zoom is 1z21z. Example: @40.7128,-74.0060,13z. Without ll, Google uses IP-based geolocation.

Localization & Geo-targeting

ParameterTypeDefaultDescription
hlstringenHost Language. Controls the language of the Google Maps UI and result labels. Examples: tr, de, fr, ja. Full list →
glstringusGeo Location. The country from whose perspective results are returned. Examples: tr, de, gb, jp. Full list →
google_domainstringgoogle.comGoogle domain to query. Examples: google.com.tr, google.de, google.co.uk. Full list →

Example Usage

Step 1: Define Your Search Query

Decide what you want to find on Google Maps. This can be:

  • Category searches: pizza new york, dentist, coffee shops
  • Local business lookups: Joe's Pizza Broadway, starbucks
  • Geo-constrained searches: use ll=@lat,lng,zoom to pin a specific area

Step 2: Send the API Request

curl --location --request GET 'https://api.scrape.do/plugin/google/maps/search?token=<SDO-token>&q=pizza+new+york'
import requests
import json

token = "<SDO-token>"
query = "pizza+new+york"

url = f"https://api.scrape.do/plugin/google/maps/search?token={token}&q={query}"

response = requests.request("GET", url)

print(json.dumps(response.json(), indent=2))
const axios = require('axios');

const token = "<SDO-token>";
const query = "pizza+new+york";

const url = `https://api.scrape.do/plugin/google/maps/search?token=${token}&q=${query}`;

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>"
	query := "pizza+new+york"

	url := fmt.Sprintf(
		"https://api.scrape.do/plugin/google/maps/search?token=%s&q=%s",
		token, query,
	)

	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>"
query = "pizza+new+york"

url = URI("https://api.scrape.do/plugin/google/maps/search?token=#{token}&q=#{query}")

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 GoogleMapsSearch {
    public static void main(String[] args) throws Exception {
        String token = "<SDO-token>";
        String query = "pizza+new+york";

        String url = String.format(
            "https://api.scrape.do/plugin/google/maps/search?token=%s&q=%s",
            token, query
        );

        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 query = "pizza+new+york";

        string url = $"https://api.scrape.do/plugin/google/maps/search?token={token}&q={query}";

        using HttpClient client = new HttpClient();
        string response = await client.GetStringAsync(url);

        Console.WriteLine(response);
    }
}
<?php
$token = "<SDO-token>";
$query = "pizza+new+york";

$url = "https://api.scrape.do/plugin/google/maps/search?token={$token}&q={$query}";

$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 Results

The API returns a JSON object with up to 20 places per page:

{
  "search_metadata": {
    "google_maps_url": "https://www.google.com/maps/search/pizza+new+york/?gl=us&hl=en"
  },
  "search_parameters": {
    "engine": "google_maps",
    "type": "search",
    "q": "pizza new york",
    "google_domain": "google.com",
    "hl": "en",
    "gl": "us"
  },
  "search_information": {
    "local_results_state": "Results for exact spelling",
    "query_displayed": "pizza new york"
  },
  "local_results": [
    {
      "position": 1,
      "title": "Joe's Pizza",
      "place_id": "ChIJLSsVbGBZwokRR0LlGBSvMOI",
      "data_id": "0x89c259606c152b2d:0xe230af1b18e542a7",
      "data_cid": "16313085445244584615",
      "provider_id": "/g/1tdfm6_5",
      "gps_coordinates": { "latitude": 40.7306458, "longitude": -73.9969874 },
      "rating": 4.4,
      "reviews": 12847,
      "price": "$",
      "extracted_price": null,
      "type": "Pizza restaurant",
      "types": ["Pizza restaurant", "Italian restaurant"],
      "type_id": "pizza_restaurant",
      "type_ids": ["pizza_restaurant", "italian_restaurant"],
      "address": "7 Carmine St, New York, NY 10014",
      "open_state": "Open · Closes 4 AM",
      "hours": "Open · Closes 4 AM",
      "operating_hours": {
        "monday": "10 AM–4 AM",
        "tuesday": "10 AM–4 AM",
        "wednesday": "10 AM–4 AM",
        "thursday": "10 AM–4 AM",
        "friday": "10 AM–5 AM",
        "saturday": "10 AM–5 AM",
        "sunday": "10 AM–4 AM"
      },
      "phone": "(212) 366-1182",
      "website": "https://www.joespizzanyc.com/",
      "description": "No-frills, counter-serve pizzeria offering thin-crust pies.",
      "thumbnail": "https://lh3.googleusercontent.com/...",
      "service_options": { "dine_in": true, "takeout": true }
    }
  ]
}

Response Structure

Top-Level Fields

FieldTypeDescription
search_metadataobjectCanonical Google Maps URL for the query
search_parametersobjectEcho of request parameters sent by the client
search_informationobjectlocal_results_state (e.g., "Results for exact spelling") and query_displayed
local_resultsarrayPlaces matching the query (up to 20 per page)

local_results[]

FieldTypeDescription
positionintResult position (1-indexed, page-adjusted: page 2 starts at 21)
titlestringPlace name
place_idstringGoogle Place ID (ChIJ... format)
data_idstringInternal data ID (0xHEX:0xHEX format). Used by the Reviews API
data_cidstringNumeric CID. Accepted by the Place endpoint
provider_idstringProvider ID (/g/... format)
gps_coordinatesobject{ latitude, longitude }
ratingfloatAverage rating (1.0–5.0)
reviewsintTotal review count
pricestringPrice level ($, $$, $$$, $30–50, $119)
extracted_priceint/nullFirst numeric price extracted (e.g., $30–5030)
typestringPrimary place type (e.g., "Pizza restaurant")
typesstring[]All place types
type_idstringPrimary type ID (e.g., "pizza_restaurant")
type_idsstring[]All type IDs
addressstringFull address
open_statestringCurrent open/closed status with next change
hoursstringSame as open_state
operating_hoursobjectWeekly hours keyed by day (localized to hl)
phonestringPhone number
websitestringWebsite URL
descriptionstringPlace description (when available)
thumbnailstringThumbnail image URL
user_reviewstringFeatured user review snippet (quoted)
extensionsarrayCategorized extension attributes
unsupported_extensionsarrayExtensions marked unavailable by Google
service_optionsobjectService options as {key: true}, keys snake_cased (e.g., "Dine-in""dine_in")
order_onlinestringOrder online URL (restaurants)
reserve_a_tablestringReservation URL
book_onlinestringBooking URL (hotels)
amenitiesstring[]Amenities list (hotels)
unclaimed_listingbooltrue if the listing is unclaimed

Not every field appears on every result. operating_hours localizes day names based on hl. extracted_price extracts the first number from the price string: $30–5030, $$null.


Pagination

Results come in pages of up to 20. Use start to paginate:

Pagestart value
10 (default)
220
340
460
580
6100

Google Maps typically returns a maximum of ~120 results (6 pages). When paginated, position values are adjusted: page 2 starts at position 21, page 3 at 41, etc.

# Page 1
curl "https://api.scrape.do/plugin/google/maps/search?q=pizza+new+york&token=YOUR_TOKEN"

# Page 2
curl "https://api.scrape.do/plugin/google/maps/search?q=pizza+new+york&start=20&token=YOUR_TOKEN"

# Page 3
curl "https://api.scrape.do/plugin/google/maps/search?q=pizza+new+york&start=40&token=YOUR_TOKEN"

Deep-page requests can occasionally return 502 no results even when more data exists. Retry once before treating it as the true end of the result set.


Geo-targeting with ll

The ll parameter pins the search to a specific lat/lng/zoom. It takes the form @lat,lng,zoomz where zoom is an integer from 1 (world) to 21 (building level) followed by z.

# Restaurants near Times Square, New York
curl "https://api.scrape.do/plugin/google/maps/search?q=restaurant&[email protected],-73.9855,15z&token=YOUR_TOKEN"

# Coffee shops near the Ferry Building, San Francisco
curl "https://api.scrape.do/plugin/google/maps/search?q=coffee&[email protected],-122.3937,14z&token=YOUR_TOKEN"

Without ll, Google uses IP-based geolocation of the proxy network. Results default to a US-wide view when gl=us.


Example Requests

Basic search:

/plugin/google/maps/search?token=TOKEN&q=pizza+new+york

Search with location:

/plugin/google/maps/search?token=TOKEN&q=dentist&[email protected],-74.0060,13z

French locale:

/plugin/google/maps/search?token=TOKEN&q=restaurant+paris&hl=fr&gl=fr&google_domain=google.fr

Turkish locale:

/plugin/google/maps/search?token=TOKEN&q=kebap+istanbul&hl=tr&gl=tr&google_domain=google.com.tr

Page 3:

/plugin/google/maps/search?token=TOKEN&q=pizza+new+york&start=40

From Search Results to More Data

Each local_results[] entry contains identifiers you can pass to the companion endpoints:

  • place_id or data_cid → pass to /plugin/google/maps/place for enriched place details (menu, popular times, user reviews, images, summary).
  • data_id or place_id → pass to /plugin/google/maps/reviews for paginated user reviews with ratings, owner responses, and guided review details.

On this page