Google Hotels Prices API: OTA Rates by Date
Pricing
from $3.00 / 1,000 hotel with prices
Google Hotels Prices API: OTA Rates by Date
Google Hotels prices API: nightly and total rates with taxes from Booking, Expedia and hotel sites, for any city and dates. Compare OTA rates. Pay per hotel.
Pricing
from $3.00 / 1,000 hotel with prices
Rating
0.0
(0)
Developer
Christian Barbosa
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
13 hours ago
Last modified
Categories
Share
Get Google Hotels prices for any city, area or hotel name and any dates: price per night and total stay with taxes and fees, star class, guest rating, reviews, amenities, location, deal badges and, optionally, the price on each booking site (Booking.com, Expedia, Agoda, the hotel's own site and others). You pay only per hotel saved with a price. Destinations without results and failed requests are free.
Why this Google Hotels scraper
- Reliable by design. No browser. Each blocked request is retried with exponential backoff and a new IP address. If Google keeps blocking, the Actor switches automatically from datacenter to residential proxies in your market country.
- Your dates, your guests, your currency. Check-in and check-out dates, adults, children with ages and any currency Google supports are sent to Google exactly as in its own interface. Every row repeats the dates, nights and currency Google priced, so you can verify them.
- Night and stay prices that add up.
pricePerNight×nights=priceTotal, taxes and fees included, with the taxes shown separately when Google provides them. - Fair pricing. One flat price per hotel, including every field. Hotels without a price, duplicates and errors are never charged.
- Clear status. Every destination ends as
OK,NO_RESULTS,BLOCKED,ERROR,INVALID_INPUT,TIMEOUTorNOT_PROCESSED. TheRUN_SUMMARYrecord explains why fewer hotels than requested were saved. If more than 20% of destinations fail, the run is marked as failed so you notice. - Safe on long runs. Hotels are marked as collected only after they are saved, and saving pauses while the platform moves the run to another server, so a restart does not duplicate rows or charges.
What data you get
| Group | Fields |
|---|---|
| Hotel | Name, Google hotel ID, star class, guest rating, number of reviews, description, photo, website, check-in and check-out times |
| Location | Latitude, longitude, country code; address and phone with Prices per booking site enabled |
| Price | Lowest price per night and for the whole stay, taxes and fees, currency, nights, check-in and check-out dates |
| Deals | Deal flag and Google's badge, for example "19% less than usual" or "GREAT PRICE for a 4-star hotel" |
| Amenities | The main amenities from the results page; the full list grouped by category with Prices per booking site enabled |
| Booking sites | Optional: each site's price per night and total, official-site flag, free cancellation and deadline, promotion and link |
| Traceability | googleHotelsUrl, sourceUrl, the input used and scrapedAt on every row |
The output tab has an overview table and a location table. Download as JSON, CSV or Excel, or connect through the API.
How to use it
- Enter one or more destinations: a city (
Bogotá), a city with country (Cartagena, Colombia), an area or a hotel name (Hotel Tequendama Bogotá). - Set check-in and check-out dates (up to 30 nights, up to about 330 days ahead). If you leave them empty, the Actor searches 2 nights starting 14 days from today.
- Set adults, children and, optionally, each child's age.
- Choose the currency, language and country (the market you search from).
- Optional: filter by price per night, star class, guest rating, free cancellation or special offers.
- Optional: enable Prices per booking site.
- Run the Actor.
Input example
{"destinations": ["Bogotá", "Madrid, Spain"],"checkIn": "2026-12-10","checkOut": "2026-12-13","adults": 2,"children": 1,"childrenAges": [7],"currency": "USD","language": "en","country": "US","hotelClass": ["4", "5"],"minRating": "4","maxHotels": 50,"includeProviderPrices": false}
Example output
{"destination": "Bogotá","position": 1,"name": "Hilton Bogota","hotelId": "ChcIhsrJyaiJ0IcJGgsvZy8xdGZzY3g5MBAB","stars": 5,"rating": 4.7,"reviewsCount": 5153,"latitude": 4.6556989,"longitude": -74.055533,"amenities": ["Breakfast ($)", "Free Wi-Fi", "Free parking", "Outdoor pool", "Air conditioning", "Pet-friendly", "Fitness center", "Bar"],"currency": "USD","checkIn": "2026-12-10","checkOut": "2026-12-13","nights": 3,"pricePerNight": 181.61,"priceTotal": 544.84,"priceBeforeTaxesTotal": 457.67,"taxesAndFeesTotal": 87.17,"isDeal": true,"dealLabel": "17% less than usual","percentBelowUsual": 17,"googleHotelsUrl": "https://www.google.com/travel/hotels/entity/ChcIhsrJyaiJ0IcJGgsvZy8xdGZzY3g5MBAB?q=Bogot%C3%A1&hl=en&gl=us&ts=...","scrapedAt": "2026-11-01T19:42:29.616Z"}
With Prices per booking site enabled, each row also has:
{"address": "Tv. 6 #27-85, Bogotá, Colombia","phone": "+57 601 7422404","cheapestProvider": "Hotel prive","providers": [{ "provider": "Hotel prive", "isOfficialSite": false, "pricePerNight": 47.82, "priceTotal": 143.47, "currency": "USD", "freeCancellation": false, "freeCancellationUntil": null, "promotion": null, "link": "https://www.google.com/travel/lodging/clk?..." },{ "provider": "ibis Bogota Museo", "isOfficialSite": true, "pricePerNight": 51.03, "priceTotal": 153.08, "currency": "USD", "freeCancellation": false, "freeCancellationUntil": null, "promotion": "Get 5-10% off with free enrollment", "link": "https://www.google.com/travel/lodging/clk?..." },{ "provider": "Hoteles.com", "isOfficialSite": false, "pricePerNight": 51.03, "priceTotal": 153.08, "currency": "USD", "freeCancellation": true, "freeCancellationUntil": "Nov 1", "promotion": null, "link": "https://www.google.com/travel/lodging/clk?..." }],"providerPricesStatus": "OK"}
Pricing
You pay USD 0.003 per hotel saved with a price. With Prices per booking site enabled, each hotel costs USD 0.006, because the Actor opens every hotel page to collect the offers from Booking, Expedia, Agoda, the official site and others. All other fields are included in both modes. Hotels without a price, duplicates, destinations without results and failed requests are not charged. Your maximum cost per run is respected: the Actor stops as soon as it is reached.
| Run | Hotels with a price | Approximate cost |
|---|---|---|
| Daily price check, 1 city | 20 | USD 0.06 (USD 0.12 with booking-site prices) |
| 5 cities, 100 hotels each | 500 | USD 1.50 |
| Market study, 1,000 hotels | 1,000 | USD 3.00 |
Output fields
| Field | Meaning | When it is null |
|---|---|---|
destination, position | The destination you entered and the hotel's order in the results. | Never |
name, hotelId | Hotel name and Google Hotels ID (stable, usable to track a hotel over time). | Never |
googleFeatureId, googleHotelId, placeId | Other Google identifiers. placeId is the Google Maps place ID. | placeId without booking-site prices |
propertyType | hotel or vacation_rental. | Never |
stars, starsLabel | Official star class (1-5) and Google's label. | Properties without an official class |
rating, reviewsCount | Google guest rating (0-5) and number of reviews. | New properties without reviews |
address, phone | Street address and phone. | Without booking-site prices (except hotel-name searches, which include them) |
latitude, longitude, countryCode | Coordinates and ISO country code. | Rarely |
website, checkInTime, checkOutTime, description, thumbnail | Hotel details as Google shows them. | When Google has no value |
amenities | Main amenities (results page) or full list (booking-site mode), in the selected language. Amenities the hotel lacks are excluded. | Empty list when Google shows none |
amenityGroups | Full amenities by category, each with name, note and available. | Only with booking-site prices |
isAvailable | false only when Include hotels without a price is on and Google shows no price. | Never |
currency, checkIn, checkOut, nights, adults, children | The search Google priced. | Never |
pricePerNight, priceTotal | Lowest price per night and for the stay, taxes and fees included. | Hotels without a price |
pricePerNightFormatted, priceTotalFormatted | Prices exactly as Google displays them, rounded. In some markets Google displays prices before taxes, so these labels can be lower than pricePerNight and priceTotal. | Hotels without a price |
pricePerNightBeforeTaxes | Price per night before taxes and fees, when Google provides the breakdown. | When Google does not provide the breakdown |
priceBeforeTaxesTotal, taxesAndFeesTotal | Stay total before taxes, and taxes and fees. When Google already includes taxes in the base price, taxesAndFeesTotal is 0. | Hotels without a price |
isDeal, dealLabel, percentBelowUsual | Google's deal badge and, when stated, how much below the usual price. | dealLabel and percentBelowUsual without a badge |
providers | Price per booking site, cheapest first. | Only with booking-site prices |
cheapestProvider, providerPricesStatus | Cheapest site, and OK, NO_OFFERS or FAILED for the hotel page. | Only with booking-site prices |
googleHotelsUrl | The hotel in Google Hotels with your dates, guests and currency. | Never |
sourceUrl | The results page the hotel came from. | Never |
input | The destination, dates, guests, currency, language, country and filters used. | Never |
scrapedAt | When the data was collected (UTC). | Never |
Statuses and errors
| Status | Meaning | What to do |
|---|---|---|
OK | At least one hotel saved. The summary explains if fewer than maxHotels were saved (Google has no more results, filters, cost limit, or a block after some hotels were saved). | Nothing |
NO_RESULTS | Google has no priced property for this search, or it did not recognize the destination and showed another place. Not charged. | Check the spelling, add the country, change dates or relax filters. |
BLOCKED | Google kept blocking after all retries and proxy escalation. Not charged. | Run again later or select residential proxies. |
ERROR | Google returned an unexpected page. Not charged. | Report it; the page format may have changed. |
INVALID_INPUT | For example, a currency Google does not support. Not charged. | Fix the input as the message says. |
TIMEOUT | The run reached its timeout before this destination returned hotels. | Increase the run timeout. |
NOT_PROCESSED | Your maximum cost per run was reached before this destination. | Raise the maximum cost per run. |
Input errors such as a check-in date in the past, check-out before check-in or more than 30 nights stop the run within seconds with a message that says how to fix them.
Known limits
- Prices change constantly and depend on the market (
country), currency and date of the search. Two runs minutes apart can differ, as in Google Hotels itself. - Google repeats some hotels across result pages. Duplicates are removed and not charged, so a page yields about 10 to 14 new hotels.
- Google lists some hotels without a price for your dates; they are skipped unless you enable Include hotels without a price.
- The results page shows up to 8 main amenities per hotel. The full list requires Prices per booking site.
- Price, star and rating filters are applied again before saving, using the nightly price including taxes and fees. Rows whose dates or nights differ from your search are discarded and not charged.
- Hotel-name searches return that hotel only.
How it works
The Actor requests the same pages as the Google Hotels website and reads the data Google embeds in them. Dates, guests, currency and filters are encoded in the URL parameters the website itself uses, so results match what you see in your browser for the same market. No browser is used, which keeps runs fast and inexpensive.
Current status
No incidents. Operational issues are posted here.
Integrations: API, schedules, webhooks, Google Sheets and AI agents
API. Run the Actor and receive the hotels in one call:
$curl -X POST "https://api.apify.com/v2/acts/ocius-data~google-hotels-reliable/run-sync-get-dataset-items?token=YOUR_API_TOKEN&format=json" -H "Content-Type: application/json" -d '{"destinations": ["Cartagena, Colombia"], "checkIn": "2026-12-15", "checkOut": "2026-12-18", "currency": "USD", "maxHotels": 20}'
Python, with the official apify-client package:
from apify_client import ApifyClientclient = ApifyClient("YOUR_API_TOKEN")run = client.actor("ocius-data/google-hotels-reliable").call(run_input={"destinations": ["Madrid"], "currency": "EUR", "includeProviderPrices": True})for hotel in client.dataset(run["defaultDatasetId"]).iterate_items():print(hotel["name"], hotel["pricePerNight"], hotel["priceTotal"], hotel["currency"])
Schedules. Save your input as a task and open Schedules in Apify Console to track the same destinations and dates every day (rate parity and price monitoring).
Webhooks, Google Sheets, Zapier, Make and n8n. In the task, open Integrations and add a webhook for ACTOR.RUN.SUCCEEDED, the Google Sheets integration, or the official Apify app in Zapier, Make or n8n (trigger "Actor run finished", action "Get dataset items").
MCP and AI agents. The Actor is available through the Apify MCP server (https://mcp.apify.com). Add ocius-data/google-hotels-reliable to the server's Actor list and an AI agent such as Claude can call it with plain inputs such as {"destinations": ["Bogota"], "maxHotels": 10}.
FAQ
Is it legal? The Actor collects publicly available prices and business information about hotels. It does not collect personal data. Check the rules that apply to your use case.
Why do prices differ from what I see? Set the same dates, guests, currency and country. Google personalizes prices by market, and some booking sites show member or mobile prices that are not public.
Can I monitor the same hotels every day? Yes. Schedule the Actor and use hotelId to compare prices over time.
What happens if I am charged for a hotel with a wrong price? Open an issue with the run ID. Every case is reviewed, and confirmed defects are fixed with priority.
Related Actors from ocius-data
Built to the same standard: a status for every input in RUN_SUMMARY, actionable error messages and list-based inputs, so they chain well in one workflow:
- Google Flights API: Prices, Itineraries & Date Grid: flight prices, itineraries and the cheapest day to fly on any route.
Changelog
- November 2026 Fixed:
pricePerNightnow always includes taxes and fees, sopricePerNight×nights=priceTotalalso in markets where Google displays prices before taxes. New fieldpricePerNightBeforeTaxes. - 0.1 First version: dates, guests with children's ages, currency, language and market; price, star, rating, free-cancellation and special-offer filters; prices per booking site; hotel-name search; statuses and run summary; proxy escalation.
Use cases
- Revenue management and competitor rate monitoring for hotels
- Travel agencies and tour operators comparing booking sites
- Market research on hotel supply and prices by city and season
- Corporate travel budgets and per diem planning
- Price alerts and deal-finding applications
Tips
- For daily rate monitoring, keep the same dates offset, currency and country, and track
hotelId. - Add the country to ambiguous destinations, for example
Valencia, SpainorValencia, Venezuela. - Use Prices per booking site when you need the cheapest site, free-cancellation deadlines, address or the full amenity list. Runs take longer because each hotel needs one more page.
Support
Open an issue on the Actor page. Issues are reviewed every business day; the first response arrives within 24 business hours and critical failures are fixed or worked around within 72 hours.