Hotel Rate Monitor: Google Hotels OTA Prices & Parity avatar

Hotel Rate Monitor: Google Hotels OTA Prices & Parity

Pricing

from $4.50 / 1,000 hotel + stay checkeds

Go to Apify Store
Hotel Rate Monitor: Google Hotels OTA Prices & Parity

Hotel Rate Monitor: Google Hotels OTA Prices & Parity

Track hotel prices on Google Hotels from every booking site (Booking.com, Expedia, Agoda, the hotel's own site) for your dates. Rate parity, a 12-month price calendar and, on scheduled runs, only the price changes since the last run.

Pricing

from $4.50 / 1,000 hotel + stay checkeds

Rating

0.0

(0)

Developer

SteadyScrape

SteadyScrape

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

19 hours ago

Last modified

Security

Limited permissions

Share

Hotel Rate Monitor checks the prices Google Hotels shows for the hotels and dates you choose, from every booking site at once: Booking.com, Expedia, Agoda, Hotels.com, Trip.com, Vio.com and the hotel's own website. It tells you which site is cheapest, whether an OTA is undercutting the hotel's direct rate (rate parity), and, when it runs on a schedule, only what changed since the last run. It's built for revenue managers, hotel owners, travel agencies, deal sites and analysts. You pay per hotel and date checked, never for hotels that weren't found, sold-out dates or failed checks. Prices start at $0.006 per hotel and date checked ($6 per 1,000 checks, less on paid Apify plans).

Prices are sourced from Google via the DataForSEO API, not a headless browser. That means no captchas, no proxies to rotate and no broken runs when Google changes its page layout. Reliability is the main point of this Actor.

What you can do with it

  • Rate shopping for your comp set: check your hotel and 5-20 competitors for the next 30, 60 and 90 days every morning, and get a sheet of every site's price.
  • Rate parity monitoring: catch an OTA selling your rooms below your direct rate (parityStatus: undercut), with the site name and the percentage.
  • Price-change alerts: schedule it with a Monitor ID and get only the change rows (price up/down per site, new lowest site, sold out, parity break) in Slack, email or a webhook.
  • Seasonality and pricing gaps: one price calendar per hotel shows Google's lowest nightly price for every date across 1-12 months.
  • Market research: search "hotels in Lisbon" and get the top results with stars, ratings and Google's lowest price, or their full rate grid.

How to use it

  1. Add hotels by name (with the city, e.g. Hotel Mar Rey Tamarindo), by Google Hotels URL (the one with /entity/ in it) or by hotel id. Or type a search like hotels in Tamarindo. A name is matched to its Google Hotels listing once ($0.002) and remembered for 90 days; URLs and ids skip the lookup. Matching is strict: if no listing clearly carries the hotel's own name, you get a free no confident match row instead of a guess.
  2. Pick check-in dates. Relative dates such as +7d, +30d or +2w move forward with every scheduled run. Then set nights, guests and currency.
  3. Optional: add a Monitor ID (any name, e.g. tamarindo-compset) and schedule the task daily. The first run saves a baseline, and each later run reports what changed.

Example input

{
"hotels": ["The Beach Bungalows Tamarindo", "Ten North Tamarindo Beach Hotel", "Tamarindo Diria"],
"location": "Costa Rica",
"checkInDates": ["+14d", "+30d"],
"nights": 2,
"adults": 2,
"currency": "USD",
"monitorId": "tamarindo-compset",
"calendarRange": "none"
}

Output

Every row has a recordType. The dataset has ready-made views: Rates per hotel & stay, Price per booking site, Changes since last run, Price calendar, Search listings and Not found / failed. Export to JSON, CSV, Excel or Google Sheets.

hotelNamecheckInnightslowestPricelowestSourceofficialPriceparityStatusundercutByPctmedianPricesourceCountobservedAt
Wyndham Tamarindo2026-11-111144Clicktrip.com174undercut17.24192026-10-28T19:01:15Z
The Hoxton, Shoreditch2026-11-271£285Super.com£324undercut12.04272026-10-28T19:23:40Z
Hotel Emporio Cancún2026-11-27394Traveluro100undercut6.0116.5262026-10-28T19:24:02Z
Tamarindo Diria2026-11-111189Tamarindo Diria (official)189official_cheapest0172026-10-28T19:01:41Z

(Rows from test runs on 2026-10-28, trimmed; observedAt values are illustrative. Prices are per night in the run's currency.)

Every price carries a timestamp. observedAt is the ISO 8601 UTC time (e.g. 2026-10-28T19:01:15Z) when that price snapshot was fetched from Google. It's on every rate, rate_source, calendar, listing and change row, and on each entry of the rates array. A calendar row's dates all come from one snapshot, so its observedAt covers its whole prices list. fetchedAt is when the run received the result.

medianPrice and lowestVsMedianPct help you spot an unusually low offer, for example one site at -60% versus the median, which is often a members-only or non-refundable rate worth checking.

Each rate row also has a rates array with one entry per booking site: source, sourceDomain, pricePerNight, totalPrice, currency, isAd, isOfficialSite, freeCancellationUntil, bookingUrl, priceRank and observedAt. Set Output format to one row per booking site to get a flat table instead.

A change row, from a scheduled run with a Monitor ID:

{"recordType": "change", "changeType": "price_down", "hotelName": "Ten North Tamarindo Beach Hotel", "checkIn": "2026-12-12",
"checkOut": "2026-12-13", "source": "Booking.com", "oldPrice": 145, "newPrice": 116, "changePct": -20, "currency": "USD",
"previousCheckAt": "2026-10-28T19:23:24Z", "detectedAt": "2026-10-28T19:29:36Z", "observedAt": "2026-10-28T19:29:21Z",
"monitorId": "tamarindo-compset"}

Google rotates sponsored listings between searches, so a site that shows up only as an ad never counts as appearing or disappearing. Its price moves are still reported. Change types: price_up, price_down, new_source, source_removed, new_lowest_source, parity_break, parity_restored, sold_out, back_available and calendar_changes (one row per hotel listing every changed date).

The run summary (key-value store record OUTPUT) lists the checks done, the hotels not found, sold-out stays, failed checks, changes and the amount charged.

Pricing

Pay per event. You only pay for results: hotels not found, sold-out or unbookable stays, provider errors and invalid input are free.

EventPrice
Run start (only when the run returns data)$0.01
Hotel + stay checked (all booking sites)$0.006 standard (less on paid plans, see below) / $0.012 live
Price calendar (per hotel, only with 7+ priced dates)$0.01 standard (less on paid plans, see below) / $0.025 live
Hotel name matched (per name newly matched to a Google Hotels listing)$0.002
Search listing (per hotel, without rates)$0.001
Change detected (per change row)$0.002

Paid Apify plans get standard-speed checks and calendars cheaper, applied automatically. Hotel + stay checked: $0.006 on the Apify Free plan, $0.0054 on Starter (Bronze), $0.0048 on Scale (Silver), $0.0045 on Business (Gold) and above. Price calendar: $0.01 on Free, $0.009 on Starter, $0.008 on Scale, $0.0075 on Business and above. Live speed, run starts, name matches, search listings and changes cost the same on every plan.

Name matches are remembered for 90 days, so repeat runs with the same names don't pay the lookup again. Names that match nothing, or have no confident match, are free and remembered for 7 days (no repeat lookups); Google Hotels URLs and hotel ids never need a lookup.

Worked example: a 10-hotel comp set (added by name) × 3 check-in dates, checked daily at standard speed for 30 days = 900 checks × $0.006 = $5.40, plus 30 run starts × $0.01 = $0.30, plus about 5 change rows a day (150 × $0.002 = $0.30), plus 10 name matches in the first run (10 × $0.002 = $0.02). That's about $6.02 a month on the Free plan, or about $4.67 on Business (Gold). A one-off search of 20 hotels without rates costs $0.03 ($0.01 + 20 × $0.001).

Standard speed (the default) is the cheapest and usually finishes in under a minute; busy periods can take a few minutes. Live returns in seconds and costs more. If a check waits in the standard queue longer than Max standard queue wait (default 10 minutes, up to 20), it moves to the provider's faster priority queue automatically, still billed as a normal standard check. Standard checks never switch to live; a check that still doesn't finish is listed as failed, not charged, and retried on the next run. Hotel-name lookups always run on the standard queue, even when you pick live speed (expect roughly 20 seconds extra the first time a name is looked up; repeat runs use the remembered match). A lookup that doesn't finish within the queue wait is listed as failed, not charged, and retried on the next run.

Free Apify plan limits

On the free Apify plan, runs use standard speed only (live is switched to standard), stuck checks don't move to the priority queue, and each run checks at most 50 hotel/date combinations and looks up at most 50 new hotel names. Upgrade to a paid Apify plan for live speed and bigger runs.

Limits

Up to 200 hotels and 5,000 hotel/date checks per run (50 on the free plan). Memory: 256 MB by default, max 512 MB (the Actor uses under 100 MB).

How it compares

  • Reliability: no browser, no proxies and no scraping of Google's page, so Google layout changes don't break runs. Failed checks are never charged and are listed in the run so you can see them.
  • Monitoring built in: most Google Hotels scrapers return a snapshot. This Actor remembers the last run for each Monitor ID and returns only the differences, with parity breaks flagged.
  • What it doesn't do: room types and rate plans (Google shows one price per site), guest review text, or booking. For room-level rates, use the OTA itself.

FAQ

Are the prices per night or for the whole stay? pricePerNight is the nightly price as Google shows it for that market (usually including taxes and fees in most countries). totalPrice is that price × nights.

Why do prices differ from what I see on Google? Prices depend on the searcher's country (Market), currency, guests and time. Set Market to where your guests book from.

What does "[ad]" mean? Google shows some booking sites as sponsored listings. They're real public offers, so they count for parity. Turn off Include sponsored prices to drop them.

A hotel wasn't found, or says "no confident match". A name is only accepted when a Google Hotels listing clearly carries the hotel's own name (words like hotel, resort or the town don't count), so the Actor never silently swaps in a neighbouring hotel. The row shows the closest listing it rejected (closestMatch). Check the spelling, add the city, or paste the Google Hotels URL. You aren't charged for it. The unmatched name is remembered for 7 days, so fix the spelling or Market rather than re-running the same name.

How far ahead can I check? Up to about 330 days, as on Google Hotels.

Is scraping Google Hotels legal? This Actor doesn't scrape Google's pages. Prices are sourced from Google via the DataForSEO API, and it returns public prices only, with no personal data. See Data source & terms below, and check your own use case with your legal team.

Integrations

  • Schedules: save a task with a Monitor ID and run it daily or hourly from Apify Schedules.
  • API & webhooks: start runs and read results with the Apify API, or fire a webhook when a run finishes. Use Output only changes to make alerts easy.
  • Make, Zapier, n8n, Google Sheets, Slack: use the Apify integrations to push change rows wherever your team works.
  • AI agents (MCP): call it from Claude, ChatGPT or Cursor through the Apify MCP server ("check Booking.com vs direct for these 5 hotels next weekend").

Data source & terms

Prices and other data are sourced from Google via the DataForSEO API. The service is not affiliated with or endorsed by Google. Data is provided for monitoring and analytics of properties the customer selects, and may not be used to create a service that competes with general search engines. The service is not offered to customers in Russia, Belarus, Syria, North Korea, or occupied Crimea.

Notes

Not affiliated with or endorsed by Google, Booking.com, Expedia or any other booking site (see Data source & terms above). Prices are informational and can change at any time. Always confirm on the booking site. This Actor is published by SteadyScrape (Apify user steady-scrape) and is not related to the similarly named steadyscrape or steady_scrape accounts.


Built and maintained by SteadyScrape: reliable data Actors that don't break. Questions or requests? Open an issue on the Issues tab.

More from SteadyScrape

See every SteadyScrape (steady-scrape) Actor on our Apify profile.

Acceptable use

Prices and other data are sourced from Google via the DataForSEO API. The service is not affiliated with or endorsed by Google. Data is provided for monitoring and analytics of properties the customer selects, and may not be used to create a service that competes with general search engines. The service is not offered to customers in Russia, Belarus, Syria, North Korea, or occupied Crimea.

You may not use results from this service to build or operate a search engine, or any product or service that competes with or harms the business of search engine providers.

— SteadyScrape