Scrape hotel prices with our Google Hotels API

Our Google Hotels API retrieves hotel listings, prices, availability, and ratings directly from Google Hotels for any destination and date range. Sign up for our free plan to get started.

Hotel Arts Barcelona
€420/night
★★★★★4.6
Pool Spa Free Wi-Fi
→
HOTELS JSON
EUR 420/night free cancellation
Use cases

Plenty of use cases

Our Google Hotels API is the perfect tool for a countless number of use cases.

①

Travel Price Intelligence

Track hotel pricing across destinations and dates to power price-comparison tools, fare alerts, and travel market analysis.

②

Booking Platform Data

Pull real-time hotel availability and pricing into your own booking platform or travel app without manual scraping.

③

Market Research

Analyse hotel supply, pricing, and availability trends across regions to support travel industry research and forecasting.

④

Many More...

Our customers use Zenserp for a countless number of use cases, at small and large scale.

Example use cases

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";

Try Zenserp complete and easy-to-use Google Hotels API

Zenserp Google Hotels API returns hotel listings, pricing, and availability for any destination and date range. For further testing, visit our Playground.

Sample JSON response
{
  "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"]
    }
  ]
}
Full coverage

Zenserp covers all available hotel features and filters

1

Date and occupancy targeting

Specify check_in, check_out, adults, and children to retrieve accurate availability and pricing for your exact travel party and dates.

2

Currency selection

Set the currency parameter to receive all prices in your preferred currency — no post-processing conversion required.

3

Free cancellation filter

Add free_cancellation=true to limit results to refundable options only — essential for travel comparison tools.

4

Accommodation type filter

Filter by hotel, motel, hostel, or vacation rental using the accommodation type parameter.

5

Geolocated searches

Add gl and hl to retrieve hotel results as they appear to users in a specific country and language.

Start using our free SERP API today!

Get 50 Free Requests

Simple and Economical pricing

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.

Free

All basic to get started
$0/mo
  • 50 Searches
Try Now

Small

Best for hobby projects
$49.99/mo
  • 25,000 Searches
  • All SERP Types
Try Now

Large

More requests
$299.99/mo
  • 250,000 Searches
  • All SERP Types
  • Batch Endpoint
  • Keyword Search Volume
  • Keyword CPC
  • Bulk Index Checker (GUI)
  • Personal Support
  • Concierge Onboarding
  • Service Level Agreement
  • Google Hotels Access
Try Now

Premium

For large SERP projects
$499.99/mo
  • 500,000 Searches
  • All SERP Types
  • Batch Endpoint
  • Keyword Search Volume
  • Keyword CPC
  • Bulk Index Checker (GUI)
  • Personal Support
  • Concierge Onboarding
  • Service Level Agreement
  • Custom Queue
  • Google Hotels Access
Try Now

Enterprise

For large SERP projects
$899.99/mo
  • 1,000,000 Searches
  • All SERP Types
  • Batch Endpoint
  • Keyword Search Volume
  • Keyword CPC
  • Bulk Index Checker (GUI)
  • Personal Support
  • Concierge Onboarding
  • Service Level Agreement
  • Custom Queue
  • All features of Premium, 1,000,000 Searches
  • Google Hotels Access
Try Now

Need more? Contact us for a custom quote.

Frequently asked questions

Are hotel prices real-time?

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.

Which destinations and date ranges are supported?

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.

Can I filter results by amenities or free cancellation?

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.

Can I get prices in a specific currency?

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.

What happens if I exceed my plan's request limit?

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.

Do I need a credit card to try the Google Hotels API?

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.