Blog / API guides

Google Hotels API: Hotel Prices for Your Dates as JSON

Google's Hotel Prices developer guide is about supplying hotel pricing data for Google's search results, and it doesn't present a way to read prices for a city and dates. To read prices for a city and dates, call GET /v1/google-hotels/search with a destination and a check-in and check-out date. It returns hotels with nightly rate, total rate, rating and review count as JSON, for 1 credit per call.

Is there an official Google Hotels API for prices?

We didn't find one for reading prices back out, and we can't rule out that something exists outside the pages we read. Google's Hotel Prices developer guide covers how to configure your environment and supply hotel pricing data for Google's search results. It is written for the side of the market that publishes rates, not the side that wants to look them up.

That matters if you're the one who needs prices. A travel app, a rate-monitoring script or an agent comparing destinations is a consumer of that data, not a supplier. Google also documents a Travel Partner API for Hotel Center accounts, which sits alongside that supply-side guide.

If you are a hotel, use Google's own tooling. If you want what a traveller sees for a given city and dates, that's what the Google Hotels API returns as JSON: data collected from publicly available sources and returned as found at the time of the call.

Which endpoints does the Google Hotels API have?

The Google Hotels API has three endpoints: autocomplete, search and reviews. All three are GET requests, and each costs 1 credit per successful call. Search is the one that returns prices for a destination and dates. The API is part of the Travel APIs, and the table below lists each path with its required parameters.

Path Returns Credits Required parameters
/v1/google-hotels/autocomplete Autocomplete 1 q
/v1/google-hotels/search Search 1 q, check_in_date, check_out_date
/v1/google-hotels/reviews Reviews 1 property_token

The usual flow is search first. Each property in a search response has a property_token, and that token is what the reviews endpoint needs. The autocomplete endpoint takes a partial q and a type of location, hotel or all, which helps when you want to resolve user input into a destination or hotel name before searching.

Authentication is one header, X-API-Key. The authentication docs cover keys and the api_key query parameter, and the quick start gets a first call running.

How do you get hotel prices for specific dates?

To get hotel prices for specific dates, send the destination as q and the stay as check_in_date and check_out_date in one GET to the search endpoint. Add currency for the price format and gl for the country. The request below asks for Paris, 15 to 18 December 2026, in euros, and costs 1 credit.

curl "https://api.perceptlayer.com/v1/google-hotels/search?q=Paris%2C+France&check_in_date=2026-12-15&check_out_date=2026-12-18&currency=EUR&gl=fr" \
  -H "X-API-Key: $API_KEY"

The response echoes your inputs under search_parameters, and shows what was applied, including adults: 2 and children: 0. Here's an excerpt of the recorded response, trimmed with …:

{
  "search_parameters": {
    "engine": "google_hotels",
    "q": "Paris, France",
    "gl": "fr",
    "hl": "en",
    "currency": "EUR",
    "check_in_date": "2026-12-15",
    "check_out_date": "2026-12-18",
    "adults": 2,
    "children": 0
  },
  "search_information": {
    "total_results": 15000,
    "cached": false
  },
  "properties": [
    {
      "type": "hotel",
      "name": "Novotel Paris Porte de Versailles",
      "property_token": "ChkI5rWisq2xuMNRGg0vZy8xMWhfa18xc2w4EAE",
      "gps_coordinates": {
        "latitude": 48.8300073,
        "longitude": 2.2917392999999997
      },
      "check_in_time": "3:00 PM",
      "check_out_time": "12:00 PM",
      "rate_per_night": {
        "lowest": "€136",
        "extracted_lowest": 136,
        "before_taxes_fees": "€136",
        "extracted_before_taxes_fees": 135.76042
      },
      "total_rate": {
        "lowest": "€408",
        "extracted_lowest": 408,
        "before_taxes_fees": "€407",
        "extracted_before_taxes_fees": 407.28126000000003
      },
      "overall_rating": 4.6,
      "reviews": 4337,
      "hotel_class": "4-star hotel",
      "extracted_hotel_class": 4
    },
    …
  ],
  "pagination": {
    "current_from": 1,
    "current_to": 20,
    "next_page_token": "gho_jRZtj7WKgqLkF8eP.Q0JJPQ",
    …
  },
  "response_time_ms": 2501
}

