# Google Hotel Prices Scraper - Every Booking Site, 90 Dates (`zen-studio/google-hotel-prices-scraper`) Actor

Track what every booking site charges for a hotel. One row per booking site per date, with the price before and after taxes, the free-cancellation deadline and a direct booking link, plus a free summary row naming the cheapest site. Many hotels and up to 90 check-in dates in one run.

- **URL**: https://apify.com/zen-studio/google-hotel-prices-scraper.md
- **Developed by:** [Zen Studio](https://apify.com/zen-studio) (community)
- **Categories:** Travel
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.35 / 1,000 prices

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Google Hotel Prices Scraper | Every Booking Site's Rate, 90 Check-in Dates (2026)

[![Find the cheapest site to book. Hotel rates. Booking links. Savings.](https://api.apify.com/v2/key-value-stores/pJ7iaZsTFhR3k9tjV/records/google-hotel-prices-readme-hero-271ae57727ad.png)](https://console.apify.com/actors/gn1RxvNnCTAfNBQqR/input)

From **Zen Studio**, creators of [Google Hotels Scraper](https://apify.com/zen-studio/google-hotels-scraper), [Google Maps Scraper](https://apify.com/zen-studio/google-maps-scraper) and [Google Maps Reviews](https://apify.com/zen-studio/google-maps-reviews-scraper). Built on our established travel, maps and reviews suite.

### Why choose this actor?

**Get the cheapest site and savings calculated for you.** Each hotel and date includes a **free summary row** with the cheapest quoted nightly rate, the hotel's own rate, savings against it, the median and the price spread. Hotel ratings, address and coordinates help you join the comparison to your own research.

**Compare every booking site Google lists for your hotel.** Get one row per site and date, including **Booking.com, Expedia, Agoda, the hotel's own site and smaller booking sites**. A city hotel typically returns 25 to 35 of them. Export nightly rates, available stay totals, prices before and after taxes, cancellation deadlines and direct booking links.

**Track up to 90 consecutive check-in dates in one run.** Price multiple hotels while keeping the same stay length. Choose from **18 markets**, compare desktop and mobile offers in separate runs, and use relative dates so scheduled monitoring rolls forward automatically.

<a href="https://console.apify.com/actors/gn1RxvNnCTAfNBQqR/input"><img src="https://api.apify.com/v2/key-value-stores/pJ7iaZsTFhR3k9tjV/records/google-hotel-prices-readme-cta-ffdaebd23902.svg" width="234" height="48" alt="Compare hotel prices" /></a>

### Quick input

Try one hotel across three check-in dates, starting 30 days from today:

```json
{
  "hotels": [
    "Park Hyatt Tokyo"
  ],
  "checkInDate": "30",
  "days": 3,
  "nights": 1,
  "adults": 2,
  "currency": "USD",
  "market": "US"
}
```

[Open actor input](https://console.apify.com/actors/gn1RxvNnCTAfNBQqR/input) and add hotel names, Google Hotels links or hotel IDs. `days` controls how many check-in dates to compare; `nights` sets the length of each stay. Export JSON, CSV or Excel.

Booking sites and available terms vary by hotel, dates, market and device. The summary ranks nightly rates before taxes; tax-inclusive values are separate fields. Price rows are billed; summary rows are free, as set out under Pricing below. The artwork shows a recorded rate excerpt, not a current quote.

<table><tr><td colspan="5" style="background:#1A73E8;padding:10px 12px"><strong style="color:#FFFFFF;font-size:14px">Zen Studio · Travel, Maps &amp; Reviews</strong></td></tr><tr><td style="padding:8px 10px;background:#D2E3FC;border:1px solid #CADAF4;vertical-align:top"><span style="white-space:nowrap"><img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/NWYsOG96fMDy8ycdf-actor-LVhra6loOsBkf4eKg-ket8ohFjul-google-ads-transparency-scraper.png" width="20" height="20" style="vertical-align:middle" alt="">&nbsp;<a href="https://console.apify.com/actors/gn1RxvNnCTAfNBQqR/input" style="color:#174EA6;font-weight:700;font-size:13px;text-decoration:none">Hotel Prices</a></span><br><span style="color:#29486D;font-size:12px;white-space:nowrap">You are here</span></td><td style="padding:8px 10px;background:#E8F0FE;border:1px solid #CADAF4;vertical-align:top"><span style="white-space:nowrap"><img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/NWYsOG96fMDy8ycdf-actor-vBUd2ObzJUemitHHP-IYaavrd0t8-google-maps-directions-api-logo.png" width="20" height="20" style="vertical-align:middle" alt="">&nbsp;<a href="https://apify.com/zen-studio/google-hotels-scraper" style="color:#174EA6;font-weight:700;font-size:13px;text-decoration:none">Google Hotels</a></span><br><span style="color:#29486D;font-size:12px;white-space:nowrap">Find hotels by city</span></td><td style="padding:8px 10px;background:#E8F0FE;border:1px solid #CADAF4;vertical-align:top"><span style="white-space:nowrap"><img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/NWYsOG96fMDy8ycdf-actor-vBUd2ObzJUemitHHP-IYaavrd0t8-google-maps-directions-api-logo.png" width="20" height="20" style="vertical-align:middle" alt="">&nbsp;<a href="https://apify.com/zen-studio/google-maps-scraper" style="color:#174EA6;font-weight:700;font-size:13px;text-decoration:none">Google Maps</a></span><br><span style="color:#29486D;font-size:12px;white-space:nowrap">Business details</span></td><td style="padding:8px 10px;background:#E8F0FE;border:1px solid #CADAF4;vertical-align:top"><span style="white-space:nowrap"><img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/NWYsOG96fMDy8ycdf-actor-ojjo6BxQiOiLYRca1-RU3DuH650K-google-maps-directions-api-logo.png" width="20" height="20" style="vertical-align:middle" alt="">&nbsp;<a href="https://apify.com/zen-studio/google-maps-reviews-scraper" style="color:#174EA6;font-weight:700;font-size:13px;text-decoration:none">Google Reviews</a></span><br><span style="color:#29486D;font-size:12px;white-space:nowrap">Guest reviews</span></td><td style="padding:8px 10px;background:#E8F0FE;border:1px solid #CADAF4;vertical-align:top"><span style="white-space:nowrap"><img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/NWYsOG96fMDy8ycdf-actor-2EJcvIYcO9H0KQOIO-r9WyLYmWGc-place-review-aggregator.png" width="20" height="20" style="vertical-align:middle" alt="">&nbsp;<a href="https://apify.com/zen-studio/place-review-aggregator" style="color:#174EA6;font-weight:700;font-size:13px;text-decoration:none">Review Aggregator</a></span><br><span style="color:#29486D;font-size:12px;white-space:nowrap">More review sources</span></td></tr></table>

### Key Features

- **Every booking site's price, one row each** — nightly rate and stay total, before and after taxes, the exact tax split where the site publishes one, what the rate includes, membership perks, the rooms on offer, and the free-cancellation deadline.
- **A direct booking link on every row** — the booking site's own URL, carrying the hotel, your dates, the room and the rate code, so a price in your export is a price you can still click.
- **A free summary row per hotel and date** — cheapest site and price, the hotel's own rate, the saving against it in money and percent, median, spread, how many sites quoted, plus the hotel's rating, review count, class, address and coordinates. Not charged: it is worked out from prices you already paid for.
- **Up to 90 check-in dates per run**, for as many hotels as you want, one row per booking site per hotel per date.
- **Real multi-night stays** — `nights` prices a three-night stay starting on each date, not just single nights.
- **18 markets** — Google quotes a hotel differently to a visitor in each country. Priced for the United States, one Tokyo hotel returned 28 booking sites and a cheapest rate of $1,185; priced for Germany, 21 sites, EUR 1,278, and German booking sites in the list. Pick the market you are tracking.
- **Phone rates and computer rates** — a few sites quote a phone a different price, and one or two appear on only one of them. Run both and compare.
- **Relative dates** — `"30"` means thirty days from the day the run starts, so a saved schedule never goes stale.
- **Free tier** — 10 lifetime runs, 3 hotel dates per run. No credit card required.

#### Copy to your AI assistant

```
zen-studio/google-hotel-prices-scraper on Apify. Every booking site's price for named hotels across consecutive check-in dates. Give hotels:["Park Hyatt Tokyo" or a Google Hotels link or a hotel id] (entity:"..." for one is also accepted) + checkInDate ("2026-11-20" or a number of days from today like "30") + days:N consecutive check-in dates (max 90) + nights:N stay length (max 30, default 1). Two record types in one dataset: recordType=="price" is one row per booking site with rates before and after taxes, tax split, free-cancellation date, rooms and partnerUrl (the booking site's own link); recordType=="summary" is one free row per hotel and date naming cheapestSite, savingsVsOfficialPercent, median, spread and the hotel's rating, address and coordinates - filter to it when you want the answer rather than the table. market:"US"|"DE"|"JP"|... changes which sites quote and what they charge, not just the currency, and currency is set separately; device:"mobile" surfaces a few phone-only rates. Only named hotels - to search a city or region use zen-studio/google-hotels-scraper. Charged per price row, summary rows free; current prices at https://apify.com/zen-studio/google-hotel-prices-scraper. Full spec: GET https://api.apify.com/v2/acts/zen-studio~google-hotel-prices-scraper/builds/default (Bearer TOKEN) -> inputSchema, actorDefinition.storages.dataset, readme. Token: https://console.apify.com/account/integrations
```

### How to price hotels

#### The whole market for one hotel, tonight

```json
{
  "hotels": ["Hotel Adlon Kempinski Berlin"],
  "checkInDate": "1",
  "days": 1,
  "nights": 1,
  "currency": "EUR",
  "market": "DE"
}
```

#### A 30-day price curve

```json
{
  "hotels": ["Park Hyatt Tokyo"],
  "checkInDate": "7",
  "days": 30,
  "nights": 1,
  "adults": 2,
  "currency": "USD"
}
```

One row per booking site per date, about 850 prices, plus 30 summary rows naming the cheapest site on each night.

#### Your hotel against its competitors

```json
{
  "hotels": [
    "Hotel Adlon Kempinski Berlin",
    "25hours Hotel Bikini Berlin",
    "The Ritz-Carlton Berlin"
  ],
  "checkInDate": "14",
  "days": 14,
  "nights": 2,
  "currency": "EUR",
  "market": "DE"
}
```

Three hotels across fourteen check-in dates, each priced for a two-night stay. The summary rows alone give you a competitive rate table: 42 rows, one per hotel per date.

#### The same night in two markets

Run it twice, once with `"market": "US"` and once with `"market": "DE"`. Every row carries the market it was priced for, so the two runs append into one table.

#### Rates a phone is shown

```json
{
  "hotels": ["Park Hyatt Tokyo"],
  "checkInDate": "30",
  "days": 3,
  "device": "mobile"
}
```

#### Already using another hotel price scraper?

Its input runs here unchanged. `entity`, `checkInDate`, `days`, `adults`, `currency` and `device` are all understood, a single hotel name or id in `entity` works exactly as before, and anything you sent about routing is ignored rather than refused.

```json
{
  "entity": "ChgIw-i9jd_587w3GgwvZy8xcHR4cWI4OTIQAQ",
  "checkInDate": "2026-11-20",
  "days": 3,
  "adults": 2,
  "currency": "USD",
  "device": "desktop"
}
```

### What data can you extract?

Every price row carries:

| Field | What it is |
|-------|------------|
| `hotel`, `hotelId` | The hotel this price is for, on every row |
| `checkIn`, `checkOut`, `nights` | The stay that was priced |
| `adults`, `rooms` | The party it was priced for |
| `currency`, `market`, `device` | What it was priced in, for whom, and as shown where |
| `partner` | The booking site |
| `officialSite` | True when this is the hotel's own site |
| `position` | Where Google listed it |
| `nightlyRate`, `nightlyRateValue` | Per night, before taxes, formatted and as a number |
| `nightlyRateWithTaxes`, `nightlyRateWithTaxesValue` | Per night, taxes in |
| `stayTotal`, `stayTotalValue` | Whole stay, before taxes |
| `stayTotalWithTaxes`, `stayTotalWithTaxesValue` | Whole stay, taxes in |
| `taxesAndFees` | The tax and fee split, exact where the site publishes it |
| `freeCancellation`, `freeCancellationUntil` | Cancellation terms, and the date they run to |
| `perks`, `includes` | Membership offers, and what the rate includes |
| `roomOffers` | The rooms behind the price, where the site names them |
| `logo`, `partnerUrl` | The site's logo, and its own booking link for this rate |
| `scrapedAt` | When the price was read |

Every figure in a row belongs to one offer: the nightly rate multiplies out to that row's own stay total, and `partnerUrl` opens that price rather than a different one. A booking site Google only shows above the fold is quoted per night, with no stay total, because the figure published beside that price does not count nights.

Every summary row carries the hotel, stay and market columns above, plus:

| Field | What it is |
|-------|------------|
| `sitesCount` | How many booking sites quoted |
| `cheapestSite`, `cheapestNightly`, `cheapestNightlyValue` | Who is cheapest, and for how much |
| `cheapestWithTaxesValue`, `cheapestUrl` | The cheapest offer with taxes, and where to book it |
| `officialNightlyValue` | What the hotel's own site is asking |
| `savingsVsOfficial`, `savingsVsOfficialPercent` | What the cheapest offer saves against it |
| `medianNightlyValue`, `highestNightlyValue`, `priceSpread` | How far apart the market is |
| `rating`, `reviewsCount`, `hotelClass`, `stars` | The hotel's own standing |
| `address`, `phone`, `website`, `latitude`, `longitude` | Where and how to reach it |
| `hexId`, `placeId`, `googleMapsUrl` | Ids to join this hotel to Maps data |

#### Output example

A price row, exactly as delivered:

```json
{
  "recordType": "price",
  "hotel": "Park Hyatt Tokyo",
  "hotelId": "ChcIlvu51MzyqOwsGgsvZy8xMjB5bGsyMxAB",
  "checkIn": "2026-11-20",
  "checkOut": "2026-11-21",
  "nights": 1,
  "adults": 2,
  "rooms": 1,
  "currency": "USD",
  "market": "US",
  "device": "desktop",
  "position": 3,
  "partner": "Park Hyatt Tokyo",
  "officialSite": true,
  "nightlyRate": "$2,073",
  "nightlyRateValue": 2073.0,
  "nightlyRateWithTaxes": "$2,282",
  "nightlyRateWithTaxesValue": 2282.0,
  "stayTotal": "$2,073",
  "stayTotalValue": 2073.0,
  "stayTotalWithTaxes": "$2,282",
  "stayTotalWithTaxesValue": 2282.0,
  "taxesAndFees": 209.0,
  "freeCancellation": null,
  "freeCancellationUntil": "Nov 16",
  "perks": ["Get a lower price with free enrollment"],
  "includes": null,
  "logo": "https://www.gstatic.com/travel-hotels/branding/13941953594245004087.png",
  "partnerUrl": "https://www.hyatt.com/shop/TYOPH?rooms=1&adults=2&checkinDate=2026-11-20&checkoutDate=2026-11-21&kids=0&src=paidmeta_glob_dap_TYOPH_google_koddi_en_TYOPH_localuniversal_1_US_desktop_2026-11-20_default___organic_meta",
  "roomOffers": null,
  "scrapedAt": "2026-09-25T09:22:41+00:00"
}
```

And the summary row that came with it, free:

```json
{
  "recordType": "summary",
  "hotel": "Park Hyatt Tokyo",
  "hotelId": "ChcIlvu51MzyqOwsGgsvZy8xMjB5bGsyMxAB",
  "checkIn": "2026-11-20",
  "checkOut": "2026-11-21",
  "nights": 1,
  "adults": 2,
  "rooms": 1,
  "currency": "USD",
  "market": "US",
  "device": "desktop",
  "sitesCount": 27,
  "cheapestSite": "Traveluro",
  "cheapestNightly": "$1,185",
  "cheapestNightlyValue": 1185.0,
  "cheapestWithTaxesValue": 1484.0,
  "cheapestUrl": "https://www.traveluro.com/hotels/japan_jp_tokyo/139040_park-hyatt-tokyo?checkIn=2026-11-20&checkOut=2026-11-21&placeId=H139040&campaignName=Google_US&currencyCode=USD&dealKey=CAIQqwEiDAjg7NjVBhD8x6WJAipMDQCAuUQVAEC2RCU9Cu1CLc1MNEMwATh4RQCAuURKCwiA2tjVBhDo-O1zYgpTdGFuZGFyZCBLaAKCAQCNAY-KuUSgAa6_l60GqAHIBjCNBjigvghAgPgPSAFSCNLwfxvIo5DYWMgGYgMKASA&countryCode=US&languageCode=en&rule=Google_US&site=localuniversal&origin=31&ads=&priceDisplayedTotal=1484.00&priceDisplayedTax=298.88&device=desktop&adults=2&children=0",
  "officialNightlyValue": 2073.0,
  "savingsVsOfficial": 888.0,
  "savingsVsOfficialPercent": 42.8,
  "medianNightlyValue": 1831.0,
  "highestNightlyValue": 2073.0,
  "priceSpread": 888.0,
  "rating": 4.5,
  "reviewsCount": 4588,
  "hotelClass": "5-star hotel",
  "stars": 5,
  "propertyType": "hotel",
  "category": "hotel",
  "address": "2, 3 Chome-7-1 Nishishinjuku, Shinjuku City, Tokyo 163-1055, Japan",
  "phone": "+81 3-5322-1234",
  "website": "https://www.hyatt.com/park-hyatt/en-US/tyoph-park-hyatt-tokyo?src=corp_lclb_google_seo_tyoph&utm_source=google&utm_medium=organic&utm_campaign=lmr",
  "latitude": 35.686213099999996,
  "longitude": 139.69048279999998,
  "countryCode": "JP",
  "thumbnail": "https://lh3.googleusercontent.com/gps-cs-s/AHRPTWm2q9hWfqaLEAEfvtAvKeFlzsVgHSfc5luwZCQ_cqjT0Kwt-9pBt9FJyuMtfDcO1S613K7j6v2HJJc6FAEc_6y6UveHM03NWsY2lZ8ZWTW6tOEJiu7JgkhvRjln_TILn7pTto5tHouA9Hk=s150-w92-h150-n-k-no",
  "hexId": "0x6018f32cd7dab227:0x2cd8a394ca8e7d96",
  "placeId": "ChIJJ7La1yzzGGARln2OypSj2Cw",
  "googleMapsUrl": "https://www.google.com/maps?cid=3231512592087154070",
  "scrapedAt": "2026-09-25T09:22:41+00:00"
}
```

### Dataset views

Both row types land in one dataset and are told apart by `recordType`.

- **Prices** — one row per booking site, the default view.
- **Cheapest per hotel and date** — the summary rows, the view to open when you want the answer rather than the working.

### Pricing — Pay Per Event (PPE)

**$0.50 per 1,000 prices.** Subscription plans pay less, down to $0.35.

| Event | Per call | Per 1,000 |
|-------|----------|-----------|
| Price (one booking site, one hotel, one date) | $0.0005 | $0.50 |
| Summary row | Free | Free |
| Actor start | $0.005 | — |

| What you are doing | Prices | Cost |
|---|---|---|
| One hotel, one date | ~28 | $0.014 + start |
| One hotel, a 30-day curve | ~840 | $0.42 |
| 20 hotels, 7 dates each | ~3,900 | $1.96 |
| 5 hotels tracked daily for a month, 30 dates each | ~126,000 | $63, or $44 on the top plan tier |

Apify's own platform charges are listed separately in the Console.

**Free tier:** 10 lifetime runs, 3 hotel dates per run. No credit card required.

### How it compares

| | This Actor | Typical alternative |
|---|---|---|
| Hotels per run | As many as you like | One |
| Stay length | Any, from one night to thirty | One night only |
| Dates per run | Up to 90 consecutive check-in dates | Unlimited, one night each |
| Fields per price | 31, including taxes-in prices, tax split, cancellation date and rooms | 9 |
| Which hotel a row is for | On every row, with its id | Not in the row at all |
| Booking link | The booking site's own URL | A tracking wrapper, relative and short-lived |
| Cheapest offer | Named for you in a free summary row, with the saving against the hotel's own site | Work it out yourself |
| Market | Chosen as a market, by country | Set by hand as a proxy country |
| Price | $0.50 per 1,000 prices | $1.00 per 1,000 |

### FAQ

**Are the prices live?**
Yes. Every run asks for your exact dates at run time. Nothing is cached, and each row echoes back the stay that was priced.

**Why are there more booking sites here than on Google's own page?**
Google shows a few above the fold and files the rest under "All options". Both are collected, merged and deduplicated, which is usually 25 to 35 sites for a city hotel.

**Can I book at the price I see?**
`partnerUrl` is the booking site's own link for that rate, carrying your dates, the room and the rate code. Rates move, so treat an export as a reading at `scrapedAt`, not a reservation.

**Does party size change the price?**
No. Google quotes the same nightly rate whatever `adults` and `rooms` are set to. The values are recorded on the row so your export documents what was asked for.

**Why is the same hotel priced differently for a different market?**
Because it is a different offer. Booking sites bid per market, local sites only appear in their own, and taxes are shown differently. That is a question worth asking rather than a discrepancy to normalise away: the cheapest US offer on one Tokyo night was about 15% under the cheapest German one after converting.

**What if a hotel has no prices for a date?**
It is reported as having no prices and costs you nothing. That happens on nights a hotel is not selling, and far enough ahead that Google is not taking bookings for them yet.

**Can I use a hotel name, or do I need an id?**
A name works, and so does a Google Hotels link or an id from an earlier run. A name is resolved to the property Google matches it to; if that comes back wrong, paste the link instead.

**Can I price a whole city rather than named hotels?**
Not here — that is [Google Hotels Scraper](https://apify.com/zen-studio/google-hotels-scraper), which searches a market and returns up to about 1,000 hotels with 54 fields each. Use it to find the hotels, then track them here.

**What if the market I picked cannot be reached?**
The run stops and says so, before anything is charged. Every row names the market it was priced for, so serving you another market's prices under that name would be worse than an error. Try again in a few minutes, or pick a different market.

**Can I run this on a schedule?**
Yes, and it is built for it. Use a relative `checkInDate` so each run prices the next N nights rather than a fixed date that ages out.

**What's the free tier?**
10 lifetime runs, 3 hotel dates per run. No credit card required.

### More Zen Studio scrapers for travel & local data

- [Google Hotels Scraper](https://apify.com/zen-studio/google-hotels-scraper) — search a whole market, 54 fields per hotel
- [Google Maps Scraper](https://apify.com/zen-studio/google-maps-scraper) — 40+ fields per place, past Google's 250-per-view ceiling
- [Google Maps Reviews Scraper](https://apify.com/zen-studio/google-maps-reviews-scraper) — unlimited review histories, one row per review
- [Place Review Aggregator](https://apify.com/zen-studio/place-review-aggregator) — one place, five review platforms, one export

### Support

- **Bugs**: Issues tab
- **Features**: Issues tab

### Legal Compliance

Extracts publicly available data. Users must comply with Google's terms of service and data protection regulations (GDPR, CCPA).

***

*One row per booking site per hotel per date, with taxes in and out, the cancellation deadline and a direct booking link — plus a free row naming the cheapest site and what it saves. $0.50 per 1,000 prices.*

# Actor input Schema

## `hotels` (type: `array`):

One per line: a hotel name ("Park Hyatt Tokyo"), a Google Hotels link, or a hotel id from an earlier run. A name is resolved to the property Google matches it to. A city is not a hotel: to price a whole market, use Google Hotels Scraper instead.

## `checkInDate` (type: `string`):

As a date (2026-11-20) or a number of days from today ("30"). Use the relative form in a schedule so it never goes stale.

## `days` (type: `integer`):

Consecutive check-in dates, starting at the one above. 1 is a single snapshot; 30 gives a month-long price curve per hotel. Each date is charged as its own price check.

## `nights` (type: `integer`):

Length of each stay. 1 prices one night at a time, the way a rate calendar reads; 3 prices a three-night stay starting on each date.

## `adults` (type: `integer`):

Party size the stay is priced for.

## `rooms` (type: `integer`):

Rooms the stay is priced for.

## `currency` (type: `string`):

Currency every price is quoted in.

## `market` (type: `string`):

Google quotes a hotel differently in every market. A Tokyo hotel priced for the United States came back with 28 booking sites and a cheapest rate of $1,185 for one night; the same night priced for Germany came back with 21 sites, a cheapest rate of EUR 1,278, and German booking sites in the list. Pick the market whose prices you are tracking.

## `device` (type: `string`):

A handful of booking sites quote a different price to a phone than to a computer, and one or two show up only on one of them. Run both to see the gap.

## Actor input object example

```json
{
  "hotels": [
    "Park Hyatt Tokyo"
  ],
  "checkInDate": "1",
  "days": 7,
  "nights": 1,
  "adults": 2,
  "rooms": 1,
  "currency": "USD",
  "market": "US",
  "device": "desktop"
}
```

# Actor output Schema

## `prices` (type: `string`):

No description

## `summary` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "hotels": [
        "Park Hyatt Tokyo"
    ],
    "checkInDate": "1",
    "days": 7,
    "nights": 1,
    "adults": 2,
    "rooms": 1,
    "currency": "USD",
    "market": "US",
    "device": "desktop"
};

// Run the Actor and wait for it to finish
const run = await client.actor("zen-studio/google-hotel-prices-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "hotels": ["Park Hyatt Tokyo"],
    "checkInDate": "1",
    "days": 7,
    "nights": 1,
    "adults": 2,
    "rooms": 1,
    "currency": "USD",
    "market": "US",
    "device": "desktop",
}

# Run the Actor and wait for it to finish
run = client.actor("zen-studio/google-hotel-prices-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "hotels": [
    "Park Hyatt Tokyo"
  ],
  "checkInDate": "1",
  "days": 7,
  "nights": 1,
  "adults": 2,
  "rooms": 1,
  "currency": "USD",
  "market": "US",
  "device": "desktop"
}' |
apify call zen-studio/google-hotel-prices-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,zen-studio/google-hotel-prices-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/gn1RxvNnCTAfNBQqR/builds/YxEP0HXeHgxOvWYGd/openapi.json
