# Google Hotels Scraper & API — Hotel Prices & Rates (`aaronoptimus/google-hotels-scraper`) Actor

Google Hotels scraper and API for hotel price comparison: prices for your dates, ratings, amenities, deals and price calendars. Full details add every booking site's price (Booking.com, Expedia, the hotel's own site…), room rates and rate parity. Search any city or paste links. No platform fees.

- **URL**: https://apify.com/aaronoptimus/google-hotels-scraper.md
- **Developed by:** [Aaron Tuttle](https://apify.com/aaronoptimus) (community)
- **Categories:** Travel, Automation, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.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.
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 for your dates and guests: $2.50 per 1,000 hotels, from $2 on higher Apify plans**, plus a small start fee and no platform fees. Built for **hotel price comparison and rate shopping**: turn on *Full details* to get **every booking site's price** (Booking.com, Expedia, Hotels.com, the hotel's own site and more) and a **rate-parity check** for $5 per 1,000 hotels (from $4). One hotel's prices on every booking site for 30 check-in dates cost about $0.16.

Search any city, area or landmark, paste Google Hotels links, or list specific hotels by name, link or Google Hotels ID. Every hotel comes with its rating and review breakdown, class, amenities, location and nearby places, deals and cheaper dates, and links to the same view on Google Hotels and Google Maps, for hotels and **vacation rentals** alike. Get the data as JSON, CSV, Excel or flat spreadsheet rows, or through the API.

Instead of loading pages in a browser, the scraper reads the same data feed the Google Hotels page loads in the background, so runs are fast and cheap: the prefilled example (20 New York hotels) usually finishes in under 20 seconds. People use it for hotel rate shopping, OTA rate-parity monitoring, hotel price tracking, travel price research, and hotel data for apps and AI agents.

> **What this tool doesn't do**
>
> - **No individual reviews.** You get ratings, review counts, star breakdowns and what guests mention. Review texts, reviewer names and profile photos are never collected.
> - **No member or signed-in prices.** It sees what a signed-out visitor from your chosen country sees.
> - **No hotels beyond Google's list.** A search returns the hotels Google Hotels lists for it (the run summary shows Google's total). For more, add neighborhoods or landmarks as extra destinations.
> - **No booking.** It returns prices and booking links; you book on the site you pick.

### Google Hotels scraper: why this one

- **Every booking site's price in one charge.** With *Full details*, a hotel with 20 booking sites is one result: each site's price per night and for the stay, with taxes, its free-cancellation deadline and a direct booking link, plus room-by-room rates.
- **Rate parity built in.** Each hotel with full details says whether its own website matches, beats or loses to the cheapest other booking site, by how much, and how far all the sites' prices spread.
- **Price calendars.** Check up to 60 consecutive check-in dates in one run to find the cheapest days for a hotel or a whole city.
- **Reliable by design.** Every throttled request is retried on a fresh session and IP with short backoff. Each page and hotel has a time limit, so runs never hang. If Google keeps blocking the default proxy, the scraper switches to residential proxy automatically, at no extra cost to you.
- **Failed searches are free.** Searches that fail and searches with no hotels cost nothing. Compute and proxies are included in the price.
- **Google's own filters.** Price range, hotel class, guest rating, amenities, hotel brands, free cancellation, special offers, eco-certified, and sorting by price, rating or reviews.
- **Paste Google Hotels links or IDs.** Set up a search or open a hotel on google.com/travel/hotels, copy the link, done. If you don't set dates, the link's own dates are used.
- **Spreadsheet-ready.** Pick *Rows* to get one row per hotel and booking site, with the same columns everywhere, for CSV, Excel, Google Sheets and BI tools.

### What Google Hotels data can you scrape?

