# Google Hotels Prices — Every Booking Site, Any Dates (`highbrow_fame/google-hotels-prices`) Actor

Every booking site's price for your hotels on Google Hotels, for any check-in dates: per night and total stay, with and without taxes, the official site's rate. Pay only for results with prices.

- **URL**: https://apify.com/highbrow\_fame/google-hotels-prices.md
- **Developed by:** [yestrue](https://apify.com/highbrow_fame) (community)
- **Categories:** Travel, E-commerce
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$7.00 / 1,000 hotel-date with prices

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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 Hotels Prices — Every Booking Site, Any Dates

Get the price of **every booking site Google Hotels shows** for your hotels — Booking.com, Expedia, Hotels.com, Agoda, Trip.com, Priceline, the hotel's own website and many more — for **any check-in dates**. You get one row per hotel and date with the **price per night and for the whole stay, with and without taxes**, the **cheapest site**, the **official-site rate** and **free-cancellation dates**.

Use it for rate shopping, rate-parity checks against the hotel's own website, price calendars, and tracking hotel prices for a trip or an event.

**Why this one**

- 🏨 **Every booking site in one row.** Typically 15-34 sites per hotel and date (median 28 in our tests), each with its price per night and for the stay, with and without taxes.
- 📅 **A price calendar in one run.** Up to 180 check-in dates per hotel, any length of stay, many hotels at once.
- ✅ **Runs that finish.** Two test runs on 2026-10-03, each 5 hotels in New York, Paris, London, Tokyo and Barcelona × 6 dates: all 60 hotel-dates answered — 55 with prices, 5 sold out or with a minimum stay — in 24-59 seconds per run.
- 🔗 **Use the hotel link you already have.** A Google Hotels link, a Google Maps link, the Google Hotels ID or a Google Maps CID — so a Google Maps export of hotels works as input.
- 💸 **You pay only for hotel-dates with prices.** Sold-out dates, wrong links and refused requests are free.

### What it does not do

- **It does not search a city for hotels.** Google's robots.txt does not allow automated access to the Google Hotels search pages, and this Actor respects that: it opens only the hotels' own price pages. Give it the hotels you want priced. To price a whole city, start from a Google Maps export of its hotels — the Maps links or CIDs work as input.
- Adults only, one room (no children's ages yet).
- No reviews, photos or amenity lists.

### What you get

One row per hotel and check-in date:

| Field | What it is |
|---|---|
| `status` | `OK` (prices found), or why not: `NO_PRICES`, `NOT_FOUND`, `BLOCKED`, `FAILED`, `INVALID_INPUT`, `INVALID_DATE` |
| `hotelName`, `type` | name, and `hotel` or `vacation rental` |
| `address`, `latitude`, `longitude` | location |
| `hotelClass`, `starRating` | e.g. "4-star hotel", 4 |
| `rating`, `reviewCount` | Google rating (1-5) and number of reviews |
| `summary` | Google's one-line description |
| `checkInDate`, `checkOutDate`, `nights`, `adults` | the stay that was priced |
| `currency` | currency of every price in the row |
| `lowestPricePerNight`, `lowestPricePerNightWithTaxes` | the lowest price per night, before and after taxes and fees |
| `lowestTotalPrice`, `lowestTotalPriceWithTaxes` | the lowest price for the whole stay |
| `cheapestProvider` | the booking site with the lowest price (with taxes where shown) |
| `officialSitePricePerNight`, `officialSitePricePerNightWithTaxes` | the hotel's own website's rate, when Google shows it |
| `priceBadge` | Google's note on the price, e.g. "20% less than usual" |
| `offerCount` | number of booking sites with a price |
| `offers` | every booking site: `provider`, `isOfficialSite`, `pricePerNight`, `pricePerNightWithTaxes`, `totalPrice`, `totalPriceWithTaxes`, `freeCancellation`, `freeCancellationUntil`, `memberDeal`, `bookingUrl` |
| `hotelId`, `googleMapsCid`, `googlePlaceId` | IDs to join with Google Maps data |
| `hotelUrl`, `pricesUrl` | the hotel's Google Hotels page for these dates |
| `suggestedStay` | for `NO_PRICES`: the stay Google offers instead, e.g. a 4-night minimum stay |
| `error` | why a row has no prices |

The **Every booking site** view (and the "Every booking site (CSV)" link on the Output tab) gives one row per hotel, date and booking site — ready for a spreadsheet or a price chart.

#### Example

```json
{
  "status": "OK",
  "hotelName": "The Tower Hotel, by Thistle",
  "address": "St Katharine's Way, London E1W 1LD, United Kingdom",
  "starRating": 4,
  "rating": 4.1,
  "reviewCount": 12478,
  "checkInDate": "2026-11-13",
  "checkOutDate": "2026-11-15",
  "nights": 2,
  "adults": 2,
  "currency": "USD",
  "lowestPricePerNight": 196.56,
  "lowestPricePerNightWithTaxes": 234.91,
  "lowestTotalPriceWithTaxes": 469.83,
  "cheapestProvider": "Vio.com",
  "officialSitePricePerNight": 280.31,
  "offerCount": 29,
  "offers": [
    { "provider": "Vio.com", "isOfficialSite": false, "pricePerNight": 196.56, "pricePerNightWithTaxes": 234.91, "totalPrice": 393.13, "totalPriceWithTaxes": 469.83, "freeCancellation": null, "bookingUrl": "https://deals.vio.com/…" },
    { "provider": "Booking.com", "isOfficialSite": false, "pricePerNight": 252.17, "pricePerNightWithTaxes": 302.6, "totalPrice": 504.33, "totalPriceWithTaxes": 605.21, "freeCancellation": false, "bookingUrl": "https://www.booking.com/…" },
    { "provider": "The Tower Hotel, by Thistle", "isOfficialSite": true, "pricePerNight": 280.31, "pricePerNightWithTaxes": 336.37, "totalPrice": 560.61, "totalPriceWithTaxes": 672.74, "freeCancellation": false, "bookingUrl": "https://reservations.travelclick.com/…" }
  ]
}
```

### How to use it

1. **Hotels** — one per line: the hotel's Google Hotels link (open the hotel on Google Hotels and copy the link from the address bar; it contains `/entity/`), its Google Maps link, its Google Hotels ID (starts with `Ch`) or its Google Maps CID.
2. **Dates** — a first check-in date and how many consecutive dates to price (empty = 14 days from today), or a list of specific check-in dates; plus the number of **nights**.
3. **Adults** and **currency**.
4. Press **Start**, then download the results as JSON, CSV or Excel.

You can also run it on a schedule (for example every morning, to follow how prices move) or call it from the Apify API, Make, Zapier, n8n or an AI agent through the Apify MCP server.

### Pricing

You are charged **per hotel-date with prices** — see the price on this page. A hotel-date is one hotel for one check-in date, with every booking site's offer in it. Dates without prices (sold out, a minimum stay, not bookable), links that are not hotels, past dates and requests Google refused are free.

### FAQ

**Which market's prices are these?** By default the run goes through a US residential connection, so you see the booking sites and prices Google Hotels shows to US visitors, converted into the currency you choose. Taxes and fees are shown separately (`…WithTaxes`).

**Why does a date have no prices?** The hotel is sold out, needs a longer stay, or is not bookable online for those dates. When Google suggests another stay (for example a 4-night minimum), it is in `suggestedStay`.

**How does it treat Google?** It reads google.com/robots.txt at the start of every run and opens only pages it allows — the hotels' own price pages. A refused request is tried once more after a 30-second wait on the same connection, never from another IP address, and the run stops after three refusals. Refused requests are not charged.

**Are the prices final?** They are the prices Google Hotels shows at the time of the run. The booking site can still differ at checkout (availability, fees, member prices). Some booking links are Google redirect links that expire after a while.

**Like it?** A short review on the Store page helps other people find this Actor. Something missing or broken? Tell us on the Issues tab — we read every one.

This Actor is not affiliated with Google.

# Actor input Schema

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

One hotel per line: its Google Hotels link (open the hotel on Google Hotels and copy the link — it contains /entity/), its Google Maps link (contains !1s0x…), its Google Hotels ID (starts with Ch) or its Google Maps CID. This Actor prices the hotels you list; it does not search a city for hotels.

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

YYYY-MM-DD. Empty: 14 days from today.

## `numberOfDates` (type: `integer`):

Consecutive check-in dates from the first one: 1 = only that date, 30 = a month of daily prices. Each hotel and date is one result.

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

Length of each stay. Every result has the price per night and the price of the whole stay.

## `checkInDates` (type: `array`):

YYYY-MM-DD, one per line — for example every Friday of a season. When you fill this in, it is used instead of the first check-in date and the number of dates.

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

Guests in the room.

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

Google converts every booking site's price into this currency.

## `proxyConfiguration` (type: `object`):

US residential by default: Google Hotels then shows the US market's booking sites and prices. A refused request is tried once more on the same connection, never from a new IP.

## Actor input object example

```json
{
  "hotels": [
    "https://www.google.com/travel/hotels/entity/ChYImeqn5sP5xYFQGgovbS8wOXJ0bXZ2EAE"
  ],
  "numberOfDates": 3,
  "nights": 1,
  "adults": 2,
  "currency": "USD",
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  }
}
```

# Actor output Schema

## `results` (type: `string`):

One record per hotel and check-in date, with every booking site's offer and a status for each input.

## `resultsCsv` (type: `string`):

The same records as CSV, for a spreadsheet.

## `offersCsv` (type: `string`):

One row per hotel, date and booking site, for a spreadsheet or a price chart.

# 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": [
        "https://www.google.com/travel/hotels/entity/ChYImeqn5sP5xYFQGgovbS8wOXJ0bXZ2EAE"
    ],
    "numberOfDates": 3,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "US"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("highbrow_fame/google-hotels-prices").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": ["https://www.google.com/travel/hotels/entity/ChYImeqn5sP5xYFQGgovbS8wOXJ0bXZ2EAE"],
    "numberOfDates": 3,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "US",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("highbrow_fame/google-hotels-prices").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": [
    "https://www.google.com/travel/hotels/entity/ChYImeqn5sP5xYFQGgovbS8wOXJ0bXZ2EAE"
  ],
  "numberOfDates": 3,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  }
}' |
apify call highbrow_fame/google-hotels-prices --silent --output-dataset

```

## MCP server setup

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

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/Z2pgvjwqC2V8TtoxK/builds/H0UaVRAD8auEMRjwV/openapi.json
