Skip to content
Scrappa Get API key

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.

Run this endpoint

Google Hotels Search 1 credit/request

Endpoint

GET https://scrappa.co/api/google-hotels/search?q=Paris%2C+France&check_in_date=2026-09-15&check_out_date=2026-09-18&currency=EUR&gl=fr
Request preview GET
https://scrappa.co/api/google-hotels/search?q=Paris%2C+France&check_in_date=2026-09-15&check_out_date=2026-09-18&currency=EUR&gl=fr
Auth header x-api-key
Cost 1 credit/request
q = Paris, France check_in_date = 2026-09-15 check_out_date = 2026-09-18
Response preview 200 OK
{
    "properties": []
}

Parameters

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

Runnable path

3 required parameters needed before sending a request.

22 optional filters available.

q string Required

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

Example value Paris, France
check_in_date string Required

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

Example value 2026-09-15
check_out_date string Required

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

Example value 2026-09-18
adults integer Optional

Number of adult guests (1-10)

Example value 2
children integer Optional

Number of children (0-6)

Example value 0
currency string Optional

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

Example value EUR
gl string Optional

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

Example value fr
hl string Optional

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

Example value en
sort_by integer Optional

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

Example value 10
min_price integer Optional

Minimum price per night filter

Example value 10
max_price integer Optional

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

Example value 10
hotel_class array Optional

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

Example value ["example"]
rating integer Optional

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

Example value 10
amenities array Optional

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

Example value ["example"]
free_cancellation boolean Optional

Filter for hotels with free cancellation (true/false)

Example value true
children_ages array Optional

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

Example value ["example"]
vacation_rentals boolean Optional

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

Example value true
eco_certified boolean Optional

Filter for eco-certified/sustainable hotels only

Example value true
special_offers boolean Optional

Filter for hotels with special offers/deals

Example value true
property_types array Optional

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

Example value ["example"]
brands array Optional

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

Example value ["example"]
bedrooms integer Optional

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

Example value 10
bathrooms integer Optional

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

Example value 10
next_page_token string Optional

Pagination token from previous response

Example value example
property_token string Optional

Property token for a specific hotel (from search results)

Example value example

Request Examples

<?php

$curl = curl_init();

curl_setopt_array($curl, [
    CURLOPT_URL => "https://scrappa.co/api/google-hotels/search?q=Paris%2C+France&check_in_date=2026-09-15&check_out_date=2026-09-18&currency=EUR&gl=fr",
    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/google-hotels/search?q=Paris%2C+France&check_in_date=2026-09-15&check_out_date=2026-09-18&currency=EUR&gl=fr');

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/google-hotels/search?q=Paris%2C+France&check_in_date=2026-09-15&check_out_date=2026-09-18&currency=EUR&gl=fr', 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/google-hotels/search?q=Paris%2C+France&check_in_date=2026-09-15&check_out_date=2026-09-18&currency=EUR&gl=fr',
    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/google-hotels/search?q=Paris%2C+France&check_in_date=2026-09-15&check_out_date=2026-09-18&currency=EUR&gl=fr")
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/google-hotels/search?q=Paris%2C+France&check_in_date=2026-09-15&check_out_date=2026-09-18&currency=EUR&gl=fr", 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/google-hotels/search?q=Paris%2C+France&check_in_date=2026-09-15&check_out_date=2026-09-18&currency=EUR&gl=fr', 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/google-hotels/search?q=Paris%2C+France&check_in_date=2026-09-15&check_out_date=2026-09-18&currency=EUR&gl=fr")
        .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/google-hotels/search?q=Paris%2C+France&check_in_date=2026-09-15&check_out_date=2026-09-18&currency=EUR&gl=fr", 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/google-hotels/search?q=Paris%2C+France&check_in_date=2026-09-15&check_out_date=2026-09-18&currency=EUR&gl=fr"
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/google-hotels/search?q=Paris%2C+France&check_in_date=2026-09-15&check_out_date=2026-09-18&currency=EUR&gl=fr"));
            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/google-hotels/search?q=Paris%2C+France&check_in_date=2026-09-15&check_out_date=2026-09-18&currency=EUR&gl=fr',
            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/google-hotels/search?q=Paris%2C+France&check_in_date=2026-09-15&check_out_date=2026-09-18&currency=EUR&gl=fr")
        .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.

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

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.

Try It Live

Test this endpoint in our interactive playground with real data.