Google Hotels Room Offers Scraper avatar

Google Hotels Room Offers Scraper

Pricing

from $0.05 / 1,000 observed room offers

Go to Apify Store
Google Hotels Room Offers Scraper

Google Hotels Room Offers Scraper

Extract Google Hotels room offers in EUR with providers, stay totals, cancellation and breakfast labels. Compare two snapshots for observed price changes and export JSON/CSV. Simple hotel-name or URL input; partial coverage, no AI key required.

Pricing

from $0.05 / 1,000 observed room offers

Rating

0.0

(0)

Developer

Monkey D. Scraping

Monkey D. Scraping

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Categories

Share

Extract observed Google Hotels room offers with room names, booking providers, displayed nightly prices, stay totals, cancellation terms and breakfast labels. Export the results as JSON, CSV or Excel from Apify. No Google account, AI key or OpenRouter subscription is required.

Price: $0.003 per start + $0.05 per 1,000 returned room offers. Snapshot comparison and changes CSV have no extra result event. Start fees apply even when the source returns no usable offers.

What you get

Each result is a room offer observed for your requested hotel, dates and adults. The Actor preserves the source text so you can check the evidence behind each condition. It does not infer amenities or calculate a stay total from rounded nightly prices.

Use it to collect booking-offer snapshots, inspect explicitly refundable offers, or feed your own hotel research workflow. Compare two runs by selecting a previous run’s snapshot storage or supplying exported JSON. The Actor does not maintain an automatic historical database or create schedules.

Quick start

  1. Enter a hotel name and city, such as Hotel Berna Milano, or paste a full Google Hotels property URL into the same list. Exact property links avoid ambiguous name searches.
  2. Choose both check-in and check-out dates using the calendars. Leave both blank for a two-night stay starting 30 days from the run's UTC date.
  3. Set the number of adults and run the Actor. Open Room offers for results and Collection status for counts or source errors.
{"hotels":["Hotel Berna Milano"],"adults":2,"maxOffersPerHotel":20}

The collector requests EUR, English labels, one room and an Italian market hint. Google can still vary providers by execution location or session: the market hint does not guarantee Italian-market inventory. Children and multiple rooms are unsupported. Up to 10 hotels and 200 returned offers per hotel; stays of 1–28 nights with check-in in the next 330 days.

For a known property, use its full Google Hotels URL containing /travel/hotels/entity/. Names and links can be mixed in the same list. Links are normalized and duplicate links to the same property are removed before collection. Only HTTPS google.com and www.google.com property URLs are accepted; shortened, Maps and external links are rejected.

{"hotels":["https://www.google.com/travel/hotels/entity/ChcIrMPXnMPLhPV0GgsvZy8xdGQxdGIwNhAB"],"adults":2,"maxOffersPerHotel":20}

Dates, currency and guest settings embedded in pasted URLs are discarded. The form controls the requested stay. Before returning offers for an exact link, the Actor checks the source page's canonical property ID. Missing or different IDs cause an explicit error. This confirms property identity, not complete offer coverage or improved availability.

Compare two observations

Quick repeat: after a complete collection where every hotel returns offers without truncation, open Ready-to-use input for next comparison. Copy its JSON into the next run’s JSON input tab and start. It already includes the exact stay, filters, hotels and baseline reference. This shortcut is not produced for empty, failed or truncated collections: review their coverage before choosing a baseline. Past stay dates still fail validation.

  1. Run normally. Its key-value store contains Snapshot for next comparison (SNAPSHOT). Find its storage ID in the run’s Storage section.
  2. Start a later run with the same explicit check-in/check-out dates, adults, filters and offer limit. Relative default dates change across days, so use the dates recorded in the snapshot.
  3. In Compare with an earlier run, select that key-value store using Previous run storage. Alternatively, export and paste the SNAPSHOT JSON. Do not fill both options. Open Observed changes (CHANGES) after completion.

Download Changes for Excel (CSV) for a spreadsheet with one row per comparison event: before/after prices, numeric differences, stay context, source links and evidence. No events means a header-only CSV; check CHANGES JSON for baseline/unchanged counts. UTF-8 with BOM preserves accented names in Excel. Potential formula-like source text is prefixed with an apostrophe in CSV; JSON retains the original text. Numeric price differences remain numbers.

The normal dataset still contains current room offers only. Snapshot and comparison JSON are separate key-value records; no extra comparison event is billed. No AI key or second account is required. The storage picker requests READ access only to the selected storage; the Actor remains on limited permissions and never modifies the selected baseline. If storage has expired or is inaccessible, use an exported snapshot.

Comparison uses exact hotel ID, provider, room label, stay, currency, cancellation and breakfast terms. A unique match on each side can produce observed_price_changed, with before/after prices, difference and source evidence. Multiple matches are ambiguous and are not compared automatically. Even exact labels do not prove equivalence of the underlying bookable product.

first_observed_in_comparison means absent from the supplied sample, not newly launched. not_observed_in_current_sample means not seen this time, not removed or sold out. Changes in conditions create separate observations rather than an unsupported claim that one tariff changed. Review collection errors and truncation. Empty runs do not overwrite your supplied baseline; the output recommends keeping it for review. The supplied snapshot is not independently authenticated.