What do the price fields mean?

Each property has two price objects. rate_per_night is the nightly figure and total_rate covers the stay. For the Novotel, the three nights come to €408 in total_rate.lowest, which is 3 × €136.

Each object has a display string ("€136") and an extracted_ number (136) you can sort and sum without parsing currency symbols. The before_taxes_fees pair gives the figure before taxes and fees. Use the numeric fields in code and keep the strings for display.

The second property in the recording, Hôtel Aramis Saint-Germain Best Western, shows rate_per_night.lowest of €124 and overall_rating of 4.4 from 826 reviews. Rate, rating and review count are on the same object, so ranking by value takes no second request.

Which parameters does the search endpoint take?

The search endpoint takes three required parameters, q, check_in_date and check_out_date, and a long list of optional filters for party size, price, star class and more. Only the types and allowed values below are documented, so the table doesn't claim defaults. The recorded response shows adults: 2 and children: 0 for a request that set neither.

Parameter Type Notes
q string, required Destination, up to 200 characters
check_in_date string, required Check-in date
check_out_date string, required Check-out date
adults, children integer Party size
children_ages[] list of integer Ages of the children
currency string Up to 3 characters
gl, hl string Country and language, up to 2 characters each
sort_by integer One of 3, 8, 13
min_price, max_price integer Price bounds
hotel_class integer One of 2, 3, 4, 5
rating integer One of 7, 8, 9
free_cancellation boolean Filter
amenities[] list of integer Amenity filter
property_types[], brands[] list of integer Type and brand filters
vacation_rentals, eco_certified, special_offers boolean Filters
bedrooms, bathrooms integer Size filters
next_page_token string Continues a result set
property_token string Targets one property
engine string One of google_hotels

The response includes a brands list with an id and name for each brand, such as 118 for Park Hyatt and 155 for Best Western in the recording. The brands[] filter is a list of integers. The docs don't say where its values come from, so try it in the playground on the Search endpoint page.

For a filtered search, add parameters to the same call. This one asks for 4-star hotels with free cancellation:

curl "https://api.perceptlayer.com/v1/google-hotels/search?q=Paris%2C+France&check_in_date=2026-12-15&check_out_date=2026-12-18&currency=EUR&gl=fr&hotel_class=4&free_cancellation=true" \
  -H "X-API-Key: $API_KEY"

How do you page through results and read reviews?

The recorded response has total_results of 15000 and a pagination object showing current_from: 1 and current_to: 20. To get the next page, pass the next_page_token from that object back as the next_page_token parameter, with the same query. Each page is its own call and its own credit. The pagination guide covers safe page loops in Python.

For reviews, take a property's property_token from search and call the reviews endpoint:

curl "https://api.perceptlayer.com/v1/google-hotels/reviews?property_token=ChkI5rWisq2xuMNRGg0vZy8xMWhfa18xc2w4EAE" \
  -H "X-API-Key: $API_KEY"
Parameter Type Notes
property_token string, required Up to 256 characters
hl, gl string Language and country, up to 2 characters
category_token string Up to 40 characters
next_page_token string Up to 256 characters, for more reviews

We haven't recorded a reviews response for this guide, so there's no excerpt here. The Reviews endpoint page lists the fields, and the playground runs a real call. Search already gives you a summary per hotel: overall_rating, reviews, a star ratings breakdown and reviews_breakdown by topic. The reviews endpoint is for the review entries themselves.

For the same pattern on another Google product, see the Google Maps reviews guide.

How do you run a nightly price check in Python?

A nightly price check is a loop over destinations and date windows that stores extracted_lowest with a timestamp, so you can compare the same stay from one night to the next. The script below runs one search and prints name, nightly rate, rating and reviews for each property. Set API_KEY in your environment first.

import os
import requests

URL = "https://api.perceptlayer.com/v1/google-hotels/search"
HEADERS = {"X-API-Key": os.environ["API_KEY"]}

def check(destination, check_in, check_out):
    params = {
        "q": destination,
        "check_in_date": check_in,
        "check_out_date": check_out,
        "currency": "EUR",
    }
    resp = requests.get(URL, headers=HEADERS, params=params, timeout=30)
    resp.raise_for_status()
    print("credits used:", resp.headers.get("X-Credits-Used"),
          "remaining:", resp.headers.get("X-Credits-Remaining"))
    return resp.json()["properties"]

