# Google Hotels Scraper - Prices, Ratings & Details (`alaathr/google-hotels-prices`) Actor

Get hotel prices for your dates from Google Hotels: nightly and total price with taxes, star class, rating, reviews, address, coordinates, phone and website, for any city. Pay only for hotels delivered.

- **URL**: https://apify.com/alaathr/google-hotels-prices.md
- **Developed by:** [Alaa Tahir](https://apify.com/alaathr) (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 $3.00 / 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.

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 - Prices, Ratings & Details

Get **hotel prices for your dates from Google Hotels** in any city: nightly and total price with taxes, Google's price insight ("25% less than usual"), star class, rating and review count, address, coordinates, phone, website and links.

Built for reliability: every search runs in a fresh session and is retried automatically, and **you only pay for hotels delivered**.

### What you get for each hotel

| Group | Fields |
| --- | --- |
| Prices | Per night and for the stay, before and after taxes, currency, price insight |
| Quality | Star class, guest rating, review count, reviews per star |
| Place | Address, latitude/longitude, country, check-in and check-out times |
| Contact and links | Phone, website, Google Maps page, Google Hotels page |
| Context | Dates and nights the prices apply to, the search that found the hotel |

### How to use it

1. Enter one or more **locations**: a city, a district or a landmark, as you would type it on Google.
2. Pick your **check-in and check-out dates** (default: in 14 days, for 2 nights).
3. Choose the **coverage**: one search returns about 18 hotels; "Standard" combines 6 searches (star classes and price levels) for 60-80 hotels per city, "Deep" goes up to about 150.
4. Optionally keep only hotels from a **minimum star class** or under a **maximum price per night**.

### Input example

```json
{
  "locations": ["Paris", "Marrakech"],
  "checkIn": "2026-11-20",
  "checkOut": "2026-11-22",
  "coverage": "standard",
  "maxHotelsPerLocation": 60,
  "minStars": 3
}
```

### Output example

```json
{
  "location": "Paris",
  "name": "Oden Hôtel Paris Ivry",
  "hotelClass": "4-star tourist hotel",
  "stars": 4,
  "rating": 4.7,
  "reviewCount": 161,
  "pricePerNight": 79.25,
  "pricePerNightWithTaxes": 96.45,
  "totalPrice": 158.51,
  "taxes": 34.4,
  "totalPriceWithTaxes": 192.91,
  "currency": "USD",
  "priceNote": "25% less than usual",
  "checkIn": "2026-11-20",
  "checkOut": "2026-11-22",
  "nights": 2,
  "address": "Ivry-sur-Seine, France",
  "latitude": 48.818636,
  "longitude": 2.380975,
  "phone": "+33 1 77 67 39 32",
  "website": "https://oden-paris-ivry.com/",
  "googleHotelsUrl": "https://www.google.com/travel/hotels/entity/ChkI-YOXoMKf15FAGg0vZy8xMXZscjdieTA3EAE"
}
```

### Good to know

- Prices are in **US dollars**, for **2 adults in 1 room**, as Google shows them by default.
- "Price per night" includes mandatory fees but not taxes; the "with taxes" fields include both.
- Prices change often: schedule the Actor (daily or weekly) to track them over time.

### Pricing

**$3.00 per 1,000 hotels** (pay per event). Searches that fail after every retry cost nothing. Set a maximum cost per run in the run options for a hard cap.

#### How much does it cost to scrape Google Hotels?

| Run | Cost |
| --- | --- |
| One city, "Quick" coverage (about 18 hotels) | about $0.05 |
| One city, "Standard" coverage (60 to 80 hotels) | about $0.20 |
| One city, "Deep" coverage (about 150 hotels) | about $0.45 |

Apify's free plan includes $5 of usage every month: enough for about 1,600 hotels a month without paying anything.

### Use it from code or from an AI agent

Run it through the Apify API or the Python/JavaScript clients, or let an assistant call it as a tool through the Apify MCP server.

### More tools from this developer

| Tool | What it returns | Price |
| --- | --- | --- |
| [AliExpress Search Scraper](https://apify.com/alaathr/aliexpress-search-products) | AliExpress products for any keyword or URL: price, discount, units sold, rating, delivery | $3.00 / 1,000 products |
| [Google Ads Transparency Scraper](https://apify.com/alaathr/google-ads-transparency-scraper) | Every Google ad of an advertiser or website: format, dates shown, image, texts and link | $1.00 / 1,000 ads |
| [Google Flights Scraper](https://apify.com/alaathr/google-flights-scraper) | Every flight of a route and date with price, times, stops, layovers and CO2, plus a lowest-price calendar | $2.50 / 1,000 searches |
| [Google Trends Scraper](https://apify.com/alaathr/google-trends-reliable) | Interest over time, by region and related queries for your own keyword list | $2.50 / 1,000 search terms |
| [Google Trends Trending Now Scraper](https://apify.com/alaathr/google-trends-trending-now) | Every trending search of a country or US state, with volume, timing, category and news | $0.80 / 1,000 trends |
| [Walmart Scraper](https://apify.com/alaathr/walmart-scraper) | Walmart search results: price, was price, rating, seller, stock, delivery and badges | $1.50 / 1,000 products |

### FAQ

**Can I monitor prices for the same hotels every day?** Yes: schedule the Actor with fixed dates and compare runs by `hotelId`.

**Why does a city give fewer hotels than the maximum?** Some places have few hotels on Google for those dates; "Deep" coverage finds the most.

**Is this an official Google product?** No. This Actor is not affiliated with or endorsed by Google. It reads the public results any visitor sees on Google Hotels and collects business information only.

# Actor input Schema

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

Where to look for hotels, as you would type it on Google: a city, a district or a landmark ("Paris", "Marrakech Medina", "near Times Square").

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

Arrival date (YYYY-MM-DD). Leave empty for 14 days from today.

## `checkOut` (type: `string`):

Departure date (YYYY-MM-DD). Leave empty for a 2-night stay.

## `coverage` (type: `string`):

How many searches are combined per location. One search returns about 18 hotels; the others add star classes and price levels to find more.

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

Stop collecting a location once this many unique hotels are found.

## `minStars` (type: `integer`):

Only keep hotels with at least this official star class (0 keeps everything, including unrated properties).

## `maxPricePerNight` (type: `integer`):

Only keep hotels at or below this nightly price before taxes. Leave empty for no limit.

## `maxConcurrency` (type: `integer`):

How many searches run at the same time.

## `maxRetries` (type: `integer`):

How many fresh sessions are tried before a search is given up (failed searches cost nothing).

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

Proxies used to reach Google. The default works for most runs.

## Actor input object example

```json
{
  "locations": [
    "Paris",
    "Marrakech"
  ],
  "checkIn": "",
  "checkOut": "",
  "coverage": "standard",
  "maxHotelsPerLocation": 60,
  "minStars": 0,
  "maxConcurrency": 3,
  "maxRetries": 6,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

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

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

```

## MCP server setup

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