Google Hotels Search

Search for hotels by location with comprehensive filtering options. Supports price range, star rating, free cancellation, and sorting options. Use the Google Hotels Autocomplete endpoint to get valid location suggestions and property tokens for this endpoint.

Endpoint

GET /api/google-hotels/search

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.

Parameters

q string Required

Location query for hotel search (e.g., "Paris, France", "Near Eiffel Tower")

check_in_date string Required

Check-in date in YYYY-MM-DD format (must be today or future date)

check_out_date string Required

Check-out date in YYYY-MM-DD format (must be after check-in date)

adults integer Optional

Number of adult guests (1-10)

children integer Optional

Number of children (0-6)

currency string Optional

3-letter currency code for prices (e.g., USD, EUR, GBP)

gl string Optional

2-letter country code for localization (e.g., us, gb, de, fr)

hl string Optional

2-letter language code for results (e.g., en, es, fr, de)

sort_by integer Optional

Sort order: 3 (price lowest first), 8 (rating highest first), 13 (most reviewed first)

min_price integer Optional

Minimum price per night filter

max_price integer Optional

Maximum price per night filter (must be greater than min_price)

hotel_class array Optional

Filter by hotel star rating IDs (comma-separated): 2, 3, 4, or 5

rating integer Optional

Minimum guest rating filter: 7 (3.5+), 8 (4.0+), 9 (4.5+)

amenities array Optional

Filter by amenity IDs (SerpAPI list, comma-separated). Example: 35 (Free Wi-Fi), 9 (Free breakfast), 15 (Bar)

free_cancellation boolean Optional

Filter for hotels with free cancellation (true/false)

children_ages array Optional

Comma-separated children ages (1-17 years old). Count must match children.

vacation_rentals boolean Optional

Filter for vacation rental properties only (Airbnb-style properties) instead of hotels

eco_certified boolean Optional

Filter for eco-certified/sustainable hotels only

special_offers boolean Optional

Filter for hotels with special offers/deals

property_types array Optional

Filter by property type IDs (SerpAPI list, comma-separated). Example: 12 (Beach hotels), 1 (Apartments)

brands array Optional

Filter by brand IDs (use brands[].id from response)

bedrooms integer Optional

Minimum number of bedrooms (1-20, vacation rentals only)

bathrooms integer Optional

Minimum number of bathrooms (1-20, vacation rentals only)

next_page_token string Optional

Pagination token from previous response

property_token string Optional

Property token for a specific hotel (from search results)

Request Examples

<?php

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, 'https://scrappa.co/api/google-hotels/search?q=Paris%2C+France&check_in_date=2025-08-15&check_out_date=2025-08-18&currency=EUR&gl=fr');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    'x-api-key: YOUR_API_KEY_HERE',
]);

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

echo $response;
<?php

use Illuminate\Support\Facades\Http;

$response = Http::withHeaders([
    'x-api-key' => 'YOUR_API_KEY_HERE',
])->get('https://scrappa.co/api/google-hotels/search?q=Paris%2C+France&check_in_date=2025-08-15&check_out_date=2025-08-18&currency=EUR&gl=fr');

return $response->json();
fetch('https://scrappa.co/api/google-hotels/search?q=Paris%2C+France&check_in_date=2025-08-15&check_out_date=2025-08-18&currency=EUR&gl=fr', {
  headers: {
    'x-api-key': 'YOUR_API_KEY_HERE'
  }
})
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error('Error:', error));
const axios = require('axios');

axios.get('https://scrappa.co/api/google-hotels/search?q=Paris%2C+France&check_in_date=2025-08-15&check_out_date=2025-08-18&currency=EUR&gl=fr', {
  headers: {
    'x-api-key': 'YOUR_API_KEY_HERE'
  }
})
  .then(response => console.log(response.data))
  .catch(error => console.error('Error:', error));
import requests

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

response = requests.get('https://scrappa.co/api/google-hotels/search?q=Paris%2C+France&check_in_date=2025-08-15&check_out_date=2025-08-18&currency=EUR&gl=fr', headers=headers)
print(response.json())
require 'net/http'
require 'uri'
require 'json'

uri = URI.parse('https://scrappa.co/api/google-hotels/search?q=Paris%2C+France&check_in_date=2025-08-15&check_out_date=2025-08-18&currency=EUR&gl=fr')
request = Net::HTTP::Get.new(uri)
request['x-api-key'] = 'YOUR_API_KEY_HERE'

response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: uri.scheme == 'https') do |http|
  http.request(request)
end

puts JSON.parse(response.body)
package main

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

func main() {
    client := &http.Client{}
    req, _ := http.NewRequest("GET", "https://scrappa.co/api/google-hotels/search?q=Paris%2C+France&check_in_date=2025-08-15&check_out_date=2025-08-18&currency=EUR&gl=fr", nil)
    req.Header.Set("x-api-key", "YOUR_API_KEY_HERE")

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

    body, _ := ioutil.ReadAll(resp.Body)
    fmt.Println(string(body))
}
curl -X GET 'https://scrappa.co/api/google-hotels/search?q=Paris%2C+France&check_in_date=2025-08-15&check_out_date=2025-08-18&currency=EUR&gl=fr' \
  -H 'x-api-key: YOUR_API_KEY_HERE'

Response Schema

JSON Response 200 OK
{
    "hotels": []
}

Try It Live

Test this endpoint in our interactive playground with real data.

Open in Playground