# Google Hotels Scraper · $2.50/1K · Prices, Taxes & Reviews (`featherscrape/google-hotels-scraper`) Actor

Scrape Google Hotels for any city and dates: price per night and per stay with taxes & fees, ratings, reviews, hotel class, amenities, photos and GPS. Optional prices from each booking site (Booking.com, Expedia, official site). Fast HTTP-only, no browser, pay only per hotel returned.

- **URL**: https://apify.com/featherscrape/google-hotels-scraper.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 $1.90 / 1,000 hotels

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 Scraper

Track hotel prices, benchmark competitors and build travel apps with data from **Google Hotels**. For any city, neighborhood or landmark, get every hotel with its **price per night and for the whole stay (taxes & fees included)**, ratings, reviews, hotel class, amenities, photos and location — and, optionally, **the price on each booking site (OTA rates: Booking.com, Expedia, Agoda, official website…)**.

- 📈 **Hotel price tracking & rate parity**: schedule it daily to monitor a destination or your competitive set
- ✅ **Your dates and number of adults are really applied**: prices match what you see on Google for the same search
- 🏷️ **OTA rates in the same run**: turn on *Include prices of each booking site* to compare Booking.com, Expedia, Hotels.com, Agoda and the hotel's official rate
- ⚡ **Fast and cheap**: plain HTTP requests, no headless browser, ~20 hotels per request
- 🌍 Any destination, currency and language
- 🧾 Pay only for the hotels you get

### What data can you extract?

| Field | Example |
|---|---|
| `name`, `hotelClass`, `hotelType` | "Novotel Paris Est", 4, "4-star hotel" |
| `pricePerNight`, `pricePerNightBeforeTaxes` | 188.12 (taxes & fees included), 156.36 |
| `pricePerNightText` | "€188", the nightly price as displayed by Google (before taxes in some markets, e.g. the US) |
| `totalPrice`, `priceBreakdown` | 564.35, `{base, taxes, fees, total}` for the whole stay |
| `rating`, `reviewCount`, `ratingDistribution` | 3.6, 6598, `{"5": 2422, "4": 1535, …}` |
| `amenities`, `amenityCodes` | \["Free Wi-Fi", "Fitness center", "Pet-friendly", …] |
| `checkIn`, `checkOut`, `nights`, `adults` | "2026-11-12", "2026-11-15", 3, 2 |
| `checkInTime`, `checkOutTime` | "2:00 PM", "12:00 PM" |
| `latitude`, `longitude`, `countryCode` | 48.8633, 2.4162, "FR" |
| `description`, `website`, `images` | Google's short description, official website, photo URLs |
| `nearbyPlaces` | `[{"name": "Gallieni", "type": "Subway", "travelTimes": [{"mode": "walking", "duration": "4 min"}]}]` |
| `googleHotelsUrl`, `googleMapsUrl`, `hotelId` | Links to the hotel on Google Hotels and Google Maps |
| `bookingSites` (option) | `[{"provider": "Booking.com", "priceRank": 1, "isCheapest": true, "isOfficialSite": false, "pricePerNight": 136.9, "totalPrice": 410.69, "bookingUrl": "…"}, …]` |

### How to use it

1. Enter one or more **locations** (e.g. `Paris`, `Shibuya, Tokyo`, `Times Square, New York`).
2. Optionally set **check-in / check-out dates** and the **number of adults**. Without dates, Google uses its default dates (usually tonight, 1 night).
3. Choose the **currency**, **language** and how many hotels you want per location.
4. Run the Actor and download your data as JSON, CSV, Excel, or use the API.

#### Input example

```json
{
    "locations": ["Paris", "Times Square, New York"],
    "checkInDate": "2026-11-12",
    "checkOutDate": "2026-11-15",
    "adults": 2,
    "maxResultsPerLocation": 100,
    "currency": "EUR",
    "language": "en"
}
```

### Use cases

- **Hotel price monitoring**: track rates of competitors or of a destination over time (schedule the Actor daily).
- **Travel apps and comparison sites**: enrich your listings with Google prices, ratings and photos.
- **Revenue management & market research**: compare price levels by star rating, neighborhood or date.
- **Lead generation**: build lists of hotels with their official websites and locations.

### Pricing

You pay per hotel returned (see the pricing tab). With **Include prices of each booking site** turned on, each hotel whose booking-site prices were fetched has an extra charge. Set **Max hotels in total** to cap your spending on a run.

### FAQ

**Are prices per night or for the whole stay?** Both: `pricePerNight` is the nightly rate shown on Google (taxes and fees included), `totalPrice` and `priceBreakdown` cover the whole stay.

**Why are some fields empty?** Google doesn't show every field for every property (vacation rentals often have no hotel class, small hotels may have no rating yet).

**How many hotels can I get per location?** Google shows about 20 hotels per page; the Actor follows the pages until it reaches your limit or Google has no more results.

**Can I get the price of each booking site (Booking.com, Expedia, official website…)?** Yes: turn on *Include prices of each booking site* and each hotel gets a `bookingSites` list. If you need one row per booking site, or want to price specific hotels by name or URL, use our [Google Hotels Prices by Booking Site](https://apify.com/featherscrape/google-hotels-prices-by-booking-site) Actor.

**Is it legal to scrape Google Hotels?** This 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

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

Cities, neighborhoods or landmarks to search hotels in, exactly as you would type them on Google Hotels (e.g. "Paris", "Shibuya, Tokyo", "near Times Square").

## `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 depend on it.

## `maxResultsPerLocation` (type: `integer`):

Maximum number of hotels to return for each location. Google shows about 20 hotels per page.

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

Optional cap on the total number of hotels across all locations, to control your spending.

## `includeBookingSites` (type: `boolean`):

Also fetch, for every hotel, the price on each booking site Google lists (Booking.com, Expedia, Agoda, official website…), with booking links. Adds one request per hotel and an extra charge per hotel (see pricing).

## `maxBookingSitesPerHotel` (type: `integer`):

With booking-site prices enabled, keep only the N cheapest sites for each hotel.

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

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

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

Language of descriptions and labels returned by Google (en, fr, de, es…).

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

Two-letter country code of the Google version to use (us, gb, fr…). It can affect which booking prices are shown.

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

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

## Actor input object example

```json
{
  "locations": [
    "Paris"
  ],
  "adults": 2,
  "maxResultsPerLocation": 50,
  "includeBookingSites": false,
  "maxBookingSitesPerHotel": 100,
  "currency": "USD",
  "language": "en",
  "countryCode": "us",
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `hotels` (type: `string`):

One item per hotel: prices per night and per stay, rating, reviews, hotel class, amenities, photos, coordinates and links.

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

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

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

```

## MCP server setup

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