| Data | Details |
|---|---|
| Hotel | Name, hotel class, guest rating, review count, rating breakdown (5★ to 1★), what guests mention (e.g. *Location: 111 positive, 5 negative*), Google's review summary, ratings on other sites |
| Price | Price per night as Google shows it, with taxes, total for the stay, taxes and fees, deals (*20% less than usual*), cheaper dates nearby |
| Booking sites | Every site's price per night and total, official-site flag, free cancellation and its deadline, direct booking link, logo |
| Rate parity | The hotel's own price, the cheapest other site and its price, the difference, the spread across all sites, and a verdict: parity, OTA cheaper or direct cheaper |
| Rooms | Room names with each site's rate and cancellation terms |
| Location | Address, latitude/longitude, neighborhood, area hierarchy, Google's location scores (overall, things to do, restaurants, transit, airport access), nearby attractions, transit, airports and restaurants with walking, transit and driving times |
| Property | Amenities, description, check-in and check-out times, photos, phone, website |
| Vacation rentals | Sleeps, bedrooms, bathrooms, essentials (*Entire apartment*, *2 beds*), provider links |
| IDs and links | Google Hotels ID, Knowledge Graph ID, Google Place ID, Google Hotels link, Google Maps link |

Search results already include price, rating, class, location, amenities and photos. *Full details* adds every booking site, rate parity, room rates, address, phone, nearby places and the full review breakdown.

#### Rate parity (with Full details)

| Field | Meaning |
|---|---|
| `parityStatus` | `parity` when the hotel's own site and the cheapest other site are within 1% (or one currency unit) of each other, otherwise `OTA cheaper` or `direct cheaper` |
| `officialSitePrice` | Price per night on the hotel's own website |
| `cheapestOtaName`, `cheapestOtaPrice` | The cheapest other booking site (online travel agency) and its price per night |
| `directUndercutBy` | `officialSitePrice` minus `cheapestOtaPrice`: positive when another site undercuts the hotel's own site, negative when the hotel's own site is cheaper |
| `priceSpreadPercent` | How far the highest booking-site price is above the lowest, in percent |

Prices are per night as Google shows them for your country. Without *Full details*, or when the hotel's own site or the other sites show no price, these fields are `null`. In the *Rows* format they repeat on each of the hotel's rows.

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

You pay per hotel, plus a $0.005 start fee per run. Compute and proxies are included; there are no platform-usage fees. The price per hotel depends on your Apify plan:

| | Free | Starter | Scale | Business |
|---|---|---|---|---|
| Hotel (from a search) | $0.003 | $0.0025 | $0.0022 | $0.002 |
| Hotel with all booking sites (*Full details*) | $0.006 | $0.005 | $0.0045 | $0.004 |
| Prefilled example: 20 hotels in New York | $0.065 | $0.055 | $0.049 | $0.045 |
| 20 hotels in each of 10 cities | $0.605 | $0.505 | $0.445 | $0.405 |
| 1,000 hotels | $3.01 | $2.51 | $2.21 | $2.01 |
| 50 hotels with all booking sites | $0.305 | $0.255 | $0.23 | $0.205 |
| One hotel on all booking sites, 30 check-in dates | $0.185 | $0.155 | $0.14 | $0.125 |

The examples include the start fee. One result per hotel carries every booking site's price, so a hotel with 20 booking sites is still one charge. Apify's $5 free plan covers about 1,600 hotels, or about 800 with all booking sites.

Searches that fail after all retries, searches where Google finds no hotels, and hotel names Google doesn't know are **not charged**. If the full details of a hotel from a search can't be loaded, you get its search listing instead, charged as a Hotel. To cap any run, use Apify's *Maximum cost per run* setting. The scraper stops cleanly at the limit.

### How to scrape Google Hotels

1. Enter your **destinations**, one per line, as you'd type them on Google Hotels (`Austin, TX`, `hotels near Times Square`, `Lake Tahoe cabins`). You can also paste Google Hotels links, or list **specific hotels** by name, link or Google Hotels ID.
2. Set the **check-in date** (e.g. `2026-11-20`, or `14 days` from the run), the **nights** and the **guests**.
3. Optionally set **currency**, **country**, **filters** and **sort order**.
4. Turn on **Full details** if you need every booking site's price, rate parity and room rates.
5. Click **Start**, then download your results as JSON, CSV or Excel, or get them through the API.

