Skip to content

Google Hotels Live API

One hotel's rate on each site Google lists

FlightPowers' Google Hotels Live API: send a hotel's name and your dates to POST /rates and you get its rate on each site Google Hotels lists for it, each with the total including taxes and a link. Or search a city with POST /search. Free BASIC plan with 100 requests a month, then $10 for 2,500.

  • No hotel id and no lookup step: the name plus the city is enough
  • Each site comes back with the total with taxes, the total before taxes, the price per night and a link, in your currency
  • A city search returns the hotels with the stay total, rating, class and coordinates

Its own RapidAPI listing: google-hotels-live-api.p.rapidapi.com. Free tier: 100 requests a month.

POST /rates · the request behind the rows below
curl -X POST "https://google-hotels-live-api.p.rapidapi.com/rates" \
  -H "Content-Type: application/json" \
  -H "x-rapidapi-host: google-hotels-live-api.p.rapidapi.com" \
  -H "x-rapidapi-key: $RAPIDAPI_KEY" \
  -d '{"hotel_name":"Hotel Artemide","destination":"Rome","checkin_date":"2026-12-15","checkout_date":"2026-12-18","adults":2,"currency":"USD"}'

Replace $RAPIDAPI_KEY and paste it in a terminal. The response this request produced on 2026-10-23 is excerpted below, labelled as a captured run.

Short answer

What a rates call returns

POST /rates on google-hotels-live-api.p.rapidapi.com, with a RapidAPI key, takes a hotel_name (with the city in destination) or an entity_id, plus checkin_date and checkout_date, and returns one row for the hotel with a sites list: the rate on each site Google lists for it, read live. In one call on 2026-10-23, Hotel Artemide in Rome (3 nights in December, 2 adults) ran from $615 to $803, total with taxes, across the 27 of its 29 sites that showed one.
Hotel Artemide, Rome, 2026-12-15 → 2026-12-18 · hotel row trimmed to its name and 2 of 29 sites, links cut · captured 2026-10-23
{
  "provider": "google_hotels",
  "hotel_name": "Hotel Artemide",
  "checkin_date": "2026-12-15",
  "checkout_date": "2026-12-18",
  "matched_name": "Hotel Artemide",
  "match_score": 1,
  "search_status": "ok",
  "search_reason": "ok",
  "properties": [
    {
      "name": "Hotel Artemide",
      "sites": [
        {
          "site": "Agoda",
          "official_site": false,
          "price_total": 673,
          "price_total_before_taxes": 612,
          "price_per_night": 224.33,
          "taxes_included": true,
          "currency": "USD",
          "link": "https://www.agoda.com/..."
        },
        {
          "site": "Booking.com",
          "official_site": false,
          "price_total": 751,
          "price_total_before_taxes": 637,
          "price_per_night": 250.33,
          "taxes_included": true,
          "currency": "USD",
          "link": "https://www.booking.com/..."
        }
      ]
    }
  ]
}
FieldTypeMeaningAgoda row
matched_name / match_scorestring · numberThe hotel Google picked for your name, and how closely it matches what you sent.Hotel Artemide · 1
price_totalnumber | nullThe stay total on that site, including taxes and fees; null when the site shows no with-taxes figure.673 USD
price_total_before_taxesnumber | nullThe same stay before taxes, as that site shows it.612
price_per_nightnumber | nullprice_total divided by the nights of your stay.224.33
official_sitebooleantrue when the entry is the hotel's own site.false
linkstringA link to that site for this hotel.agoda.com/…

Each entry also carries site_id, price_string, per_night_string and taxes_included. Branch on search_status, not on the length of properties.

The response, rendered

Three of the 29 sites for one Rome hotel

Hotel Artemide, 2026-12-15 to 2026-12-18, 2 adults, priced in USD. By name, site prices are Google's displayed amounts, in whole units.

captured run · 2026-10-23
SiteTotal with taxesBefore taxesPer night
Agoda673612224.33
Expedia.com742629247.33
Booking.com751637250.33

Which sites appear is Google's choice and changes by hotel and dates. Booking.com is not always one of them.

POST /search

A city's hotels

One search returns one page of Google's results, about 18 to 20 hotels and holiday rentals. In a test call on 2026-10-23 (Lisbon, the same dates, 2 adults, USD) all 20 rows came back priced.

curl · POST /search
curl -X POST "https://google-hotels-live-api.p.rapidapi.com/search" \
  -H "Content-Type: application/json" \
  -H "x-rapidapi-host: google-hotels-live-api.p.rapidapi.com" \
  -H "x-rapidapi-key: $RAPIDAPI_KEY" \
  -d '{"destination":"Lisbon","checkin_date":"2026-12-15","checkout_date":"2026-12-18","adults":2,"currency":"USD"}'
ParameterTypeNotes
destinationstring, requiredA place the way a person types it: "Lisbon", "Rome, Italy". Not "hotels in Rome"
checkin_dateYYYY-MM-DD, requiredToday or later
checkout_dateYYYY-MM-DD, requiredAfter checkin_date
adultsinteger 1-9Default 2
children_ageslist of integers 0-17One age per child. Google prices a child by age, so a bare children count is refused
currencyISO codeDefault USD. Prices on every row come back in it
price_totalnumber | null

