# Google Hotels Booking-Site Prices: Every Site for Your Hotel (`cozybit/google-hotels-booking-prices`) Actor

Every booking site Google Hotels lists for a hotel and your dates: Booking.com, Expedia, the official site and more, with nightly and total price, lowest-price and official flags, and links. Up to 60 check-in dates per hotel. Trial: 0.01 USD per 1,000 prices until 30 Nov 2026.

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

## Pricing

$0.01 / 1,000 booking-site 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 Booking-Site Prices: compare every booking site for a hotel and dates

Give a hotel's name and your dates, and get every booking site Google Hotels lists for it, one row per site: Booking.com, Expedia, Agoda, the hotel's own website and the rest, each with its nightly price, total price and link. No browser and no Google account needed.

- **Every site Google shows**: typically 18-38 sites per hotel and night.
- **Nightly and total price** in the currency you choose, as Google shows them.
- **Official site flag** and a **lowest-price flag** (ties included), so rate-parity gaps stand out.
- **Date ranges**: up to 60 consecutive check-in dates per hotel in one run, for price calendars and revenue management.
- **Up to 20 hotels per run**, by name or Google's `property_token`.

Typical uses: rate-parity monitoring for your own hotel, comparing your direct price with online travel agencies, tracking competitor hotels' prices across a season, finding the cheapest site to book.

Prices include all platform costs: you pay per booking-site price returned and nothing for proxies or compute.

### Input

| Field | What it does | Default |
|---|---|---|
| Hotels | 1-20 hotel names (include the city, such as `Hilton London Metropole`) or `property_token` values | required |
| First check-in date | `YYYY-MM-DD`, or a time from the run date such as `3 weeks`; up to 330 days ahead | 14 days from today |
| Nights | Stay length, 1-30 | 1 |
| Consecutive check-in dates | 1-60: repeat the search for this many check-in dates in a row | 1 |
| Adults | 1-6 | 2 |
| Children's ages | Up to 4 ages, 0-17 (experimental: Google's response does not confirm them) | none |
| Currency | Any currency Google supports, such as `USD`, `EUR`, `GBP` | `USD` |
| Search country | The Google market to search from, such as `US`, `DE`, `GB`; partners differ by market | `US` |

Example: two London hotels, two nights in December, prices in pounds:

```json
{ "hotels": ["Hilton London Metropole", "Park Plaza Westminster Bridge London"], "checkIn": "2026-12-04", "nights": 2, "currency": "GBP", "country": "GB" }
```

Example: one hotel's booking-site prices for each of the next 30 nights, every morning (save it as a task with a schedule):

```json
{ "hotels": ["Crowne Plaza Paris Republique"], "checkIn": "1 day", "nights": 1, "checkInDays": 30 }
```

### Output

One record per booking site, hotel and check-in date:

```json
{
  "hotel_name": "Crowne Plaza Paris - Republique by IHG", "property_token": "ChgI5sC219yo3969ARoLL2cvMXY4aF9yYmoQAQ",
  "check_in": "2026-11-21", "check_out": "2026-11-23", "nights": 2, "adults": 2, "currency": "USD",
  "site": "Crowne Plaza Paris - Republique by IHG", "rank": 1,
  "price_per_night": 218.98, "total_price": 437.97, "is_official": true, "is_lowest": false,
  "hotel_price_per_night": 172.38,
  "link": "https://www.google.com/travel/lodging/clk?pc=...&pcurl=https://www.ihg.com/...",
  "google_hotels_url": "https://www.google.com/travel/hotels/entity/ChgI5sC219yo3969ARoLL2cvMXY4aF9yYmoQAQ",
  "status": "ok", "error": null, "scraped_at": "2026-11-02T19:15:02.986Z"
}
```

- `rank` is the site's position in Google's list. `is_official` marks the hotel's own website. `is_lowest` marks the cheapest site(s) for that hotel and date.
- `hotel_price_per_night` is the lowest nightly price Google shows for the hotel, for comparison with each site.
- `link` is Google's click-through link to the site's offer; links expire. Whether taxes are included follows Google's display for the search country.
- `property_token` identifies the hotel across runs: use it as input for exact matching.
- A hotel and date with no offers returns one `no_data` record; a failed lookup returns one `error` record that says why. You never pay for those.

A search that matches many hotels (such as `hotels in Paris`) returns an error record asking for one hotel. To get a whole city's hotels with their booking sites, use [Google Hotels Scraper](https://apify.com/cozybit/google-hotels-scraper).

### Use it from code

Python (`pip install apify-client`):

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_API_TOKEN>")
run = client.actor("cozybit/google-hotels-booking-prices").call(run_input={
    "hotels": ["Crowne Plaza Paris Republique"], "checkIn": "2027-03-12", "nights": 2,
})
for row in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(row["check_in"], row["site"], row["price_per_night"], row["is_lowest"])
```

HTTP API, one request that runs the actor and returns the rows as JSON:

```bash
curl -X POST "https://api.apify.com/v2/acts/cozybit~google-hotels-booking-prices/run-sync-get-dataset-items" \
  -H "Authorization: Bearer <YOUR_API_TOKEN>" -H "Content-Type: application/json" \
  -d '{"hotels": ["Crowne Plaza Paris Republique"], "checkIn": "2027-03-12", "nights": 2}'