Already have Google Hotels IDs (they start with `Ch`, e.g. `ChYInb3Dn7D48odRGgovbS8wODBteGw4EAE`)? Paste them into *Specific hotels*: no name lookup needed. Every result's `hotelId` works there too.

#### Input examples

Hotels in two cities for a 2-night stay:

```json
{ "searchQueries": ["Austin, TX", "Paris"], "checkInDate": "2026-11-20", "nights": 2, "adults": 2 }
```

Rate shopping: a hotel and its competitors on every booking site, as spreadsheet rows (specific hotels always come with full details):

```json
{ "hotels": ["The Plaza New York", "The St. Regis New York", "Park Hyatt New York"], "checkInDate": "14 days", "outputFormat": "rows" }
```

The cheapest dates for one hotel over the next month, with every booking site's price:

```json
{ "hotels": ["The Plaza New York"], "checkInDate": "7 days", "numberOfCheckInDates": 30 }
```

Filtered and sorted, as spreadsheet rows:

```json
{ "searchQueries": ["Miami Beach"], "checkInDate": "30 days", "sortBy": "lowestPrice", "minRating": "4", "hotelClass": ["4", "5"], "maxPrice": 400, "freeCancellation": true, "outputFormat": "rows" }
```

Vacation rentals for a family:

```json
{ "searchQueries": ["Lake Tahoe"], "propertyType": "vacationRentals", "checkInDate": "30 days", "nights": 3, "adults": 4, "childrenAges": ["8", "12"] }
```

#### Output example (shortened)

```json
{
  "type": "hotel",
  "searchQuery": "New York",
  "position": 1,
  "name": "Mandarin Oriental, New York",
  "propertyType": "hotel",
  "hotelClass": 5,
  "rating": 4.6,
  "reviewCount": 1841,
  "ratingBreakdown": [{ "stars": 5, "percent": 79, "count": 1423 }],
  "reviewTopics": [{ "topic": "Spa", "mentions": 33, "positive": 28, "negative": 4 }],
  "checkInDate": "2026-11-20",
  "checkOutDate": "2026-11-23",
  "nights": 3,
  "adults": 2,
  "children": 0,
  "currency": "USD",
  "pricePerNight": 816,
  "pricePerNightWithTaxes": 940,
  "priceIncludesTaxes": false,
  "totalPriceWithTaxes": 2818.76,
  "taxes": 371.47,
  "cheapestBookingSite": "Evendo",
  "parityStatus": "OTA cheaper",
  "officialSitePrice": 995,
  "cheapestOtaPrice": 816,
  "cheapestOtaName": "Evendo",
  "directUndercutBy": 179,
  "priceSpreadPercent": 21.9,
  "bookingSites": [
    { "name": "Mandarinoriental.com", "isOfficialSite": true, "pricePerNight": 995, "pricePerNightWithTaxes": 1146, "totalPriceWithTaxes": 3439, "freeCancellation": true, "freeCancellationUntil": "2026-11-19", "bookingUrl": "https://..." },
    { "name": "Evendo", "isOfficialSite": false, "pricePerNight": 816, "pricePerNightWithTaxes": 940, "totalPriceWithTaxes": 2819, "freeCancellation": true, "freeCancellationUntil": "2026-11-19", "bookingUrl": "https://..." }
  ],
  "roomOffers": [{ "bookingSite": "Hotels.com", "roomName": "Room, 1 King Bed (Hudson View)", "pricePerNight": 996, "freeCancellation": true }],
  "latitude": 40.7688844,
  "longitude": -73.983044,
  "address": "80 Columbus Cir, New York, NY 10023, United States",
  "neighborhood": "Midtown Manhattan",
  "locationScores": { "overall": 4.4, "thingsToDo": 4.8, "restaurants": 4.7, "transit": 4.5, "airportAccess": 4.1 },
  "checkInTime": "3:00 PM",
  "checkOutTime": "12:00 PM",
  "amenities": ["Indoor pool", "Fitness center", "Restaurant", "Bar", "Free Wi-Fi", "Pet-friendly"],
  "nearbyPlaces": [{ "name": "Central Park", "category": "attraction", "travelTimes": { "walk": "4 min" } }],
  "hotelId": "ChYInb3Dn7D48odRGgovbS8wODBteGw4EAE",
  "googleHotelsUrl": "https://www.google.com/travel/hotels/entity/ChYInb3Dn7D48odRGgovbS8wODBteGw4EAE?hl=en-US&gl=us&ts=...",
  "googleMapsUrl": "https://www.google.com/maps?cid=5841111280168001181",
  "hasAllPrices": true,
  "warnings": []
}
```

