Google Hotels Scraper | Stay Prices & Offers avatar

Google Hotels Scraper | Stay Prices & Offers

Pricing

from $0.08 / 1,000 results

Go to Apify Store
Google Hotels Scraper | Stay Prices & Offers

Google Hotels Scraper | Stay Prices & Offers

Export Google Hotels and vacation rentals with prices for selected dates, occupancy and currency. Get room offers, property details, reviews and photo links.

Pricing

from $0.08 / 1,000 results

Rating

0.0

(0)

Developer

Eli J

Eli J

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Categories

Share

What you can export

Use this Google Hotels scraper and stay-price API to compare hotels and vacation rentals for selected dates, occupancy and currency. Export available property details and nested room offers, or collect reviews, full-size photo links and autocomplete suggestions. Prices are source observations, not booking guarantees.

For hotel search and details, one result is one property for one stay, including its returned room offers. With prices requested, hotels without returned offers are omitted by default; in cards mode, a numeric nightly card price determines whether a hotel is priced. Set includeUnpriced: true to emit and bill unpriced rows. The key-value store's COVERAGE record always counts unique unpriced property/stay records encountered as unpricedHotels, including omitted rows. Metadata-only includePrices: false still emits hotel rows and does not count them as unpriced. Reviews, photos and autocomplete each produce one dataset row per record. Failed inputs appear only in the key-value store's ERRORS record. Dataset exports are available as JSON, CSV and Excel through Apify.

Try the shipped prefill

The input form supplies these example values. Prefills are not API defaults; check the billing and limits before running.

{
"mode": "search",
"queries": [
"Austin, Texas"
],
"checkInDate": "tomorrow",
"checkOutDate": "+2days",
"currency": "USD",
"maxResults": 20
}

Dates resolve in UTC at run start, so this example remains current. For search-page prices without per-property detail requests, add "offerLevel": "cards". This keeps the hotel row schema and billing event, using the selected-stay amounts Google includes in each card. Detail-only scalars such as phone and website remain null when absent from the card; offers, vendors, types, photos and reviews are empty arrays. Outside English, hotel cards have empty amenities and excludedAmenities labels; amenityCodes are retained. Rental amenity labels come directly from the card when present. This mode requires destination search without hotelNames, hotelUrls, includeReviews or freeCancellationOnly; use rooms or sources for those inputs.

To compare fixed stays, use:

{
"mode": "details",
"hotelNames": ["Austin Motel"],
"stays": [
{"checkInDate": "2026-12-14", "checkOutDate": "2026-12-17", "adults": 2, "childrenAges": [7], "rooms": 1},
{"checkInDate": "2026-12-21", "checkOutDate": "2026-12-24", "adults": 4, "rooms": 2}
],
"currency": "EUR",
"languageCode": "fr",
"countryCode": "fr",
"includeReviews": true,
"maxReviews": 20
}

For reviews or photos, set mode to reviews or photos and supply hotelUrls or hotelNames. Use maxResults to cap individual records; maxResults: 0 follows source pagination within your time and charge budgets. These modes process each input once, regardless of stays or sweepDays. For autocomplete, use {"mode":"autocomplete","queries":["Austin Mot"],"maxResults":10}.

Output

Selected fields from a recorded property/stay row; prices are a snapshot:

{
"recordType": "hotel",
"name": "Aloft by Marriott Austin Northwest",
"checkInDate": "2026-10-08",
"checkOutDate": "2026-10-09",
"adults": 2,
"currency": "USD",
"nightlyPrice": 90.70703,
"totalPrice": 90.70703
}

Every row has recordType, query, position (one-based), sourceUrl and scrapedAt (UTC ISO timestamp). Hotel, review and photo rows identify the requested property with entityToken and resolved stay context: checkInDate, checkOutDate, nights, adults, childrenAges, rooms, currency, languageCode and countryCode.