```

### Pricing

**Trial price until 30 November 2026:** 0.01 USD per 1,000 booking-site prices (the lowest price Apify allows). From 1 December 2026: 0.60 USD per 1,000 booking-site prices. Apify notifies all users before a price change.

| Event | Price |
|---|---|
| Booking-site price (one site's offer for one hotel and date) | 0.60 USD per 1,000 (0.0006 USD each) |

Worked examples (about 30 sites per hotel and night):

- One hotel, one stay: about **0.018 USD**.
- One hotel, 30 check-in dates: about 900 prices, **0.54 USD**.
- 10 competitor hotels, checked once: about 300 prices, **0.18 USD**.

To cap spending, set a maximum cost per run in the run options; the actor stops cleanly when it is reached.

### Free Apify plan

On the free Apify plan a run returns at most **100 booking-site prices**. When the limit is reached the run finishes successfully with the status message "Free Apify plan limit reached". Any paid Apify plan removes the limit.

### Reliability

In 11 test runs on the Apify platform (13 hotels in Paris, London, New York, Berlin, Mumbai, Singapore, Tokyo, Las Vegas and Maui, five currencies, up to 7 consecutive dates), the actor returned **794 booking-site prices**, typically 18-38 per hotel and night, in 5-68 seconds per run. Against the most-used booking-site scraper on the same Paris hotel and nights, we returned more site offers (97 to 95), 91 of the 93 shared offers had the same price within 1 USD, and our run was faster (9.5 s to 12.3 s).

How it stays reliable: the actor reads the data Google embeds in the hotel's prices page instead of driving a browser, sends a few paced requests per IP and switches to a new IP when Google limits one. Every page is checked against your dates and currency.

### Limits

- Booking sites depend on Google's partners for the search country, so the list differs by market.
- Give hotels by name with the city, or by `property_token`. If Google answers a name with several hotels, the error lists them so you can pick one.
- Prices are what Google shows at the time of the run and change often.
- Google Hotels has no official public API; when Google changes its site the actor may fail until it is updated.

### Related actors

- [Google Hotels Scraper](https://apify.com/cozybit/google-hotels-scraper): all hotels for a city or area with prices, ratings and details, filters, and optional booking sites per hotel.
- [Google Flights Scraper](https://apify.com/cozybit/google-flights-scraper): flight prices, schedules, bags and amenities for any route and date.
- [Google Flights Fare Calendar](https://apify.com/cozybit/google-flights-fare-calendar): the cheapest fare for every day over up to 180 days.

### Support

Report problems and feature requests on the actor's **Issues** tab, ideally with the run link.

# Actor input Schema

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

Enter 1-20 individual hotel names or full property_tokens. Include the city in a name. City-wide searches such as hotels in Paris return an error instead of choosing a hotel for you. Spaces and duplicate names are removed.

## `checkIn` (type: `string`):

YYYY-MM-DD or a relative date such as 3 weeks, from today through 330 days ahead (UTC). Empty means 14 days from today. Relative dates count from the run date.

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

Stay length, from 1 to 30 nights. Check-out is calculated from each check-in date.

## `checkInDays` (type: `integer`):

Compare 1-60 consecutive check-in dates for every hotel, preserving the stay length. The last check-in must be within 330 days. Free plans return at most 100 booking-site rows across all hotels and dates.

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

Number of adults, from 1 to 6.

## `childrenAges` (type: `array`):

Up to four ages, each 0-17. The child traveller request encoding is unverified; Google may ignore it. Leave empty for verified adult-only searches.

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

Three-letter uppercase currency code, such as USD or EUR. A returned currency mismatch is an error.

## `country` (type: `string`):

Two-letter uppercase country code. Sets Google's market and, for residential proxies only, the proxy country. This is not the destination city.

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

Datacenter by default. Residential proxies are optional and use the search country. Datacenter and custom proxies retain their routing. No automatic fallback. Direct requests cannot rotate a blocked IP.

## Actor input object example

```json
{
  "hotels": [
    "Crowne Plaza Paris Republique"
  ],
  "checkIn": "2027-03-12",
  "nights": 1,
  "checkInDays": 1,
  "adults": 2,
  "childrenAges": [],
  "currency": "USD",
  "country": "US",
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

One row per booking site and hotel/date, with nightly and total prices, Google rank, official-site flags and lowest-price ties. Empty dates and errors have one uncharged row.

# 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": [
        "Crowne Plaza Paris Republique"
    ],
    "checkIn": "3 weeks"
};

// Run the Actor and wait for it to finish
const run = await client.actor("cozybit/google-hotels-booking-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": ["Crowne Plaza Paris Republique"],
    "checkIn": "3 weeks",
}

# Run the Actor and wait for it to finish
run = client.actor("cozybit/google-hotels-booking-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": [
    "Crowne Plaza Paris Republique"
  ],
  "checkIn": "3 weeks"
}' |
apify call cozybit/google-hotels-booking-prices --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,cozybit/google-hotels-booking-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/z5dWV7FhZ6tlo9zgF/builds/H0m1VNgX8bV1wn35s/openapi.json
