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.
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.{
"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/..."
}
]
}
]
}| Field | Type | Meaning | Agoda row |
|---|---|---|---|
matched_name / match_score | string · number | The hotel Google picked for your name, and how closely it matches what you sent. | Hotel Artemide · 1 |
price_total | number | null | The stay total on that site, including taxes and fees; null when the site shows no with-taxes figure. | 673 USD |
price_total_before_taxes | number | null | The same stay before taxes, as that site shows it. | 612 |
price_per_night | number | null | price_total divided by the nights of your stay. | 224.33 |
official_site | boolean | true when the entry is the hotel's own site. | false |
link | string | A 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.
| Site | Total with taxes | Before taxes | Per night |
|---|---|---|---|
| Agoda | 673 | 612 | 224.33 |
| Expedia.com | 742 | 629 | 247.33 |
| Booking.com | 751 | 637 | 250.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 -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"}'| Parameter | Type | Notes |
|---|---|---|
destination | string, required | A place the way a person types it: "Lisbon", "Rome, Italy". Not "hotels in Rome" |
checkin_date | YYYY-MM-DD, required | Today or later |
checkout_date | YYYY-MM-DD, required | After checkin_date |
adults | integer 1-9 | Default 2 |
children_ages | list of integers 0-17 | One age per child. Google prices a child by age, so a bare children count is refused |
currency | ISO code | Default USD. Prices on every row come back in it |
price_totalnumber | nullThe 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_idstringGoogle'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 | nullRating out of 5, the review count and the star class, as Google shows them.
property_kindhotel | vacation_rentalGoogle mixes holiday rentals into a city search; this tells them apart.
deal_labelstring | nullGoogle's own deal line when it shows one (for example “17% less than usual”).
linkstringThe 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_status | HTTP | search_reason | What it means | What to do |
|---|---|---|---|---|
| ok | 200 | ok | Data found | Use it |
| empty | 200 | no_results | Read 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 |
| degraded | 502 | blocked_page / blocked_status / upstream_error / timeout | We couldn't read Google's page, after one retry | Retry |
| degraded | 502 | parse_failed | Google's page had a shape we don't know yet | Retry once, then message us |
| error | 400 | invalid_request / bad_request / unsupported_for_provider | The request cannot be searched as sent | Fix 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.
| Plan | Price / mo | Requests | $ / 1k req | Overage | Rate limit | |
|---|---|---|---|---|---|---|
| BASIC | Free | 100 / mo | — | hard cap | 10 / min | Get this plan → |
| PROrecommended | $10 | 2,500 / mo | $4.00 | $0.004 / req | 60 / min | Get this plan → |
| ULTRA | $25 | 10,000 / mo | $2.50 | $0.003 / req | 120 / min | Get 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_sitemarks 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_totaldrops. - 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.