for p in check("Paris, France", "2026-12-15", "2026-12-18"):
    rate = p.get("rate_per_night", {}).get("extracted_lowest")
    print(p["name"], rate, p.get("overall_rating"), p.get("reviews"))

Some properties may lack a rate for your dates, so the script reads rate_per_night defensively. Don't assume every field exists on every property. Only the fields in the recording are shown here.

Errors come back as an HTTP status with a JSON error body. Handle 429 and 503 by waiting for the Retry-After seconds, as described in the errors and rate limit docs. A request that timed out client-side may still have succeeded and been billed, which retrying without paying twice goes into. Store results, and use the caching guide so the same query isn't paid for twice in a day.

What does a nightly hotel price check cost?

Each search is 1 credit, so the cost is the number of destination and date combinations times the number of nights you run it. Failed calls cost nothing and return X-Credits-Used: 0, and every successful response reports X-Credits-Remaining. The credits docs and pricing have the rest.

Check Calls per night Credits per 30 nights Cost
5 destinations, 1 date window each 5 150 Within the 1,000 free credits a month
20 destinations, 3 date windows each 60 1,800 60 calls × 30 nights × 1 credit = 1,800 credits, within the Starter pack's 10,000

The free tier gives 1,000 credits every month after you verify an email address, with no credit card. Credits also come in prepaid packs, starting with the 10,000-credit Starter pack, and purchased credits last 12 months. See pricing for what credits cost. Paging deeper into a result set adds one credit per extra page, so count pages as calls.

The service is prepaid. If the balance runs out, calls return insufficient_credits (402) and nothing more is debited.

Next step: get a free API key and run the Paris search above in the playground on the Google Hotels API page. If you want an agent to make these calls, the MCP docs show how.

APIs in this post

Frequently asked questions

Does Google have an API to get hotel prices?

We didn't find one. Google's Hotel Prices developer guide covers supplying pricing data to Google's search results, and the pages we read don't describe reading prices for a city and dates. The Google Hotels API on Perceptlayer returns that search view as JSON from /v1/google-hotels/search, for 1 credit per call.

How much does the Google Hotels API cost?

Each successful call to the search, reviews and autocomplete endpoints costs 1 credit. Failed calls cost nothing. You get 1,000 free credits a month after verifying an email. Beyond that, prepaid packs run from 10,000 credits (Starter) to 5,000,000 (Volume), and pricing has what credits cost. A nightly check of 5 destinations is 150 credits a month.

Three: q for the destination, check_in_date and check_out_date. Everything else is optional, including currency, gl, hl, adults, children, hotel_class, rating, min_price, max_price and free_cancellation. Check-in and check-out are strings. The recorded request writes them like 2026-12-15.

How do I get reviews for a specific hotel?

Run a search, copy the property_token from the hotel you want, and pass it to /v1/google-hotels/reviews. Use next_page_token to continue to more reviews and category_token to narrow by category. Each reviews call costs 1 credit. The hotel's summary rating and review count are already in the search response.

What happens if a call fails?

You get an HTTP status and a JSON body with error.code, error.message and request_id. Failed calls aren't billed and return X-Credits-Used: 0. For 429 and 503, wait the number of seconds in the Retry-After header. A call that timed out on your side may have succeeded and been billed.

  1. Booking.com Hotel Prices API: Search, Rooms and Reviews

    Eleven Booking.com endpoints as JSON: search, prices, rooms and reviews, with parameters and a 1,000-hotel price check costed in credits.

  2. Trivago Hotel Prices API: Deals and Search as JSON

    Call trivago suggest, search and deals as JSON: 1 credit per call, a recorded Paris search response, and the provider_count field in a metasearch result.

  3. Airbnb Listings Data API: Search, Details and Reviews

    Search Airbnb listings by place and dates as JSON: price, rating, beds and coordinates from a recorded response, plus the listing and reviews calls.

Start with 1,000 free credits

No password to set. We email you a sign-in link, and your key works on every API.

No credit card. 1,000 free credits a month.