Searches that fail, or find nothing, appear as `"type": "error"` items with an `error` message (never charged).

**Rows** format returns rows with `recordType` set to `hotel_booking_site` (one per hotel and booking site), `hotel` (a hotel without booking-site prices) or `error`, and the same columns on every row, rate parity included.

The dataset also has ready-made table views: **Overview**, **Prices**, **Hotel details** and **Rows**, and every field is described in the dataset schema. The run's key-value store has an `OUTPUT` record with a summary: hotels returned, failures, Google's total result count per search, and retries.

### Google Hotels API: Python, JavaScript, Zapier, Make and AI agents (MCP)

JavaScript:

```js
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: 'MY_APIFY_TOKEN' });
const run = await client.actor('aaronoptimus/google-hotels-scraper').call({ searchQueries: ['Austin, TX'], checkInDate: '14 days' });
const { items } = await client.dataset(run.defaultDatasetId).listItems();
```

Python:

```python
from apify_client import ApifyClient

client = ApifyClient("MY_APIFY_TOKEN")
run = client.actor("aaronoptimus/google-hotels-scraper").call(run_input={"searchQueries": ["Austin, TX"], "checkInDate": "14 days"})
items = client.dataset(run["defaultDatasetId"]).list_items().items
```

**AI agents (MCP):** add `https://mcp.apify.com?tools=aaronoptimus/google-hotels-scraper` to Claude, Cursor or any MCP client. In Claude Code: `claude mcp add --transport http google-hotels "https://mcp.apify.com?tools=aaronoptimus/google-hotels-scraper"`.

You can also schedule runs (for example a daily price check) and send the results to Google Sheets, Slack, Zapier, Make or webhooks with Apify integrations.

### Tips

- **Prices depend on dates, guests, currency and country**, just like on Google. Set them the way your travelers would, including each child's age (0 to 17). Without a check-in date, Google uses its own default dates.
- **Specific hotels by name:** the scraper picks the Google Hotels result whose name matches yours. If Google doesn't know the name, you get an error for it instead of a random hotel, and it isn't charged. A hotel's Google Hotels link or ID always finds the exact hotel.
- **Taxes:** in some countries Google shows prices before taxes, elsewhere with taxes. In the US, for example, the price includes fees but not taxes. `pricePerNight` is the price as Google shows it for your country, `priceIncludesTaxes` says which it is, and `pricePerNightWithTaxes` and `totalPriceWithTaxes` always include taxes and fees.
- **Hotels and vacation rentals:** like on Google, a hotel search can include a few vacation rentals. `propertyType` (`hotel` or `vacation rental`) tells them apart. Set *Property type* to *Vacation rentals* to search rentals only.
- **More hotels per destination:** Google shows about 20 hotels per page. Raise *Max hotels per destination* to get more pages, up to the number Google lists for that search (shown in the run summary).
- **Price calendars:** combine *Specific hotels* with *Price calendar: number of check-in dates* to track one hotel day by day. Schedule the run daily to watch prices change.
- **Full details only when you need them.** Each hotel's details take one more request, so leave it off for quick price lists.
- **Big runs:** raise *Parallel sessions* for speed. If the log shows many retries, add a small *Delay between requests*.

### FAQ

**Can I track one hotel's prices across many dates?** Yes. Put the hotel (name, Google Hotels link or ID) in *Specific hotels* and set *Price calendar: number of check-in dates* (up to 60). Specific hotels always come with every booking site's price, so 30 dates cost about $0.16 on the Starter plan.

