Google Hotels Scraper - Prices, Price Changes & Rate Monitor
Pricing
from $2.99 / 1,000 hotel returneds
Google Hotels Scraper - Prices, Price Changes & Rate Monitor
For travel agencies, revenue managers and price-tracking apps: hotel name, nightly and total price, taxes, rating, reviews, stars, amenities and booking sites from Google Hotels in 72 currencies. 10 of 10 prices matched the Google Hotels page. Monitoring returns only price changes and new hotels.
Pricing
from $2.99 / 1,000 hotel returneds
Rating
0.0
(0)
Developer
NeverEmpty
Maintained by CommunityActor stats
0
Bookmarked
3
Total users
2
Monthly active users
2 days ago
Last modified
Categories
Share
For travel agencies, hotel revenue managers and price-tracking apps: every hotel Google Hotels lists for a city, district or landmark, with the nightly and total price, taxes and fees, currency, rating, review count, stars, amenities, coordinates and, optionally, every booking site and its price. In a check on 2026-09-21, 10 of 10 nightly prices matched the Google Hotels page opened in a browser for the same search. Set it on a schedule in monitoring mode and you get back only hotels whose price moved or that are new to your watch - no diffing on your side.
Unofficial. Public data only.
Export as JSON, CSV or Excel.
What you get
- One row per hotel for each location: name, property type (hotel or vacation rental), stars, guest rating and review count, the nightly price and the stay total as Google shows them, the stay before taxes, the taxes and fees, and the stay with taxes.
- Any of Google's 72 currencies (
currency), any stay up to 30 nights (checkInDate,checkOutDate) and 1-12 adults (adults). Every row repeats the dates and guests Google actually priced and says whether they match what you asked for (stayAsRequested), so a run never silently hands you a different stay. - Sorting and nightly price limits applied by Google itself (
sortBy,minPrice,maxPrice) - the same controls as the site's sort menu and price slider. - Booking sites (
includeBookingSources): Booking.com, Expedia, Agoda, the hotel's own site and every other site Google lists, each with its nightly and total price, cheapest first. - Monitoring mode (
monitoringMode): only hotels whose nightly price moved by at leastminPriceChangePercentsince the row last returned for them, or that are new to this watch, with the previous price in the same row. - No failed runs for "nothing found". An empty search, a place Google reads differently, a refused request or a spending limit each come back as a free row that says why.
Input
| Field | What it does |
|---|---|
locations | Places to search, one per entry: a city (Paris), a district (Shibuya, Tokyo), a landmark (Times Square) or a hotel name. Each row carries resolvedLocation, the place Google actually searched. |
checkInDate | YYYY-MM-DD, or +N for N days from today in UTC. The form is prefilled with +30, so a saved task never falls into the past. Empty = 30 days from today. Dates before yesterday (UTC), and arrivals more than 330 days ahead (Google showed no prices that far out in a 2026-09-21 check), are refused before anything is requested. |
checkOutDate | YYYY-MM-DD or +N. Prefilled with +32. Empty = 1 night after the check-in you gave (2 nights when check-in is empty too). At most 30 nights. |
adults | Guests the price is for, 1-12. Empty = 2. |
currency | One of the 72 currencies Google Hotels offers. Empty = USD. |
sortBy | lowest-price (empty = this), relevance (Google's default order), highest-rating or most-reviewed. |
minPrice / maxPrice | Nightly price limits in your currency, applied by Google. |
maxHotels | Hotels to read per location, 1-1000. Empty = 50. Google lists about 18-20 per page. |
includeBookingSources | Also read each hotel's price page and list every booking site. One extra page per hotel, so the run is slower. |
monitoringMode | Return only hotels that are new to this watch or whose price moved. |
minPriceChangePercent | Monitoring only. Smallest move that counts, in percent of the price last returned. Empty = 2. |
resetMonitoringState | Forget what this search remembered; the next monitoring run returns every hotel as new. |
A search written as "hotels near X" or "hotels in X" sometimes gets a page where Google loads the list later in the browser. The Actor then searches the place alone ("X") once, and says so in the log and in googleQuery.
Output
{"status": "ok","hotelId": "8082771210398315600","hotelName": "St Christopher's Paris - Canal","propertyType": "hotel","propertyTypeCode": 1,"hotelClass": null,"stars": null,"rating": 3.9,"reviewCount": 3971,"pricePerNight": 41,"pricePerNightText": "$41","totalPriceText": "$83","pricesShownIncludeTaxes": false,"totalBeforeTaxes": 82.89,"taxesAndFees": 8.31,"totalWithTaxes": 91.2,"currency": "USD","priceShown": true,"deal": "35% less than usual","checkInDate": "2026-11-10","checkOutDate": "2026-11-12","nights": 2,"adults": 2,"stayAsRequested": true,"amenities": ["Breakfast ($)", "Free Wi-Fi", "Parking", "Bar", "Accessible", "Smoke-free property"],"description": "Waterfront hostel with free Wi-Fi & a common lounge, plus a lively bar/restaurant & a nightclub.","latitude": 48.888504999999995,"longitude": 2.3790066,"checkInTime": "2:00 PM","checkOutTime": "11:00 AM","position": 2,"searchQuery": "Paris","googleQuery": "Paris","resolvedLocation": "Paris","googleHotelUrl": "https://www.google.com/travel/hotels/entity/ChkIvOHd86zKwZeBARoML2cvMTF4ZHB2Njd2EAE?q=Paris&hl=en&gl=us&ts=CAESCgoCCAMKAggDEAEaHBIaEhQKBwjqDxALGAoSBwjqDxALGAwYAjICCAEqCQoHKAM6A1VTRA","googleMapsUrl": "https://www.google.com/maps?cid=8082771210398315600","entityToken": "ChkIvOHd86zKwZeBARoML2cvMTF4ZHB2Njd2EAE","scrapedAt": "2026-09-21T09:36:26.976Z","bookingSources": [{ "source": "St Christopher's Paris - Canal", "isOfficialSite": true, "pricePerNight": 41, "pricePerNightText": "$41", "totalPrice": 82.89, "totalPriceText": "$83" },{ "source": "Booking.com", "isOfficialSite": false, "pricePerNight": 44, "pricePerNightText": "$44", "totalPrice": 87.16, "totalPriceText": "$87" }],"bookingSourcesStatus": "ok"}
About the prices
pricePerNightandtotalPriceTextare exactly what Google Hotels shows for the cheapest offer. This Actor reads Google as a visitor in the United States, where Google shows prices before taxes and fees;pricesShownIncludeTaxessays which way each row is.totalBeforeTaxes,taxesAndFeesandtotalWithTaxescome from Google's own price breakdown. They are filled only when that breakdown belongs to the same offer as the shown price, and arenullotherwise (in the 2026-09-21 checks: 32 of 40 priced hotels in Paris, 14 of 27 in New York and Tokyo). A number from a different offer is never mixed in.- Hotels for which Google shows no price for your stay are still returned, with the prices
nullandpriceShown: false. bookingSourcesStatusisok,none-shown(Google listed no booking site),unreadableornot-requested. A hotel whose booking sites could not be read because Google stopped answering is not returned at all (seeblockedbelow). Booking-site prices are on the same basis as the hotel's shown price.propertyTypeCodeis Google's raw code (1 = hotel, 2 = vacation rental).
Monitoring rows
In monitoring mode each returned row also has change and the price last returned for that hotel in this watch:
"new"- first time this watch returns the hotel (the first run returns every hotel as new). It means new to your watch, not newly listed on Google."price-down"/"price-up"- the nightly price moved by at leastminPriceChangePercentfrom the price last returned. Google's shown price can flip by 1 between reads (151 / 152); comparing with the price last returned, not the last one seen, stops those flips from being reported again and again."price-shown"- the hotel had no price when last returned and has one now.
previousPricePerNight, previousTotalPriceText and previousReturnedAt carry the earlier values. A hotel that shows no price in this run, or that is missing from this run, is not reported. What is remembered is per search (location, dates as you wrote them, adults, currency, sort and price limits); with +N dates the watched stay moves forward every day, so a change can come from the new dates. Use a sorted order for monitoring: with relevance, Google shows a different mix of hotels on each read. Do not put the same search in two overlapping schedules - the key-value store has no atomic update, so a lost record cannot be fully prevented, only made unlikely.
Free rows (not charged)
status | When |
|---|---|
no-results | Google lists no hotel for the search (for example a nightly price range nothing fits). |
location-resolved-elsewhere | Google searched a place whose name shares no word with what you wrote (for example a misspelling read as "United States"); check that it is the place you meant. The hotels for that place are still returned. Not raised for abbreviations like NYC or names in non-Latin scripts. |
list-not-in-page | For this wording Google loads the hotel list later in the browser; write the place alone. |
blocked | Google showed a check page or refused the request. The Actor does not try to get around Google's checks, so it stops the run there instead of guessing. Hotels whose booking sites could not be read because of this are not returned and not charged; the row says how many, and which locations were not searched. |
unreadable | Google's answer could not be read. Nothing is guessed and no hotel is reported as missing. |
bad-input | The input could not be used (a past date, an unknown currency...). Nothing was requested. |
no-change | Monitoring: nothing moved since the rows last returned. The check fee applies to the hotels compared. |
budget-reached | The run hit its maximum total charge; says what was not returned and that it was not charged. |
Pricing
- Hotel row: $4.99 per 1,000 on the Free plan, lower on paid Apify plans (down to $2.99 per 1,000). Booking sites are included in the row price.
- Monitoring check: $0.30 per 1,000 hotels compared in monitoring mode on the Free plan (lower on paid plans), whether or not the hotel changed. A hotel is compared only if the run's maximum total charge leaves room for its check and one hotel row.
- Free rows cost nothing.
Limits
- Prices are what Google shows a visitor from the United States on the day of the run; hotel prices change often.
- Google lists about 18-20 hotels per page; pages can overlap and the Actor drops repeats (
hotelId). - Speed measured on 2026-09-21: about 5 seconds per page of hotels and about 3 seconds per hotel for booking sites. A very large run (for example 1,000 hotels with booking sites, or many locations of 1,000 hotels) can pass the default run timeout of one hour; raise the timeout for such runs.
- Rating, reviews, stars, amenities, times and descriptions are only as complete as Google's listing (in the 2026-09-21 Paris check of 40 hotels: no star class for 24, no check-in time for 13, no description for 6).