Google Hotels Price Calendar - Hotel Prices for Every Date
Pricing
$1.50 / 1,000 hotel price for one dates
Google Hotels Price Calendar - Hotel Prices for Every Date
Track any hotel's price history across dates with OTA rates (Booking.com, Agoda, Expedia, official site). Find cheapest dates, monitor rate parity, build price alerts. Any currency. $1.50 per 1,000 date prices.
Pricing
$1.50 / 1,000 hotel price for one dates
Rating
0.0
(0)
Developer
An Tan Huynh
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 hours ago
Last modified
Categories
Share
Google Hotels Price Calendar: Hotel Prices for Every Date
Check what a hotel costs on every check-in date in a range, using Google Hotels. For each date you get the lowest price and the price on every booking site: Booking.com, Agoda, Expedia, Hotels.com, Trip.com, the hotel's own website and more. Prices come per night and for the whole stay, in any currency.
Give it a hotel name or a Google Hotels link, pick a start date and how many dates to check. You get one row per date, plus a summary with the cheapest and most expensive dates.
Use cases
- Find the cheapest dates to stay at a specific hotel.
- Revenue management and rate shopping: follow competitors' rates for the next 30, 90 or 365 days.
- Rate parity monitoring: see whether the hotel's own website or an OTA is cheaper, date by date.
- Price alerts and travel apps: schedule daily runs and send the data to Google Sheets, Slack, a webhook or your database.
- AI agents: give an assistant real hotel availability and prices for flexible dates.
Input
{"hotels": ["Hilton Paris Opera", "Pullman Danang Beach Resort"],"startDate": "2026-12-01","numberOfDates": 30,"nights": 1,"adults": 2,"rooms": 1,"currency": "USD","includeProviderPrices": true}
| Field | Notes |
|---|---|
hotels | Hotel name, ideally with the city, or a Google Hotels URL (.../travel/hotels/entity/...) |
startDate | First check-in date. Default: tomorrow |
numberOfDates / endDate | How many consecutive check-in dates to check (max 365) |
nights | Length of each stay |
adults, children, rooms | Party size. Affects which room types and prices Google returns per date |
childrenAges | Optional ages (e.g. [5, 10]) for per-age pricing; its length overrides children |
currency | USD, EUR, GBP, JPY... |
includeProviderPrices | Include the full list of booking sites for each date. On by default, same price either way |
Output
One row per hotel per check-in date. A real row from our test run:
{"hotel": "Generator Paris","checkIn": "2026-11-20","checkOut": "2026-11-21","dayOfWeek": "Friday","nights": 1,"currency": "USD","available": true,"lowestPricePerNight": 60.57,"lowestTotalPrice": 60.57,"cheapestProvider": "Booking.com","providersCount": 15,"providers": [{"provider": "Booking.com","pricePerNight": 60.57,"pricePerNightText": "$61","totalPrice": 60.57,"sponsored": false,"bookingUrl": "https://..."},{"provider": "Hostelworld","pricePerNight": 66.46,"pricePerNightText": "$66","totalPrice": 66.46,"sponsored": false,"bookingUrl": "https://..."},{"provider": "Vio.com","pricePerNight": 66.46,"pricePerNightText": "$66","totalPrice": 66.46,"sponsored": false,"bookingUrl": "https://..."}],"googleHotelsUrl": "https://www.google.com/travel/hotels/entity/..."}
A summary per hotel is saved in the key-value store as SUMMARY and linked from the run's Output tab:
[{"hotel": "Generator Paris", "currency": "USD", "datesChecked": 7, "datesAvailable": 7,"cheapestDate": "2026-11-22", "cheapestPricePerNight": 48.54,"mostExpensiveDate": "2026-11-21", "mostExpensivePricePerNight": 74.44, "averagePricePerNight": 60.49}]
Pricing
$1.50 per 1,000 date prices ($0.0015 per hotel per date), with no monthly fee. A 30-day calendar for one hotel costs about $0.045. Dates with no availability are still returned so the calendar has no gaps, and they are charged the same.
Need prices for every hotel in a city instead of a few specific hotels? Use Google Hotels Scraper.
Room rates: for booking sites that list them (usually the hotel's own website and Booking.com), each provider also has a rooms list: room name, price per night and total. Use it to compare the same room type across sites.
Use it from Python, JavaScript or any HTTP client
from apify_client import ApifyClient # pip install "apify-client>=3"client = ApifyClient("<YOUR_APIFY_TOKEN>")run = client.actor("zet46/google-hotels-price-calendar").call(run_input={"hotels": ["Hilton Paris Opera"], "numberOfDates": 60, "currency": "USD"})for item in client.dataset(run.default_dataset_id).iterate_items():print(item["checkIn"], item["lowestPricePerNight"], item["cheapestProvider"])
The same works with the JavaScript client (apify-client on npm) or a single HTTP call to https://api.apify.com/v2/acts/zet46~google-hotels-price-calendar/run-sync-get-dataset-items?token=<YOUR_APIFY_TOKEN> with the input as the JSON body. You can also schedule runs and send results to Google Sheets, Slack, Zapier, Make or n8n.
More ready-to-run examples (Python and Node.js): github.com/huynhtanan/google-hotels-api. Step-by-step tutorial: Google Hotels prices with Python on dev.to.
Use it from AI agents (MCP)
Add this to Claude Desktop, Cursor or any MCP client:
{"mcpServers": {"apify": {"url": "https://mcp.apify.com?tools=zet46/google-hotels-price-calendar"}}}
Then just ask, for example: "When is the Hilton Paris Opera cheapest in the next two months, and on which site?"
FAQ
How fast is it? In our test, 2 hotels x 7 dates (14 prices, 13 to 27 booking sites each) finished in about 10 seconds, startup included.
Which hotel is used when I type a name? The first Google Hotels match for that text. Add the city to be safe, or paste the Google Hotels link.
Do I need proxies? No setup needed. The actor uses Apify Proxy (datacenter) by default, which gives more complete results than direct requests, and the cost is included in the price.
Is it legal? The actor reads publicly visible hotel prices only, with no personal data. You are responsible for using the data in line with the laws and terms that apply to you.
Found a problem? Open an issue on the Issues tab. Fixes usually ship within a day.