**How do I monitor hotel prices every day?** Save the input as a task, use a relative check-in such as `30 days`, and add a daily schedule. Each run prices the same stay length from that day.

**How do I check rate parity for my hotel?** Put your hotel, and a few competitors if you like, in *Specific hotels*. Each result's `parityStatus` says whether the hotel's own website matches the cheapest other booking site, and `directUndercutBy` by how much. Schedule it daily to catch undercutting early.

**Why do some prices differ from what I see on Google?** Hotel prices change by the minute, and Google adapts them to your country, currency and whether you're signed in (some sites show member-only rates). The scraper sees the prices a signed-out visitor from your chosen country would see: Google picks booking sites and the tax display by where a visitor is, so the scraper's Apify Proxy IPs are in that country. Now and then Google places one of those IPs in another country. The scraper notices (from the booking links and the price format) and asks again from another IP; if Google keeps doing it, those hotels say so in `warnings`.

**Why do some hotels have no price?** Google lists them, but no booking site has rates for those dates (sold out, or not yet published). They're returned like any other hotel (and count as a result), with `pricePerNight: null` and a note in `warnings`.

**Why does a search return no hotels when Google Hotels shows some?** When nothing matches your destination or filters, Google says "0 results" and fills the page with other hotels as suggestions. The scraper doesn't return those (or charge for them); the search is listed as having no hotels. Loosen the filters or check the spelling.

**Do I get individual reviews?** No. You get the rating, review count, star breakdown, what guests mention, Google's review summary and ratings on other sites. Individual reviews, reviewer names and profile photos are never collected.

**Is there an official Google Hotels API?** Google's hotel APIs are for hotels and booking partners that send prices to Google, not for reading Google Hotels results. This scraper reads the same public data the Google Hotels website shows.

**What happens if Google blocks a request?** The scraper retries on a fresh session and IP, and switches to residential proxy if needed, at no extra cost to you. If a search still fails within its time limit, it's listed with an error and **not charged**. If the details of a hotel from a search fail, you still get its search listing, at the lower price. Anything that fails completely is listed with an error and not charged.

**Is it legal?** The scraper only collects publicly available information that Google Hotels shows to any visitor. It doesn't log in, solve CAPTCHAs or collect personal data. You're responsible for using the data in line with Google's terms and your local laws.

### Related tools

