Google Hotels Scraper: Prices by Date & Site avatar

Google Hotels Scraper: Prices by Date & Site

Pricing

from $2.40 / 1,000 hotel results

Go to Apify Store
Google Hotels Scraper: Prices by Date & Site

Google Hotels Scraper: Prices by Date & Site

Google Hotels prices for any city, hotel and dates: rates from every booking site with links, taxes, ratings, amenities and photos, plus price calendars and changes-only price monitoring. Hotel price comparison from $3 per 1,000 hotels; compact JSON for AI agents.

Pricing

from $2.40 / 1,000 hotel results

Rating

0.0

(0)

Developer

CleanPull

CleanPull

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

6 hours ago

Last modified

Share

Get Google Hotels prices for any city, area or hotel and any dates: the nightly and total price with and without taxes, every booking site (Booking.com, Expedia, Agoda, Hotels.com, the hotel's own site and more) with booking links, room-level rates with free-cancellation deadlines, ratings, review breakdowns, amenities, location and photos. Price whole calendars of dates in one run, and monitor prices with a changes-only mode that returns just what moved since the last run. Fast, reliable HTTP requests (no browser), from $3 per 1,000 hotels.

What you can do with it

  • Compare hotel prices for a trip: "Hotels in Lisbon for 10–13 November, 2 adults, 4 stars and up, under €200 a night, sorted by price."
  • Price a whole calendar: "Cheapest night to stay in Rome in December" — price every check-in date in a range, for one or several lengths of stay, in one run.
  • Watch your competitors' rates (revenue management): list your hotel and your competitive set by name, schedule the run daily with +30 (30 days ahead), and get only the price changes.
  • Check rate parity: every booking site's price for a hotel next to the hotel's own site, flagged with isOfficial, plus cheapestSource and officialSiteRatePerNightWithTaxes.
  • Find deals and drops: Google's deal labels ("25% less than usual") and price-drop alerts from monitoring.
  • Research a market: hundreds of hotels per city with star class, rating, review counts, review sentiment by topic (service, location, breakfast…), amenities and coordinates.
  • Vacation rentals: apartments and houses with bedrooms, beds, bathrooms and capacity.
  • Feed an AI agent, sheet or dashboard: flat rows (one per hotel and booking site), only the fields you choose, and a run summary with the outcome of every search.

Why this actor

  • It works, and tells you when it can't. Plain HTTP calls to Google Hotels' own data endpoint with automatic session rotation and proxy escalation (direct → datacenter → residential only when needed). A blocked or failed search is retried, then reported in RUN_SUMMARY — never returned as "0 hotels". A place Google doesn't recognise is reported instead of silently returning hotels from somewhere else (Google falls back to hotels near the caller).
  • Switch without changing your code. Already using a Google Hotels actor? The input keys locations, checkInDate, checkOutDate, adults, currency, languageCode, countryCode, maxResults, requestTimeoutSecs and proxyConfiguration work the same here, and every record also carries that actor's record field names (name, price, priceValue, rating, reviewCount, hotelClass, starRating, latitude, longitude, placeId, hotelDescription, imageUrl, googleMapsUrl, googleHotelsUrl, location, checkInDate, checkOutDate, currency, scrapedAt). Change the actor id and keep your schedules and parsers.
  • Changes-only monitoring. With monitorMode, each run is compared with the last run of the same search: you get price drops and rises (above your threshold), hotels selling out or coming back, and new or removed hotels — and unchanged hotels cost a sixth of a result.
  • Dates that keep working on a schedule. Write +30 instead of a date and a daily schedule always looks 30 days ahead (monitoring compares "the stay 30 days ahead" day after day).
  • Every filter Google Hotels has: sort, price range, guest rating, star classes, 19 amenities, 9 hotel types, hotel brands by name, free cancellation, special offers, children with ages, vacation rentals.
  • Taxes both ways. Every price comes with and without taxes and fees, as numbers and as Google displays them.

Input

FieldTypeWhat it does
locationsarray of stringsPlaces to search: "Lisbon", "Shibuya, Tokyo", "near Times Square". Each runs "hotels in
searchQueriesarray of stringsFree-form Google Hotels searches, as typed in Google
hotelsarray of stringsSpecific hotels by name, e.g. "Avenida Palace Lisbon"
startUrlsarray of URLsGoogle Hotels hotel pages or search pages
propertyTypehotels, vacation-rentalsWhat to search (default hotels)
checkInDate, checkOutDateYYYY-MM-DD or +NThe stay; +N is N days after the run date (default check-in +14, 1 night)
nightsarray of integersLengths of stay to price, e.g. [1, 3, 7]
checkInDatesarray of datesMore check-in dates
checkInDateTo, dateStepdate, integerPrice every check-in date up to this date, every dateStep days
adults, childrenAgesinteger, arrayGuests (up to 30 adults), e.g. 2 and [4, 9]
sortByrelevance, lowest-price, highest-rating, most-reviewedGoogle's sort order
minPrice, maxPriceintegersPrice per night range, in currency
minRating3.5, 4, 4.5Minimum guest rating
hotelClass, hotelClassesinteger, arrayMinimum stars, or exact star classes
amenitiesarrayfree-wifi, free-breakfast, pool, spa, pet-friendly, free-parking, ev-charger… (19)
hotelTypesarrayhostel, bed-and-breakfast, boutique-hotel, spa-hotel, beach-hotel, apartment-hotel…
brandsarray of stringsBrand names, e.g. "Marriott Bonvoy" (with all its brands) or "Moxy"
freeCancellation, specialOffersbooleanOnly free-cancellation offers / only hotels with offers
maxResultsintegerHotels per search and stay (default 20, up to 1,000)
maxItemsintegerStop after this many results in the run (a cost cap)
includeBookingSourcesbooleanEvery booking site's price and link, and review scores by site (one extra request per hotel)
includeRoomRatesbooleanRoom-level rates with cancellation terms
monitorMode, monitorNameboolean, stringChanges only, compared with the last run under the same name
changeTypesarraynew, price-drop, price-rise, sold-out, back-in-stock, removed
priceChangePercent, priceChangeMinAmountnumbersIgnore smaller price moves (default 1%)
removedAfterRunsintegerMissing runs in a row before a hotel counts as removed (default 2)
currency, languageCode, countryCodestringsEUR, de, de: prices, language and the region Google searches from
outputFormatnested, flatOne record per hotel, or flat rows (one per hotel and booking site)
fieldsarray of stringsReturn only these fields (dotted paths allowed)

Example inputs

A trip search with filters:

{
"locations": ["Lisbon"],
"checkInDate": "2026-11-10",
"checkOutDate": "2026-11-13",
"currency": "EUR",
"sortBy": "lowest-price",
"hotelClass": 4,
"maxPrice": 200,
"amenities": ["free-wifi", "pool"],
"maxResults": 50,
"includeBookingSources": true
}

A daily competitor-rate monitor (schedule it once a day):

{
"hotels": ["Hotel Mundial Lisbon", "Avenida Palace Lisbon", "Hotel Avenida Lisbon"],
"checkInDate": "+30",
"nights": [1, 2],
"currency": "EUR",
"includeBookingSources": true,
"monitorMode": true,
"monitorName": "lisbon-compset",
"changeTypes": ["price-drop", "price-rise", "sold-out", "back-in-stock"],
"priceChangePercent": 3
}

A price calendar: every Friday-to-Sunday stay in December:

{
"locations": ["Rome"],
"checkInDate": "2026-12-04",
"checkInDateTo": "2026-12-25",
"dateStep": 7,
"nights": [2],
"sortBy": "lowest-price",
"maxResults": 10
}

Output

One record per hotel and stay (shortened; a real record from 5 October 2026):

{
"hotelName": "Hotel Mundial",
"hotelId": "16189655629992449383",
"propertyType": "hotel",
"position": 1,
"searchQuery": "hotels in Lisbon",
"location": "Lisbon",
"resolvedLocation": "Lisbon",
"checkInDate": "2026-11-10",
"checkOutDate": "2026-11-13",
"nights": 3,
"adults": 2,
"currency": "EUR",
"available": true,
"pricePerNight": 99.59,
"pricePerNightDisplay": "€100",
"pricePerNightWithTaxes": 114,
"totalRate": 299,
"totalRateWithTaxes": 341,
"deal": "25% less than usual",
"hotelDescription": "Straightforward rooms in a relaxed hotel offering a traditional restaurant & a rooftop bar.",
"hotelClass": "4-star hotel",
"starRating": 4,
"overallRating": 4.3,
"reviewCount": 7199,
"ratingsBreakdown": [{ "stars": 5, "percent": 54, "count": 3705 }],
"reviewsBreakdown": [
{
"name": "Breakfast",
"sentiment": 0.43,
"total_mentioned": 276,
"positive": 188,
"negative": 60
}
],
"gpsLatitude": 38.7150471,
"gpsLongitude": -9.1369825,
"address": "Praça Martim Moniz 2, 1100-341 Lisboa, Portugal",
"phone": "+351 21 884 2000",
"website": "https://www.hotel-mundial.pt/",
"amenities": [
"Breakfast ($)",
"Free Wi-Fi",
"Parking ($)",
"Air conditioning",
"Bar",
"Restaurant"
],
"nearbyPlaces": [
{
"name": "Tram 28",
"category": "attraction",
"transportations": [{ "type": "transit", "duration": "1 min" }]
}
],
"googleHotelsUrl": "https://www.google.com/travel/hotels/entity/ChgIrYeF1aLy5vM5GgwvZy8xamt2dDlkdmcQAQ/prices?hl=en&gl=us&curr=EUR&checkin=2026-11-10&checkout=2026-11-13",
"bookingSources": [
{
"vendorName": "Hotel Mundial",
"isOfficial": true,
"isSponsored": false,
"numGuests": 2,
"ratePerNight": 100,
"ratePerNightWithTaxes": 114,
"totalRate": 299,
"totalRateWithTaxes": 341,
"bookingUrl": "https://www.google.com/travel/lodging/clk?..."
},
{
"vendorName": "Expedia.com",
"isOfficial": false,
"ratePerNight": 146,
"ratePerNightWithTaxes": 163,
"totalRate": 439,
"bookingUrl": "https://www.google.com/travel/lodging/clk?..."
}
],
"bookingSourceCount": 27,
"cheapestSource": "Hotel Mundial",
"cheapestBasis": "with-taxes",
"cheapestRatePerNightWithTaxes": 114,
"officialSiteRatePerNightWithTaxes": 114,
"roomRates": [
{
"vendorName": "Hotel Mundial",
"roomName": "Classic Room - Standard rate Room Only",
"ratePerNight": 99.59,
"ratePerNightWithTaxes": 113.57,
"totalRate": 298.78,
"totalRateWithTaxes": 340.71,
"freeCancellation": false,
"freeCancellationUntil": null
}
],
"scrapedAt": "2026-10-05T19:53:46.724Z"
}

location is what you asked for; resolvedLocation is the place Google searched. cheapestSource compares sites on one basis (cheapestBasis): including taxes among the sites that show it, otherwise before taxes. fields paths reach into lists too: ["hotelName", "bookingSources.vendorName", "bookingSources.ratePerNightWithTaxes"].

available: false with null prices means Google shows no price for those dates (sold out or not bookable). Vacation rentals add essentialInfo (for example "Entire apartment", "Sleeps 4", "2 bedrooms").

In monitoring mode each record starts with the change: changeType, previousPricePerNight, priceChange, priceChangePercent and previouslySeenAt. Removed hotels come as a short record with what was last known.

Every run also writes RUN_SUMMARY to the key-value store: the outcome (COMPLETE, PARTIAL, NO_CHANGES, EMPTY or FAILED), counts of results, changes and booking-source lookups, warnings, and the reason for any failed search.

Pricing

Pay only for results delivered. Blocked or failed searches are never charged.

EventFree and BronzeSilverGold
Hotel result (one hotel for one stay, with price and listing data)$3.00$2.70$2.40
Booking sources and room rates (add-on per hotel, when switched on)$2.00$1.80$1.60
Change (monitoring mode: one changed hotel)$3.00$2.70$2.40
Unchanged hotel checked (monitoring mode)$0.50$0.45$0.40

Prices are per 1,000; your tier depends on your Apify plan. Each run also has a $0.00005 start fee. Flat mode is billed per hotel, not per row.

How monitoring works

Each search (place or hotel × stay × filters) keeps its own memory under your monitorName. The first run reports every hotel as new and sets the baseline; later runs report only changes. Prices compare per night before taxes. A hotel counts as removed only after it is missing from removedAfterRuns searches in a row that reached the end of Google's results. With a maxResults cap, Google's ranking reshuffles which hotels make the top N, so hotels entering your top N show as new: for exact watch lists, list hotels by name (hotels), or sort by price.

Limits

  • Google shows a few hundred hotels per search at most (about 200 when sorted by price). For larger maxResults the actor runs extra passes (other sort orders and price bands, or continuing from the last price when sorted by price), so big cities return up to 1,000 hotels; later passes follow the first in the results.
  • Prices are what Google Hotels shows a logged-out visitor in the chosen region and currency; booking sites can show different prices to signed-in members.
  • reviewSources holds each site's rating and review count with the few sample reviews Google includes; it is not a full review export.
  • Amenity filters are the ones Google Hotels offers; any amenity Google lists for a hotel is returned in amenities.
  • Google answers a place it doesn't recognise with hotels near the caller; this actor asks again, then reports that search as failed instead.
  • Check-in dates already past are skipped with a warning (a scheduled run keeps its other dates); use +N dates in schedules.
  • Two runs with the same monitorName and search at the same time share one memory; schedule them apart.
  • Nothing found: a place Google does not recognise, or a hotel name with no match, is not a failure: when no search finds anything, the run still succeeds, with one free recordType: "unreadable" row per search giving the reason; nothing is charged. A run near its time limit stops starting searches, delivers what it found and lists the rest in RUN_SUMMARY.

Changelog

  • 0.1.x, reliability (2026-10-24): runs that find nothing (places Google does not know, hotel names with no match, invalid dates) end SUCCEEDED with a free unreadable row saying why, instead of FAILED; dates and currency are checked in the input form; a run stops starting searches before its time limit, never TIMED-OUT. A run whose every search Google blocked still fails. Prices and events unchanged.
  • 0.1 (October 2026): searches by place, query, hotel name and URL; every Google Hotels filter; booking sources and room rates; price calendars; vacation rentals; changes-only monitoring; flat output and field selection; input compatible with other Google Hotels actors.