This is a user-selected two-snapshot comparison, not automatic latest-run discovery or continuous monitoring. Up to 2,000 baseline offers and a 4 MB snapshot are supported. Different stay settings or malformed snapshots fail before collection.

Optional filters

  • Only free cancellation: retain an explicit free-cancellation label. A deadline is returned only when displayed.
  • Only breakfast included: retain an explicit included/free breakfast label. A room name mentioning breakfast or “breakfast available” is insufficient.
  • Maximum offers per hotel: limit matching results, ordered by the displayed stay total. A lower limit does not reduce the single source request per hotel or guarantee the cheapest offer in the market.

Unknown conditions do not pass filters. If both filters are enabled, both must be satisfied by the same offer.

Output fields

FieldMeaning
hotelName, hotelIdProperty resolved by Google. Check these for similarly named hotels.
provider, roomNameBooking provider and room-offer name as displayed.
checkIn, checkOut, adultsRequested stay, confirmed against source controls before emitting results.
currencyEUR. Unsupported source prices produce an explicit error, not a false empty result.
nightlyDisplayedNightly price shown in the source offer. Do not assume tax treatment or multiply it to reconstruct the total.
stayTotalDisplayedSource-displayed total for the stay; read independently of the nightly price.
freeCancellation, breakfastIncludedtrue or false only with explicit evidence; otherwise null. Blank cells in exports can mean unknown.
cancellationDeadlineDisplayedSource wording, without an invented year, cutoff time or time zone.
evidenceDisplayed offer text, including prices and conditions.
sourceUrl, observedAtGoogle Hotels query for the stay and observation time in UTC. Reopening the URL may show different offers.
offerIdHash of this offer snapshot. A price or condition change creates a different ID; not a permanent room identifier.
coverage, taxTreatmentExplicit limitations on completeness and tax verification.

The default dataset contains deduplicated observed offers. Identical offers are deduplicated within each hotel lookup. Room names are not matched across providers and different rooms must not be treated as equivalent.

Empty results and errors

SUMMARY in the default key-value store records every hotel's resolution, observed/matching/returned counts, truncation, collection time and errors.

  • offers_observed: at least one offer returned.
  • no_matching_observed_offers: offers were observed but none satisfied the filters.
  • no_detailed_offers_observed: no parseable detailed offers were exposed in this response. This does not mean sold out.
  • error: the request, property resolution, stay confirmation or price parsing failed. An unresolved hotel includes resolvedNamesToVerify where available; verify the property before using a suggested name.

A run fails when all hotel lookups fail. A mix of successful and failed hotels is marked partial in the summary. Storage failures fail the run. Resurrecting a run with existing dataset rows is rejected to prevent duplicate results and charges; start a fresh run instead. complete is always false because the Actor cannot establish complete market inventory.

Coverage and price limitations

Google exposes a partial, rotating selection of detailed offers, often from featured booking partners. Identical requests can return different providers and offer counts. This Actor does not provide complete inventory, certified rate parity, guaranteed lowest prices or final checkout prices. Taxes and fees are not independently verified.

The HTML and encoded stay parameters are undocumented and may change. Property name matching is a guard against obvious mismatches, not a guarantee against similarly named properties. Use an exact Google Hotels property link where possible. Name searches still require checking the resolved property before relying on the output.

No reservations, checkout, AI analysis, automatic schedules, external change notifications or automatic historical database are included.

Pricing and reliability

The price is $0.003 per start + $0.05 per 1,000 returned offers ($0.00005 each), with no per-hotel or filter event. A run returning 54 offers has an event price of $0.0057. No claim is made to be the cheapest alternative: some products charge per hotel and include provider offers.

Set Maximum cost per run in Apify's run options, not the input JSON. The minimum is $0.00305 (start plus one offer). The Actor computes its row allowance before fetching, truncates results to the affordable count, and skips remaining hotels when exhausted. SUMMARY.stopReason and per-hotel statuses distinguish budget/time stops. The collection stops starting new hotel lookups after 85 seconds; individual source requests have a 15-second timeout. A response that does not confirm the requested stay may be retried once before any offers are saved, if enough time remains. Persistent mismatch fails that lookup; SUMMARY.sourceAttempts is recorded per hotel.

Source coverage varies across runs and execution locations. In development checks, a property with zero detailed offers later exposed room offers, while other properties continued to expose no detailed rooms. This is why absent observations are never labelled sold out or removed. Check Collection status alongside your results.

Frequently asked questions

Does this monitor prices automatically? No. Run a new observation and select a previous snapshot to compare. No schedules or notifications are created for you.

Can I compare refundable and non-refundable rooms? They are separate observed conditions. Price-change events require matching provider, room label and terms; ambiguous variants are not paired automatically.

Does a missing offer mean sold out? No. Google may expose a different subset or no detailed room cards. The output reports observations, not complete inventory.

Which markets and currencies are supported? EUR, English source labels, adults in one room, with an Italian market hint. The hint does not guarantee local inventory. Children, multiple rooms and other currencies are unsupported.

Is this affiliated with Google? No. This is an independent data extraction tool, not an official Google Hotels API.