# Google Hotels Prices by Booking Site · Name or City · $1/1K (`featherscrape/google-hotels-prices-by-booking-site`) Actor

Compare hotel prices across booking sites from Google Hotels: Booking.com, Expedia, Hotels.com, Agoda, the official website and 30+ others, per night and per stay. No hotel IDs needed: search by hotel name, Google Hotels URL or a whole city. For rate parity and price tracking.

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

## Pricing

from $0.70 / 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 Hotels Prices by Booking Site

Monitor **rate parity**, track **OTA rates** and benchmark competitors: get the price of a hotel on **every booking site listed by Google Hotels** — Booking.com, Expedia, Hotels.com, Agoda, Trip.com, Priceline, the hotel's **official website** and 20+ others — for your exact dates and number of adults. Built for revenue managers, hotel price tracking tools and travel deal sites.

- 🏨 **Three ways to choose hotels**: Google Hotels URLs, hotel IDs, **plain hotel names** ("Novotel Paris Est"), or **a whole city** (prices the top N hotels Google shows there)
- ✅ **Your dates and number of adults are really applied**, so prices match Google for the same search
- 📊 **Ranked results**: each row has its price rank and a `isCheapest` flag, plus `isOfficialSite` to spot direct-booking rates
- ⚡ **Fast and cheap**: one HTTP request per hotel, no browser
- 🧾 Pay only for the price rows you get

### Output

One row per hotel and booking site, sorted from cheapest to most expensive:

```json
{
    "hotelName": "Novotel Paris Est",
    "provider": "Booking.com",
    "isOfficialSite": false,
    "priceRank": 1,
    "isCheapest": true,
    "pricePerNight": 136.9,
    "totalPrice": 410.69,
    "currency": "EUR",
    "checkIn": "2026-12-18",
    "checkOut": "2026-12-21",
    "nights": 3,
    "adults": 3,
    "bookingUrl": "https://www.google.com/travel/lodging/clk?...",
    "hotelId": "ChgI4pOK_6G_jNyKARoLL2cvMXg1cXMyYmIQAQ",
    "hotelClass": 4,
    "rating": 3.6,
    "reviewCount": 6598,
    "latitude": 48.8633,
    "longitude": 2.4162,
    "googleHotelsUrl": "https://www.google.com/travel/hotels/entity/...",
    "source": "Novotel Paris Est"
}
```

`pricePerNight` and `totalPrice` are always **taxes and fees included**; `totalPrice` covers the whole stay. When Google also provides them (US market), `pricePerNightBeforeTaxes` and `totalPriceBeforeTaxes` give the amounts before taxes; they are empty otherwise.

### How to use it

1. Add **hotels** (URLs, IDs or names) and/or **locations** (cities, neighborhoods).
2. Set your **check-in / check-out dates** and **number of adults**.
3. Pick the **currency** and the **country** of the Google version (it changes which booking sites appear).
4. Run, then export as JSON, CSV or Excel, or call the API.

#### Input example

```json
{
    "hotels": ["Novotel Paris Est", "https://www.google.com/travel/hotels/entity/ChgI4pOK_6G_jNyKARoLL2cvMXg1cXMyYmIQAQ"],
    "locations": ["Lyon"],
    "maxHotelsPerLocation": 10,
    "checkInDate": "2026-12-18",
    "checkOutDate": "2026-12-21",
    "adults": 2,
    "currency": "EUR",
    "countryCode": "fr"
}
```

### Use cases

- **Rate parity monitoring** for hotels and revenue managers: is your official rate the cheapest? Which OTA undercuts you?
- **Competitor benchmarking**: track your competitive set's prices across booking sites every day (schedule the Actor).
- **Travel and deal sites**: show the best booking option for each hotel.
- **Market research** on OTA pricing by city, date or season.

### FAQ

**Why do some hotels have only a few booking sites?** Google only lists sites that have availability for your exact dates and number of guests. Large groups and peak dates mean fewer offers.

**How do hotel names work?** The Actor searches the name on Google Hotels and takes the matching hotel. Add the city to avoid ambiguity ("Grand Hotel Stockholm").

**Can I get the full list of hotels of a city instead?** Use our [Google Hotels Scraper](https://apify.com/featherscrape/google-hotels-scraper) for search results with ratings, amenities and photos.

**Is it legal?** The Actor only collects publicly available data. You are responsible for using it in line with applicable laws and Google's terms.

### Support

Found a bug or need a field? Open an issue on the Issues tab or email **FeatherScrape@protonmail.com**. Issues are answered within 48 hours.

# Actor input Schema

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

Hotels to price: Google Hotels URLs, Google hotel IDs (starting with "Ch") or simply hotel names (e.g. "Novotel Paris Est").

## `locations` (type: `array`):

Optional: cities or neighborhoods. The Actor takes the first hotels Google shows there and prices each of them.

## `maxHotelsPerLocation` (type: `integer`):

How many hotels to price for each location.

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

Arrival date (YYYY-MM-DD). Leave both dates empty to let Google pick default dates (usually tonight, 1 night).

## `checkOutDate` (type: `string`):

Departure date (YYYY-MM-DD). Must be after the check-in date.

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

Number of adult guests. Prices and available offers depend on it.

## `maxOffersPerHotel` (type: `integer`):

Keep only the N cheapest booking sites for each hotel (Google often lists 20–35).

## `maxResultsTotal` (type: `integer`):

Optional cap on the total number of price rows, to control your spending.

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

ISO 4217 currency code for prices (USD, EUR, GBP, JPY…).

## `language` (type: `string`):

Language used on Google (en, fr, de, es…).

## `countryCode` (type: `string`):

Two-letter country code of the Google version to use (us, gb, fr…). It changes which booking sites appear.

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

Proxy used to reach Google. The default Apify Proxy works in most cases.

## Actor input object example

```json
{
  "hotels": [
    "Novotel Paris Est"
  ],
  "maxHotelsPerLocation": 10,
  "adults": 2,
  "maxOffersPerHotel": 100,
  "currency": "USD",
  "language": "en",
  "countryCode": "us",
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

Price per night and per stay on each booking site, with booking links, official-site flag and price rank.

# 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": [
        "Novotel Paris Est"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("featherscrape/google-hotels-prices-by-booking-site").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": ["Novotel Paris Est"],
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("featherscrape/google-hotels-prices-by-booking-site").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": [
    "Novotel Paris Est"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call featherscrape/google-hotels-prices-by-booking-site --silent --output-dataset

```

## MCP server setup

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

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/3gloJnaaOAcfP7m47/builds/SSyyyakyLZSY7iA79/openapi.json