The stay total including taxes and fees: Google's lowest across the sites it lists for that hotel. price_total_before_taxes and price_per_night sit next to it.

provider_property_idstring

Google's id for the hotel. Send it as entity_id to /rates for its site list, with prices to the cent.

rating / review_count / hotel_classnumber | null

Rating out of 5, the review count and the star class, as Google shows them.

property_kindhotel | vacation_rental

Google mixes holiday rentals into a city search; this tells them apart.

deal_labelstring | null

Google's own deal line when it shows one (for example “17% less than usual”).

linkstring

The hotel's Google Hotels prices page. Each row also has name, latitude, longitude, currency, image_url and retrieved_at; a field Google didn't show is null.

Refused, not ignored

What this API does not take

A dropped filter hands you more than you asked for, so these come back as a 400 with unsupported_for_provider instead.

children (use children_ages), infants, pets, filters, proxy_country, price_min, price_max, min_rating, sort, room_types and the bedroom, bed and bathroom counts. Any other field not listed on this page is ignored. There are no price or class filters and no sort: filter the rows on your side.

Errors

When something comes back wrong

Every response has search_status and search_reason, and every degraded or error one has detail, a sentence you can act on. A 200 with no rows only ever means search_status: empty. A page we couldn't read is never a 200.

search_statusHTTPsearch_reasonWhat it meansWhat to do
ok200okData foundUse it
empty200no_resultsRead fine, nothing to return: no hotels for those dates, a place Google didn't recognise (destination_matched: null), or a name Google matched to a different hotel (candidates)Read detail
degraded502blocked_page / blocked_status / upstream_error / timeoutWe couldn't read Google's page, after one retryRetry
degraded502parse_failedGoogle's page had a shape we don't know yetRetry once, then message us
error400invalid_request / bad_request / unsupported_for_providerThe request cannot be searched as sentFix the request; detail says what

Pricing

2,500 requests for $10

Every endpoint costs one request: a city search and a rates call by name are the same price.

PlanPrice / moRequests$ / 1k reqOverageRate limit
BASICFree100 / mo—hard cap10 / minGet this plan →
PROrecommended$102,500 / mo$4.00$0.004 / req60 / minGet this plan →
ULTRA$2510,000 / mo$2.50$0.003 / req120 / minGet this plan →

Swipe the table sideways for overage and rate limits.

Every plan on this API includes all of its endpoints; Google Hotels, Airbnb, Booking.com hotels and flights are separate subscriptions. Read from the live listing on 2026-10-27; the listing is authoritative.

Every field is on every plan, the free one too. A 400 counts like any other call, so keep check-in in the future.

Build with it

Things to build with it

  • Rate comparison for one hotel. The site list puts each booking site's total side by side, with a link to each.
  • Direct vs third-party. official_site marks the hotel's own site when Google lists it, so you can set it against the other sites.
  • Price alerts. Re-run the same hotel and dates on a schedule and fire when a site's price_total drops.
  • Hotels next to rentals. Same trip, this API and our Airbnb API. Both rate out of 5.

Questions, answered plainly

Which booking sites does it return?
The sites Google Hotels lists for that hotel on those dates. In the Rome call on this page that was 29 sites, 27 of them with a total, Agoda, Expedia and Booking.com among them. Which sites appear is Google's choice and changes by hotel and dates, and Booking.com is not always one of them.
Do I need a Google hotel id?
No. Send hotel_name with the city in destination and Google picks the hotel; we check the name against what you sent and echo matched_name and match_score. If Google picks a different hotel, or the name reads as a place or a chain, you get no rates: search_status is empty and up to 5 candidates (name and entity_id) come back to call again with. A provider_property_id from /search works as entity_id too.
Are the prices whole numbers or to the cent?
By name, each site's price is Google's displayed amount, in whole units. By entity_id it is to the cent. price_total includes taxes and fees; a site that shows no with-taxes figure has price_total: null and taxes_included: false, never the before-taxes number relabelled.
Why did a date come back with no sites?
Google shows no prices for dates far ahead, so a stay months out can come back with available: false and no sites. Dates a few weeks to a couple of months out return prices.
Can I filter by price or star rating, or page through results?
Not yet. One /search returns one page of Google’s results, about 18 to 20 hotels and holiday rentals, with no price or class filters and no sort; filter the rows on your side. price_min, price_max, min_rating, sort and the other filters our Airbnb and Booking.com APIs take are refused with unsupported_for_provider rather than ignored.
Is it the same key as the flights, Booking.com and Airbnb APIs?
One RapidAPI key works on all of them once you subscribe to each. The Google Hotels Live API is its own listing and its own subscription.
Is this an official Google API?
No. It reads Google Hotels’ public pages at the moment you ask; nothing is cached. FlightPowers is not affiliated with Google.

Start with one hotel

One hotel's rate on each site Google lists for it, or a city's hotels with the stay total, as flat JSON your code or your agent can use directly.

Free tier: 100 requests a month.

Independent API. Not affiliated with, endorsed by, or sponsored by Google.