Our Google Hotels API is the perfect tool for a countless number of use cases.
Track hotel pricing across destinations and dates to power price-comparison tools, fare alerts, and travel market analysis.
Pull real-time hotel availability and pricing into your own booking platform or travel app without manual scraping.
Analyse hotel supply, pricing, and availability trends across regions to support travel industry research and forecasting.
Our customers use Zenserp for a countless number of use cases, at small and large scale.
The following examples should give you an idea of what you can achieve with our Google Hotels API. For further details, visit our Playground and our Documentation.
curl -X GET -G \
'https://app.zenserp.com/api/v2/search' \
-H "apikey: your-apikey" \
-d "q=hotels+in+Barcelona" \
-d "tbm=hotels" \
-d "check_in=2026-08-10" \
-d "check_out=2026-08-14" \
-d "adults=2" \
-d "currency=EUR"
# Set tbm=hotels and provide check_in/check_out in YYYY-MM-DD format
# Add currency= to receive prices in your preferred currency
import requests
headers = {"apikey": "your-apikey"}
params = {
"q": "hotels in Barcelona",
"tbm": "hotels",
"check_in": "2026-08-10",
"check_out": "2026-08-14",
"adults": 2,
"currency": "EUR",
}
response = requests.get(
"https://app.zenserp.com/api/v2/search",
headers=headers,
params=params,
)
data = response.json()
for h in data["hotels"]:
print(h["name"], h["price_per_night"], h["currency"])
const axios = require("axios");
axios.get("https://app.zenserp.com/api/v2/search", {
headers: { apikey: "your-apikey" },
params: {
q: "hotels in Barcelona",
tbm: "hotels",
check_in: "2026-08-10",
check_out: "2026-08-14",
adults: 2,
currency: "EUR",
},
}).then(({ data }) => {
data.hotels.forEach((h) => console.log(h.name, h.price_per_night, h.currency));
});
<?php
$params = http_build_query([
"q" => "hotels in Barcelona",
"tbm" => "hotels",
"check_in" => "2026-08-10",
"check_out" => "2026-08-14",
"adults" => 2,
"currency" => "EUR",
]);
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_URL, "https://app.zenserp.com/api/v2/search?" . $params);
curl_setopt($ch, CURLOPT_HTTPHEADER, ["apikey: your-apikey"]);
$data = json_decode(curl_exec($ch), true);
curl_close($ch);
foreach ($data["hotels"] as $h) {
echo $h["name"] . " " . $h["price_per_night"] . " " . $h["currency"] . PHP_EOL;
}
curl -X GET -G \
'https://app.zenserp.com/api/v2/search' \
-H "apikey: your-apikey" \
-d "q=hotels+in+Barcelona" \
-d "tbm=hotels" \
-d "check_in=2026-08-10" \
-d "check_out=2026-08-14" \
-d "adults=2" \
-d "free_cancellation=true" \
-d "currency=EUR"
# Add free_cancellation=true to filter results to refundable options only
import requests
headers = {"apikey": "your-apikey"}
params = {
"q": "hotels in Barcelona",
"tbm": "hotels",
"check_in": "2026-08-10",
"check_out": "2026-08-14",
"adults": 2,
"free_cancellation": "true",
"currency": "EUR",
}
data = requests.get(
"https://app.zenserp.com/api/v2/search",
headers=headers,
params=params,
).json()
refundable = [h for h in data["hotels"] if h.get("free_cancellation")]
print(len(refundable), "refundable options")
const axios = require("axios");
axios.get("https://app.zenserp.com/api/v2/search", {
headers: { apikey: "your-apikey" },
params: {
q: "hotels in Barcelona",
tbm: "hotels",
check_in: "2026-08-10",
check_out: "2026-08-14",
adults: 2,
free_cancellation: true,
currency: "EUR",
},
}).then(({ data }) => {
const refundable = data.hotels.filter((h) => h.free_cancellation);
console.log(refundable.length, "refundable options");
});
<?php
$params = http_build_query([
"q" => "hotels in Barcelona",
"tbm" => "hotels",
"check_in" => "2026-08-10",
"check_out" => "2026-08-14",
"adults" => 2,
"free_cancellation" => "true",
"currency" => "EUR",
]);
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_URL, "https://app.zenserp.com/api/v2/search?" . $params);
curl_setopt($ch, CURLOPT_HTTPHEADER, ["apikey: your-apikey"]);
$data = json_decode(curl_exec($ch), true);
curl_close($ch);
$refundable = array_filter($data["hotels"], fn($h) => $h["free_cancellation"]);
echo count($refundable) . " refundable options";
Zenserp Google Hotels API returns hotel listings, pricing, and availability for any destination and date range. For further testing, visit our Playground.
{
"query": { "q": "hotels in Barcelona", "tbm": "hotels", "check_in": "2026-08-10", "check_out": "2026-08-14" },
"hotels": [
{
"name": "Hotel Arts Barcelona",
"type": "hotel",
"rating": 4.6,
"reviews_count": 9123,
"price_per_night": 420,
"total_price": 1680,
"currency": "EUR",
"free_cancellation": true,
"amenities": ["Pool", "Spa", "Sea view", "Free Wi-Fi"]
},
{
"name": "Mandarin Oriental Barcelona",
"type": "hotel",
"rating": 4.8,
"reviews_count": 4201,
"price_per_night": 610,
"total_price": 2440,
"currency": "EUR",
"free_cancellation": false,
"amenities": ["Pool", "Spa", "Restaurant", "Free Wi-Fi"]
}
]
}
Specify check_in, check_out, adults, and children to retrieve accurate availability and pricing for your exact travel party and dates.
Set the currency parameter to receive all prices in your preferred currency — no post-processing conversion required.
Add free_cancellation=true to limit results to refundable options only — essential for travel comparison tools.
Filter by hotel, motel, hostel, or vacation rental using the accommodation type parameter.
Add gl and hl to retrieve hotel results as they appear to users in a specific country and language.
Choose from a variety with different usage limits and features to match the size and scope of your project. All plans include real-time scraping capabilities and 24/7 customer support.
Need more? Contact us for a custom quote.
Yes. Zenserp scrapes Google Hotels in real time at the point of request, so prices and availability reflect current conditions. Prices may vary between requests due to dynamic pricing.
Any destination indexed by Google Hotels, worldwide. Pass check_in and check_out in YYYY-MM-DD format for any date range, including same-day and long-stay searches.
Yes. Use free_cancellation=true to return only refundable options, and read each hotel's amenities array to filter or display features like pool, spa, or free Wi-Fi on your own site.
Yes. Pass a currency parameter with any supported ISO currency code and Zenserp returns price_per_night and total_price already converted, with no extra conversion step required.
Requests beyond your monthly limit return an error response rather than being silently dropped. You can upgrade your plan at any time, and the new limit applies immediately.
No. The Free plan includes 50 searches with no credit card required, so you can test hotel search, pricing, and filtering before choosing a paid plan.