Output fieldsMeaning
hotelId, placeId, cidHex, cidDecimal, hotelUrl, mapsUrlGoogle identifiers as strings and source links.
name, propertyType, description, address, phone, website, countryPublished property identity; propertyType is hotel or vacationRental. Description includes the source's longer paragraphs.
latitude, longitudeDegrees.
types, totalResults, childrenPublished Google Maps subtype labels, Google search total (null for direct lookup), and selected child count.
hotelClass, hotelClassLabel, rating, reviewCountHotel stars, label, five-point guest rating and count.
reviewHistogram, reviewTopics, reviewSourcesHistogram stars/percent/count; topic mentions, positiveCount, negativeCount and original sourceSentiment (unscaled); each review source's name/icon/rating/valueScale/reviewCount.
checkInTime, checkOutTimePublished local clock strings.
amenities, excludedAmenities, amenityCodes, essentialInformationAvailable/unavailable labels, original numeric codes with availability/qualifier/note, and source notes.
nearbyPlaces, locationRatingNearby name/image/travelTimes (modeId and display duration)/rating/reviewCount/description/coordinates/CID/type/url; neighborhood and score categories on a five-point scale.
thumbnail, images, photosImage links; photo metadata described below.
nightlyPrice, nightlyPriceWithTaxes, totalPrice, totalPriceWithTaxes, taxes, feesNumeric amounts in the selected currency. Total is for the whole stay; nightly gross uses the source nightly value, or total gross divided by nights when absent. Null means Google did not provide that component.
nightlyPriceDisplay, totalPriceDisplay, bookingLink, dealOriginal formatted price strings, booking link and source deal marker. Links are returned without visiting booking destinations.
offers, vendorsAll returned source/room rates: vendor/sourceId/icon, official/sponsored flags (null when absent), roomName/images, selected currency, nightly/total amounts and display strings, bookingLink, decoded partnerUrl where present, lowest (each source's cheapest rate), freeCancellation, cancellationText, cancellationDateText, cancellationShortDate, cancellationTime, cancellationDeadline and maxGuests (null on the captured rate route). Cancellation deadlines use the measured English month/day or French day/month order and check-in year; other locale orders remain null. Original display and short-date text are retained.
reviews, reviewsExtractedOptional nested reviews and their count.
bedrooms, bathrooms, beds, maxGuestsSource rental counts, absent for many hotels.
markdownContentProperty name and complete description as Markdown.

Review rows contain reviewId, full text, rating and its valueScale, relativeDate, date (always null; the captured Google review route supplies relative dates), source/sourceIcon, user (name/link/photo), subRatings (categoryId/rating/valueScale), and ownerResponse (text/relativeDate). The source's relative dates are preserved rather than converted into guessed timestamps.

Photo rows contain photoId, thumbnail, imageUrl (source full-size dimensions), width/height and thumbnailWidth/thumbnailHeight in pixels, caption, sections, source (name/link/photo), date and the original numeric timestamp when available. Image bytes are not downloaded by the Actor.

Autocomplete rows contain value, type (original Google kind), highlights, location, thumbnail and propertyToken (Google knowledge identifier). Autocomplete uses no price context.

Inputs

FieldTypeDefaultDescription
modestringsearchsearch, details, reviews, photos or autocomplete.
queriesarray[]Batch destination searches; exact hotel names in direct modes; prefixes in autocomplete.
hotelUrlsarray[]Google Hotels entity URLs/tokens, Google Maps place/CID URLs, Place IDs or Maps short links.
hotelNamesarray[]Batch exact hotel names. Ambiguous names produce ERRORS; use a property URL or Place ID.
checkInDatestringtomorrowISO date or today, tomorrow, +Ndays/weeks/months/years; UTC. Omitted or blank: tomorrow.
checkOutDatestringcheck-in +1 dayISO or relative date. Omitted or blank: one day after check-in.
staysarraytop-level stayBatch objects with checkInDate, checkOutDate, adults, childrenAges and rooms; omitted uses top-level stay, [] does no work.
currencystringUSDThree-letter currency code. Returned price context must match.
languageCodestringenGoogle language code such as en, fr or pt-BR.
countryCodestringusTwo-letter Google market code such as us or fr.
adultsinteger2Adult occupancy per stay; 1–50.
childrenAgesarray[]Child ages in years, each 0–17; at most 50 children.
roomsinteger1Rooms per stay; 1–8.
sweepDaysinteger0Add daily shifted stays through this offset; 0 means only the original stay, maximum 60.
maxResultsinteger20Maximum billable rows per input and stay (once per input for reviews/photos/autocomplete); 0 drains source within time/charge budget.
maxPagesinteger0Maximum source pages per input/stay or nested review collection; 0 drains within time/charge budget.
includePricesbooleantrueReturn selected-stay prices from OTA sources/rooms or search cards. False leaves price fields null and offers empty.
includeUnpricedbooleanfalseWith prices requested, emit and bill hotels without returned offers (or a nightly card price in cards mode). Both choices count them in COVERAGE.
offerLevelstringroomsrooms includes room-level offers; sources selects one cheapest source-level rate per sourceId; cards returns destination search cards and list prices without detail hydration.
maxOffersinteger0Return the N cheapest nested offers per hotel; 0 includes all source-returned offers, maximum 500.
includeReviewsbooleanfalseInclude nested reviews in hotel rows; standalone reviews mode emits one row per review.
maxReviewsinteger20Nested review cap; 0 drains within page/time budgets, maximum 5000.
reviewSortstringhelpfulSource review ordering.
reviewCategorystring``Source review topic filter, such as Service or Bar.
sortstringrelevanceGoogle search ordering: relevance, price, rating or reviewCount.
minPricenumber0Minimum numeric nightly price in selected currency; 0 disables.
maxPricenumber0Maximum numeric nightly price in selected currency; 0 disables.
minRatingnumber0Minimum Google guest rating on a five-point scale; 0 disables.
hotelClassarray[]Allowed hotel star classes, integers 1–5.
amenitiesarray[]Google amenity filter labels listed below; Google search classification; direct targets ignore filters.
propertyKindsarrayhotel, vacationRentalAllowed hotel/vacationRental families; [] does no work.
propertyTypesarray[]Google search subtype IDs 1–24; [] allows all. Applies to destination searches.
minBedroomsinteger0Minimum source-reported rental bedrooms; 0 disables.
minBathroomsinteger0Minimum source-reported rental bathrooms; 0 disables.
freeCancellationOnlybooleanfalseSearch for a refundable rate and quote that selected rate; requires includePrices for searches.
specialOffersbooleanfalseSearch for a source-marked deal; requires includePrices for searches.
maxRetriesPerRequestinteger3Ordinary request attempts including first, 1–8. Default direct blocks have the separate cap of ten datacenter fallback attempts.
maxRunSecondsinteger270HTTP work budget in seconds; 1–86400. Partial results remain in dataset, unfinished work in ERRORS.
rotateAfterRequestsinteger0Retire proxy session after N reads; 0 disables proactive rotation.
proxyConfigurationobjectdirectOptional Apify proxy configuration. Omitted uses anonymous direct egress, with block-triggered datacenter fallback; explicit configurations are honoured.

Search subtypes: 12 beach hotel, 13 boutique, 14 hostel, 15 inn, 16 motel, 17 resort, 18 spa hotel, 19 B&B, 20 other and 21 apartment hotel. Google rental subtype IDs occupy 1–11. These subtype and sort controls apply to destination searches; direct-property inputs retain their exact identity.

Amenity labels: Free Wi-Fi, Free breakfast, Restaurant, Bar, Kid-friendly, Pet-friendly, Free parking, Parking, EV charger, Room service, Fitness center, Spa, Pool, Indoor pool, Outdoor pool, Air-conditioned, Wheelchair accessible, Beach access, All-inclusive available. Search uses Google's filter classifications. Price/rating/class/bedroom/bathroom, amenity, cancellation and deal filters apply to destination searches. Exact hotel targets are returned regardless of these filters. Filters do not apply to standalone reviews, photos or autocomplete.

Coverage and limits

Public Google Hotels properties and vacation rentals, Google-provided OTA room rates, review/gallery continuations and autocomplete. Supply Google Travel entity URLs/tokens, Google Maps Place IDs/CIDs/URLs/short links, or exact hotel names. Names must match one unique autocomplete or search property exactly; unresolved or ambiguous names go to ERRORS with candidate names and guidance. No OTA website crawling, login or bookings.

Different stays are separate hotel rows. Duplicate properties across searches are emitted once per stay. Reviews and photos are deduplicated per property within a run. Limits are per input/stay, and 0 drains what the source exposes within the other budgets. Google may stop pagination or offer fewer results than a limit. Source availability, prices and field presence vary by stay, occupancy, market and locale; empty arrays and nulls are preserved. Returned price context is checked against requested dates, occupants, rooms and currency before billing.

English property metadata and room offers use Google's compact batched RPC route. Other locales retain property HTML for their published amenity labels. Published Maps subtypes are read concurrently. Enrichment windows contain at most 20 properties and are bounded by maxResults and the native charging manager's remaining dataset-event allowance.

Default egress is anonymous direct. A Google HTTP 403/429, a redirect to consent, interstitial or /sorry/, a cross-host redirect from a data request, or a challenge body containing upgrade your browser or /sorry/ triggers Google-capable datacenter BUYPROXIES94952 retries with fresh sessions, at most ten fallback attempts per request. The next request returns to direct egress. COVERAGE records the attempt count as datacenterFallbacks. Redirect status, Location and request class are logged; same-route redirects follow at most five hops within the run deadline. Valid framed RPC data is parsed as data even when property or guest text mentions a challenge. Other transient or malformed responses follow maxRetriesPerRequest. Explicit proxyConfiguration is honoured, with no automatic proxy substitution. Residential proxies can be explicitly selected and increase your cost. Photo links beginning with // are normalized to HTTPS.

A binding maximum-charge limit stops further fetching. Successfully written rows remain available; handled failures go to ERRORS. If dataset delivery cannot be confirmed, fetching stops and the run fails; inspect ERRORS and any delivered rows. If every attempted input fails, the run fails with a short status message. Valid empty results and {} exit successfully; empty input prints guidance and starts no source work. Partial work may remain when time, pages or charge budget stops a deep collection. There is no guarantee that every Google property, offer, review or photo is exposed.

Billing

One result event bills one hotel or rental per stay, review, photo or autocomplete row; nested offers are included in the hotel row. Current rates per 1,000 rows are $0.09 on FREE, $0.089 on BRONZE, $0.08 on SILVER and $0.075 on GOLD, PLATINUM and DIAMOND. Apify also applies the $0.00005 Actor Start event, one event per allocated GB of memory with a minimum of one. Check the current Pricing tab before running.

Support

Include the run URL, mode, affected input and expected source observation when reporting a problem through the Actor's Issues tab.

Search cursors stay on one session by default. A classified session change restarts discovery and deduplicates previously emitted properties.