- [Google Flights Scraper](https://apify.com/aaronoptimus/google-flights-scraper): fares, booking links and cheapest-date calendars for the same trip.
- [Google Trends Scraper](https://apify.com/aaronoptimus/google-trends-scraper): when interest in a destination peaks through the year.

### Support

Found a problem or need a field? Open an issue on the Issues tab. If the Actor saves you time, a short review helps others find it. See the Changelog for updates.

This Actor is an independent tool and is not affiliated with, endorsed by or sponsored by Google.

# Changelog

This Actor's version history is a separate document: https://apify.com/aaronoptimus/google-hotels-scraper/changelog.md

# Actor input Schema

## `searchQueries` (type: `array`):

Where to search, as you would type it on Google Hotels: a city, area or landmark ("Austin, TX", "hotels near Times Square", "Lake Tahoe cabins"). You can also paste a Google Hotels search link (its dates are used when you leave the dates below empty) or a hotel link (that hotel comes with full details, like under "Specific hotels").

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

Optional. Google Hotels hotel links, Google Hotels IDs (they start with Ch), or hotel names such as "The Plaza New York" (the Google Hotels result whose name matches best is used; if none matches, you get an error, not a charge). Each hotel is returned with full details and every booking site's price.

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

A date like 2026-11-20, or a date relative to the run like "14 days". Leave empty to use Google's default dates; a stay of more than one night then starts tomorrow.

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

Optional. Leave empty to stay for the number of nights below.

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

Length of stay when no check-out date is set (Google Hotels shows prices for up to 30 nights).

## `numberOfCheckInDates` (type: `integer`):

Repeat every search for this many consecutive check-in dates, keeping the same length of stay. For example 30 gives you each hotel's price for every day of the next month. Without a check-in date it starts on a pasted link's dates, or tomorrow.

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

Number of adults. Prices depend on it.

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

Optional. One age (0-17) per child, e.g. 8 and 12 for two children. Up to 6 children.

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

3-letter currency code for all prices, e.g. USD, EUR, GBP, CAD, AUD, JPY, INR.

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

2-letter country code you search from, e.g. US, GB, DE, IN. Google adapts which booking sites it shows and whether prices include taxes; Apify Proxy IPs are taken from this country.

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

Language of hotel descriptions and texts, e.g. en-US, en-GB, de, fr, es, ja.

## `propertyType` (type: `string`):

Hotels, or vacation rentals (homes and apartments).

## `sortBy` (type: `string`):

Order of the results.

## `minPrice` (type: `integer`):

In the currency above.

## `maxPrice` (type: `integer`):

In the currency above.

## `hotelClass` (type: `array`):

Only hotels with these star ratings.

## `minRating` (type: `string`):

Only hotels rated at least this high by guests.

## `amenities` (type: `array`):

Only hotels that have all of these.

## `brands` (type: `array`):

Only hotels from these chains (all of each chain's brands, e.g. Hilton includes Hampton and DoubleTree).

## `freeCancellation` (type: `boolean`):

Only hotels with a free-cancellation rate.

## `specialOffers` (type: `boolean`):

Only hotels with a deal or special offer.

## `ecoCertified` (type: `boolean`):

Only hotels with an eco certification.

## `maxHotelsPerSearch` (type: `integer`):

How many hotels to return per destination (and per check-in date). Google shows about 20 per page; more hotels take more pages.

## `includeDetails` (type: `boolean`):

Open each hotel's page: prices from every booking site with direct links, a rate-parity check (the hotel's own site against the cheapest other site), room offers, address, phone, all amenities, review breakdown and nearby places. Charged as "Hotel with all booking sites" instead of "Hotel". Specific hotels always get full details.

## `outputFormat` (type: `string`):

Items: one rich JSON record per hotel (best for the API and code). Rows: flat rows with the same columns everywhere, one per hotel and booking site (best for CSV, Excel and Google Sheets).

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

Google throttles repeated requests. Apify Proxy is recommended; sessions and IPs rotate automatically. IPs come from the Country above unless you pick a proxy country here.

## `useResidentialFallback` (type: `boolean`):

If Google keeps blocking the default proxy, switch to Apify residential proxy in the same country automatically. No extra cost to you.

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

How many requests run at the same time, each with its own session and IP. Higher is faster for big runs.

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

How many times to retry with a fresh session and IP when Google throttles a request.

## `maxSecondsPerTask` (type: `integer`):

Stop retrying a page or hotel after this long so one stubborn request can't stall the run. It is reported as failed and not charged.

## `delayBetweenRequestsSecs` (type: `integer`):

Pause between requests in each session to stay under Google's rate limits.

## Actor input object example

```json
{
  "searchQueries": [
    "New York"
  ],
  "checkInDate": "14 days",
  "nights": 1,
  "numberOfCheckInDates": 1,
  "adults": 2,
  "currency": "USD",
  "country": "US",
  "language": "en-US",
  "propertyType": "hotels",
  "sortBy": "relevance",
  "freeCancellation": false,
  "specialOffers": false,
  "ecoCertified": false,
  "maxHotelsPerSearch": 20,
  "includeDetails": false,
  "outputFormat": "items",
  "proxyConfiguration": {
    "useApifyProxy": true
  },
  "useResidentialFallback": true,
  "maxConcurrency": 5,
  "maxRetries": 6,
  "maxSecondsPerTask": 120,
  "delayBetweenRequestsSecs": 1
}
```

# Actor output Schema

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

No description

## `runSummary` (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 = {
    "searchQueries": [
        "New York"
    ],
    "checkInDate": "14 days",
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("aaronoptimus/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 = {
    "searchQueries": ["New York"],
    "checkInDate": "14 days",
    "proxyConfiguration": { "useApifyProxy": True },
}

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

```

## MCP server setup

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