Get Your API Key
Sign in at hasdata.com, go to your account settings, and copy your API key. All requests must include your key in thex-api-key header.
Request Cost and API Credits
Each request to the Google Hotels API consumes API Credits from your account balance.- Cost per request: 10 API Credits
- Credits are deducted only for successful requests.
- Your total available credits depend on your active plan.
You can use your credits across all HasData APIs. The same credit balance is shared platform-wide.
Unused credits do not roll over. Any remaining credits expire at the end of the current billing period.
Make Your First Request
curl --request GET -G \
--url 'https://api.hasdata.com/scrape/google/hotels' \
--data-urlencode 'q=Hotels in New York' \
--data-urlencode 'checkInDate=2026-08-15' \
--data-urlencode 'checkOutDate=2026-08-20' \
--header 'Content-Type: application/json' \
--header 'x-api-key: <your-api-key>'
const axios = require('axios').default;
const options = {
method: 'GET',
url: 'https://api.hasdata.com/scrape/google/hotels',
params: {q: 'Hotels in New York', checkInDate: '2026-08-15', checkOutDate: '2026-08-20'},
headers: {'Content-Type': 'application/json', 'x-api-key': '<your-api-key>'}
};
try {
const { data } = await axios.request(options);
console.log(data);
} catch (error) {
console.error(error);
}
import requests
url = "https://api.hasdata.com/scrape/google/hotels"
querystring = {"q":"Hotels in New York","checkInDate":"2026-08-15","checkOutDate":"2026-08-20"}
headers = {
"Content-Type": "application/json",
"x-api-key": "<your-api-key>"
}
response = requests.get(url, headers=headers, params=querystring)
print(response.json())
<?php
$params = [
"q" => "Hotels in New York",
"checkInDate" => "2026-08-15",
"checkOutDate" => "2026-08-20",
];
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.hasdata.com/scrape/google/hotels?" . http_build_query($params),
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-api-key: <your-api-key>",
],
]);
$response = curl_exec($curl);
curl_close($curl);
echo $response;
OkHttpClient client = new OkHttpClient();
HttpUrl url = HttpUrl.parse("https://api.hasdata.com/scrape/google/hotels")
.newBuilder()
.addQueryParameter("q", "Hotels in New York")
.addQueryParameter("checkInDate", "2026-08-15")
.addQueryParameter("checkOutDate", "2026-08-20")
.build();
Request request = new Request.Builder()
.url(url)
.get()
.addHeader("Content-Type", "application/json")
.addHeader("x-api-key", "<your-api-key>")
.build();
Response response = client.newCall(request).execute();
using System.Net.Http;
using System.Web;
var client = new HttpClient();
var query = HttpUtility.ParseQueryString(string.Empty);
query["q"] = "Hotels in New York";
query["checkInDate"] = "2026-08-15";
query["checkOutDate"] = "2026-08-20";
var url = $"https://api.hasdata.com/scrape/google/hotels?{query}";
var request = new HttpRequestMessage(new HttpMethod("GET"), url);
request.Headers.Add("x-api-key", "<your-api-key>");
using var response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
var content = await response.Content.ReadAsStringAsync();
Console.WriteLine(content);
require 'net/http'
require 'uri'
uri = URI("https://api.hasdata.com/scrape/google/hotels")
params = {
"q" => "Hotels in New York",
"checkInDate" => "2026-08-15",
"checkOutDate" => "2026-08-20",
}
uri.query = URI.encode_www_form(params)
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
request = Net::HTTP::Get.new(uri)
request["Content-Type"] = 'application/json'
request["x-api-key"] = '<your-api-key>'
response = http.request(request)
puts response.read_body
use reqwest::blocking::Client;
fn main() -> Result<(), Box<dyn std::error::Error>> {
let client = Client::new();
let res = client
.get("https://api.hasdata.com/scrape/google/hotels")
.query(&[("q", "Hotels in New York")])
.query(&[("checkInDate", "2026-08-15")])
.query(&[("checkOutDate", "2026-08-20")])
.header("Content-Type", "application/json")
.header("x-api-key", "<your-api-key>")
.send()?
.text()?;
println!("{}", res);
Ok(())
}
package main
import (
"fmt"
"io"
"net/http"
"net/url"
)
func main() {
params := url.Values{}
params.Set("q", "Hotels in New York")
params.Set("checkInDate", "2026-08-15")
params.Set("checkOutDate", "2026-08-20")
u := "https://api.hasdata.com/scrape/google/hotels?" + params.Encode()
req, _ := http.NewRequest("GET", u, nil)
req.Header.Add("Content-Type", "application/json")
req.Header.Add("x-api-key", "<your-api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}
API Parameters
| Parameter | Default Value | Required | Description |
|---|---|---|---|
q | Hotels in New York | Yes | The search query for Google Hotels (e.g., a city, neighborhood, or hotel name). |
checkInDate | 2026-08-15 | Yes | The check-in date in ‘yyyy-MM-dd’ format. |
checkOutDate | 2026-08-20 | Yes | The check-out date in ‘yyyy-MM-dd’ format. |
gl | - | No | The two-letter country code for the country you want to limit the search to. |
hl | - | No | The two-letter language code for the language you want to use for the search. |
currency | - | No | Parameter defines the currency of the returned prices |
adults | - | No | Number of adult guests (1-6). |
children | - | No | Number of child guests (1-5). Total guests (adults + children) cannot exceed 6. |
childrenAges | - | No | Comma-separated list of children ages (e.g., 5,8,12). Must match the number of children. |
sortBy | - | No | Sort hotel results. Options: - lowestPrice — lowest price- highestRating — highest rating- mostReviewed — most reviewed |
minPrice | - | No | Minimum price per night, in the selected currency. |
maxPrice | - | No | Maximum price per night, in the selected currency. |
propertyType[] | - | No | List of property types to filter by (e.g., hotelResort,hotelMotel).Values prefixed hotel* apply when searching hotels (the default mode). Values prefixed rental* apply when vacationRentals=true.The two sets are disjoint because Google Hotels exposes different property-type catalogs for each mode — pass values matching the mode you’re querying. |
amenity[] | - | No | List of amenities to filter by (e.g., hotelFreeWifi,hotelPool).Values prefixed hotel* apply when searching hotels (the default mode). Values prefixed rental* apply when vacationRentals=true.The two sets are disjoint because Google Hotels exposes different amenity catalogs for each mode — pass values matching the mode you’re querying. |
rating | - | No | Filter by minimum overall guest rating. Options: - threePointFivePlus — 3.5 stars or higher- fourPlus — 4.0 stars or higher- fourPointFivePlus — 4.5 stars or higher |
brands | - | No | Comma-separated list of brand IDs to filter by. Brand IDs are returned in the response under brands for the same query. |
hotelClass | - | No | Comma-separated list of hotel star classes to include (e.g., 2,3,4,5). |
freeCancellation | - | No | Show only properties offering free cancellation. |
specialOffers | - | No | Show only properties with special offers. |
ecoCertified | - | No | Show only eco-certified properties. |
vacationRentals | - | No | Search vacation rentals instead of hotels. |
bedrooms | - | No | Minimum number of bedrooms (vacation rentals only). |
bathrooms | - | No | Minimum number of bathrooms (vacation rentals only). |
nextPageToken | - | No | Token to fetch the next page of hotel results. Returned in the pagination field of a previous response. |
propertyToken | - | No | Token used to retrieve details for a specific property. Returned in each property in the results. |