# Google Hotels & Vacation Scraper  - Most Comprehensive (`kaix/google-hotels-scraper`) Actor

🔥 ~$0.1/1K hotels 🔥 Scrape Google Hotels and Vacation Rentals with full filter support - price, hotel class, guest rating, amenities, property types, offers, eco-certified. Includes batch searches, booking links, and paginated reviews.

- **URL**: https://apify.com/kaix/google-hotels-scraper.md
- **Developed by:** [Kai](https://apify.com/kaix) (community)
- **Categories:** Lead generation, Travel, Real estate
- **Stats:** 2 total users, 1 monthly users, 87.5% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.09 / 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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## Google Hotels & Vacation Rentals Scraper

Scrape Google Hotels and Vacation Rentals for property search results, details, pricing, reviews, and photos. Supports batch searches with filters, sorting, hotel URL lookups, and full photo gallery extraction.

### Why use this scraper?

- Both property types: hotels and vacation rentals in one actor
- Batch searches: run multiple location queries in a single actor run
- Hotel URL lookup: fetch details for specific hotels by URL without searching
- Full filter support: price range, hotel class, guest rating, amenities, property types, offers, eco-certified
- Booking links: pricing from multiple providers with logos, cancellation policies, member rates, and official site detection
- Reviews: aggregated from Google, Tripadvisor, Trip.com, and more - with sorting, free-text search, sub-ratings, photos, and highlights
- Photos: full gallery extraction (690+ photos per hotel), categorized as Bedroom, Exterior, Food & Drink, etc.
- Rich detail: amenities, descriptions, check-in/out times, neighborhood scores, nearby places with travel times, price history, eco certification, web results
- Structured output: typed HotelResult records with all data from the Google Hotels property page

### Use cases

- Monitor hotel prices across locations and dates
- Compare vacation rental prices across booking platforms
- Build accommodation databases for travel analytics
- Track pricing trends for specific properties or areas
- Feed hotel data into alerting or recommendation pipelines

### How to use

#### Basic hotel search

```json
{
  "searches": [
    { "location": "Hue", "checkInDate": "2026-05-01", "checkOutDate": "2026-05-03" }
  ]
}
````

#### Vacation rentals only

```json
{
  "type": "vacation_rentals",
  "searches": [
    { "location": "Paris", "checkInDate": "2026-06-15", "checkOutDate": "2026-06-22" }
  ]
}
```

#### Batch searches

```json
{
  "searches": [
    { "location": "New York", "checkInDate": "2026-06-15", "checkOutDate": "2026-06-18" },
    { "location": "Tokyo", "checkInDate": "2026-07-01", "checkOutDate": "2026-07-05" },
    { "location": "London", "checkInDate": "2026-08-10", "checkOutDate": "2026-08-14" }
  ]
}
```

#### With filters

```json
{
  "searches": [
    { "location": "Hue", "checkInDate": "2026-05-01", "checkOutDate": "2026-05-03" }
  ],
  "maxPrice": 100,
  "currency": "USD",
  "hotelClass": [4, 5],
  "guestRating": "4.0",
  "amenities": ["Pool", "Free Wi-Fi"],
  "propertyTypes": ["Resorts", "Boutique hotels"],
  "freeCancellation": true,
  "sortBy": "price_low",
  "adults": 2,
  "rooms": 1
}
```

#### With details and reviews

```json
{
  "searches": [
    { "location": "Hue", "checkInDate": "2026-05-01", "checkOutDate": "2026-05-03" }
  ],
  "includeDetails": true,
  "includeReviews": true,
  "maxResults": 10
}
```

#### Lookup specific hotels by URL

```json
{
  "hotelUrls": [
    "https://www.google.com/travel/hotels/entity/ChkIq_atzbv20-8ZGg0vZy8xMXFoMzRoa3pfEAE"
  ],
  "searches": [
    { "location": "Tokyo", "checkInDate": "2026-05-19", "checkOutDate": "2026-05-22" }
  ],
  "currency": "VND",
  "includeDetails": true,
  "includeReviews": true,
  "maxReviewsPerHotel": 100,
  "reviewSort": "highest_score",
  "maxPhotosPerHotel": 0
}
```

#### Reviews with sorting and search

```json
{
  "hotelUrls": ["https://www.google.com/travel/hotels/entity/..."],
  "searches": [{ "location": "Tokyo", "checkInDate": "2026-05-19", "checkOutDate": "2026-05-22" }],
  "includeReviews": true,
  "maxReviewsPerHotel": 50,
  "reviewSort": "highest_score",
  "reviewSearch": "breakfast"
}
```

#### Multiple guests

```json
{
  "searches": [
    { "location": "Bali", "checkInDate": "2026-07-01", "checkOutDate": "2026-07-08" }
  ],
  "adults": 4,
  "children": 2,
  "rooms": 2
}
```

### Input

| Field | Type | Default | Description |
|---|---|---|---|
| `hotelUrls` | string\[] | | Hotel entity URLs for lookup mode (skips search, fetches details directly) |
| `searches` | array | | List of `{ location, checkInDate, checkOutDate }` |
| `type` | enum | `both` | `hotels`, `vacation_rentals`, `both` |
| `adults` | integer | `2` | Adult guests (1-9) |
| `children` | integer | `0` | Child guests (0-9) |
| `rooms` | integer | `1` | Number of rooms (1-9) |
| `currency` | string | `USD` | ISO 4217 currency code (e.g. `USD`, `EUR`, `VND`) |
| `minPrice` | integer | | Minimum price per night in local currency |
| `maxPrice` | integer | | Maximum price per night in local currency |
| `hotelClass` | integer\[] | | Star levels: `[2, 3, 4, 5]` |
| `guestRating` | enum | | `3.5`, `4.0`, `4.5` |
| `propertyTypes` | string\[] | | `Apartment hotels`, `Bed and breakfasts`, `Spa hotels`, `Resorts`, `Motels`, `Inns`, `Hostels`, `Boutique hotels`, `Beach hotels`, `Other` |
| `amenities` | string\[] | | `Free Wi-Fi`, `Free breakfast`, `Restaurant`, `Bar`, `Kid-friendly`, `Pet-friendly`, `Free parking`, `Parking`, `EV charger`, `Room service`, `Fitness center`, `Spa`, `Pool`, `Indoor pool`, `Outdoor pool`, `Air-conditioned`, `Wheelchair accessible`, `Beach access`, `All-inclusive available` |
| `freeCancellation` | boolean | `false` | Properties with free cancellation |
| `specialOffers` | boolean | `false` | Properties with special offers |
| `ecoCertified` | boolean | `false` | Eco-certified properties only |
| `sortBy` | enum | `relevance` | `relevance`, `price_low`, `price_high`, `rating`, `distance` |
| `maxResults` | integer | `50` | Maximum results per search |
| `includeDetails` | boolean | `false` | Fetch booking links, amenities, description per property (slower) |
| `includeReviews` | boolean | `false` | Fetch reviews per property (slower) |
| `maxReviewsPerHotel` | integer | `40` | Max reviews per property. `0` = fetch all |
| `reviewSort` | enum | `most_helpful` | `most_helpful`, `most_recent`, `highest_score`, `lowest_score` |
| `reviewSearch` | string | | Free-text search within reviews (e.g. `"breakfast"`, `"clean rooms"`) |
| `maxPhotosPerHotel` | integer | `0` | Max photos per property. `0` = fetch all from gallery (~690 unique) |
| `proxyConfiguration` | object | | Proxy settings. Residential proxies recommended |

### Output

Each result is a `HotelResult` object. Fields marked with **(D)** require `includeDetails: true`. Fields marked with **(R)** require `includeReviews: true`.

#### Example output

```json
{
  "searchType": "hotel",
  "location": "Hue",
  "checkInDate": "2026-04-23",
  "checkOutDate": "2026-04-24",
  "name": "Alba Hotel",
  "propertyId": "17907820141034738872",
  "placeId": "ChIJmZg7HjmhQTER97bQ77pbnPc",
  "starRating": 3,
  "propertyType": "3-star hotel",
  "latitude": 16.4617,
  "longitude": 107.5904,
  "distance": "0.1 km away",
  "pricePerNight": 478989,
  "totalPrice": 478989,
  "currency": "VND",
  "reviewScore": 4.3,
  "reviewCount": 396,
  "reviewSource": "Google",
  "photos": [{"url": "https://lh3.googleusercontent.com/...", "label": null, "categoryIds": [1, 5]}],
  "amenities": ["Free parking", "Restaurant", "Bar", "Room service", "Free Wi-Fi", "Spa", "Pool", "..."],
  "ecoBadge": false,
  "highlights": ["Higher guest rating"],
  "phone": "0234 3839 998",
  "website": "https://www.booking.com/hotel/vn/hue-queen-2.vi.html...",
  "countryCode": "VN",
  "address": "12 Nguyễn Văn Cừ, Vĩnh Ninh, Thuận Hóa, Huế",
  "description": "Surrounded by restaurants and cafes, this laid-back hotel is 2 km from the Huế Museum of Royal Fine Arts...",
  "checkInTime": "2:00 PM",
  "checkOutTime": "12:00 PM",
  "neighborhood": "Thuan Hoa",
  "neighborhoodScores": [{"category": 4, "rating": "4.8"}, {"category": 1, "rating": "4.8"}, "..."],
  "ratingDistribution": [{"stars": 5, "count": 217}, {"stars": 4, "count": 109}, {"stars": 3, "count": 48}, "..."],
  "aspectSentiments": [
    {"aspect": "Breakfast", "score": 0.53, "positive": 16, "negative": 4, "total": 22},
    {"aspect": "Service", "score": 0.63, "positive": 47, "negative": 7, "total": 59},
    "... 12 more"
  ],
  "externalReviewSources": [{"source": "Tripadvisor", "rating": 4.6, "maxRating": 5, "count": 145}],
  "bookingLinks": [
    {"provider": "Alba Hotel", "price": 684000, "isOfficialSite": true, "freeCancellation": false},
    {"provider": "Agoda", "price": 478989, "isOfficialSite": false, "freeCancellation": false},
    "... 6 more"
  ],
  "priceHistory": {"currentPrice": 478989, "typicalLow": 630287, "typicalHigh": 756424, "percentile": 0.74},
  "nearbyPlaces": [
    {"name": "Hue Imperial City", "rating": 4.5, "category": "Point of interest", "travelTimes": [{"mode": "car", "duration": "7 min"}]},
    {"name": "Thiên Mụ Pagoda", "rating": 4.5, "travelTimes": [{"mode": "car", "duration": "12 min"}]},
    "... 29 more"
  ],
  "nearbyHotels": [{"name": "Moonlight Hotel Hue", "starRating": 4, "pricePerNight": 665394}, "..."],
  "sponsoredHotels": [{"name": "Meliá Vinpearl Hue", "reviewScore": 4.8, "pricePerNight": 2110876}, "..."],
  "nearbyVacationRentals": [{"name": "canary homestay", "sleeps": 10, "pricePerNight": 1980000}, "..."],
  "webResults": [
    {"title": "Alba Hotel - Booking.com", "url": "https://www.booking.com/...", "snippet": "Located in Hue...", "domain": "https://www.booking.com"}
  ],
  "photoCategories": [
    {"categoryId": 6, "name": "Bedroom", "count": 127, "thumbnailUrl": "https://..."},
    {"categoryId": 5, "name": "Exterior", "count": 187, "thumbnailUrl": "https://..."}
  ],
  "reviews": [
    {
      "source": "Google", "author": "Aaron Kraus", "rating": 5, "maxRating": 5,
      "text": "Thanh Phan helped us really well!...",
      "date": "3 months ago",
      "subRatings": [{"category": "Rooms", "score": 5, "maxScore": 5}, {"category": "Service", "score": 5, "maxScore": 5}],
      "highlights": ["Luxury"]
    },
    "... 2 more"
  ]
}
```

#### Search result fields (always available)

| Field | Type | Description |
|---|---|---|
| `searchType` | string | `"hotel"` or `"vacation_rental"` |
| `location` | string | Search location |
| `checkInDate` | string | Check-in date |
| `checkOutDate` | string | Check-out date |
| `name` | string | Hotel name |
| `propertyId` | string | Google property ID |
| `placeId` | string | Google Place ID |
| `starRating` | number | Star rating (2-5) |
| `propertyType` | string | e.g. `"3-star hotel"` |
| `latitude` | number | GPS latitude |
| `longitude` | number | GPS longitude |
| `distance` | string | Distance from search center |
| `pricePerNight` | number | Price per night |
| `totalPrice` | number | Total price for stay |
| `currency` | string | Currency code |
| `priceLabel` | string | Price highlight label |
| `reviewScore` | number | Review score (e.g. 4.3) |
| `reviewCount` | number | Total review count |
| `reviewSource` | string | Primary review source |
| `thumbnailUrl` | string | Thumbnail image URL |
| `photos` | array | `{ url, label, categoryIds }` - photo URL with category IDs (1=At a glance, 5=Exterior, 6=Bedroom, 8=Bathroom, etc.) |
| `highlights` | string\[] | Highlight tags (e.g. `"Free parking"`) |
| `hashId` | string | Google hash ID |
| `capacity` | string\[] | Capacity labels (VR only: `"Sleeps 6"`, `"2 bedrooms"`) |
| `sleeps` | number | Max guests (VR only) |
| `bedrooms` | number | Bedroom count (VR only) |
| `bathrooms` | number | Bathroom count (VR only) |
| `featured` | boolean | Featured flag |
| `bookingToken` | string | Token for detail/review lookups |
| `ecoBadge` | boolean | Eco-certified (detected from detail call) |

#### Detail fields (D)

| Field | Type | Description |
|---|---|---|
| `address` | string | Full street address |
| `phone` | string | Phone number |
| `website` | string | Hotel website URL |
| `countryCode` | string | ISO country code (e.g. `"VN"`) |
| `description` | string | Hotel description (paragraphs joined) |
| `checkInTime` | string | Check-in time (e.g. `"2:00 PM"`) |
| `checkOutTime` | string | Check-out time (e.g. `"12:00 PM"`) |
| `amenities` | string\[] | Available amenities with human-readable names |
| `neighborhood` | string | Neighborhood name |
| `neighborhoodDescription` | string | Short neighborhood description |
| `neighborhoodScores` | array | `{ category, rating }` - 5 neighborhood category scores |
| `ratingDistribution` | array | `{ stars, count }` - star breakdown (5★ through 1★) |
| `aspectSentiments` | array | `{ aspect, score, positive, negative, total }` - e.g. Breakfast, Service, Location |
| `externalReviewSources` | array | `{ source, rating, maxRating, count }` - Tripadvisor, Trip.com, etc. |
| `bookingLinks` | array | `{ provider, price, url, logoUrl, isOfficialSite, freeCancellation, freeCancellationDeadline }` |
| `roomTypes` | array | `{ name, price }` - room types with pricing |
| `priceHistory` | object | `{ currentPrice, typicalLow, typicalHigh, percentile }` - price trend. `percentile` (0-1) = position in typical range; derive "X% less" via `(1 - percentile) * 100` |
| `featuredIn` | string\[] | Editorial mentions (e.g. `"Featured in Best Hotels in Tokyo with a View"`) |
| `webResults` | array | `{ title, url, snippet, domain, favicon }` - web results from Booking.com, Tripadvisor, etc. |
| `photoCategories` | array | `{ categoryId, name, count, thumbnailUrl }` - photo gallery category summary |
| `nearbyPlaces` | array | `{ name, photoUrl, rating, reviewCount, description, latitude, longitude, category, travelTimes }` - POIs with travel times |
| `nearbyBusinesses` | array | `{ placeId, name, category, rating, reviewCount, phone, website, reservationUrl, photoUrl, priceRange, hours }` |
| `nearbyHotels` | array | Similar hotels (NearbyHotel type) |
| `sponsoredHotels` | array | Sponsored/popular hotels (NearbyHotel type) |
| `nearbyVacationRentals` | array | Nearby vacation rentals (NearbyHotel type) |

#### Review fields (R)

| Field | Type | Description |
|---|---|---|
| `reviews` | array | Review entries (see below) |

Each review:

| Field | Type | Description |
|---|---|---|
| `source` | string | `"Google"`, `"Tripadvisor"`, `"Trip.com"` |
| `author` | string | Reviewer name |
| `authorUrl` | string | Profile URL |
| `avatarUrl` | string | Profile photo URL |
| `rating` | number | Rating (1-5) |
| `maxRating` | number | Max rating (always 5) |
| `text` | string | Full review text |
| `date` | string | Relative date (`"3 months ago"`) |
| `reviewId` | string | Unique review ID (for deduplication) |
| `reviewUrl` | string | Direct link (Tripadvisor only) |
| `subRatings` | array | `{ category, score, maxScore }` - Rooms, Service, Location (Google only) |
| `photos` | string\[] | Review photo URLs (Google only) |
| `highlights` | string\[] | Hotel tags (`"Luxury"`, `"Romantic"`, `"Great value"`) |
| `replyText` | string | Owner reply text |

# Actor input Schema

## `searches` (type: `array`):

List of hotel searches to perform. Each search needs a location and dates.

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

What type of properties to search for

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

Number of adult guests

## `children` (type: `integer`):

Number of child guests

## `rooms` (type: `integer`):

Number of rooms

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

ISO 4217 currency code for prices (e.g. USD, EUR, GBP, VND)

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

Minimum price per night in local currency

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

Maximum price per night in local currency

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

Star levels to filter by

## `guestRating` (type: `string`):

Minimum guest rating

## `propertyTypes` (type: `array`):

Filter by specific property types

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

Filter by amenities

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

Filter to properties with free cancellation

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

Filter to properties with special offers

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

Filter to eco-certified properties only

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

How to sort search results

## `maxResults` (type: `integer`):

Maximum number of results per search

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

Fetch detailed info per property (booking links, amenities, description). Slower but richer data.

## `includeReviews` (type: `boolean`):

Fetch reviews per property from Google, Trip.com, Booking.com, etc. Slower.

## `maxReviewsPerHotel` (type: `integer`):

Maximum number of reviews to fetch per property (40 per page). 0 = fetch all.

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

Proxy settings for avoiding blocks. Residential proxies recommended.

## Actor input object example

```json
{
  "searches": [
    {
      "location": "New York",
      "checkInDate": "2026-05-01",
      "checkOutDate": "2026-05-03"
    }
  ],
  "type": "both",
  "adults": 2,
  "children": 0,
  "rooms": 1,
  "currency": "USD",
  "freeCancellation": false,
  "specialOffers": false,
  "ecoCertified": false,
  "sortBy": "relevance",
  "maxResults": 50,
  "includeDetails": false,
  "includeReviews": false,
  "maxReviewsPerHotel": 40
}
```

# 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 = {
    "searches": [
        {
            "location": "New York",
            "checkInDate": "2026-05-01",
            "checkOutDate": "2026-05-03"
        }
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("kaix/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 = { "searches": [{
            "location": "New York",
            "checkInDate": "2026-05-01",
            "checkOutDate": "2026-05-03",
        }] }

# Run the Actor and wait for it to finish
run = client.actor("kaix/google-hotels-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "searches": [
    {
      "location": "New York",
      "checkInDate": "2026-05-01",
      "checkOutDate": "2026-05-03"
    }
  ]
}' |
apify call kaix/google-hotels-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=kaix/google-hotels-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Google Hotels & Vacation Scraper  - Most Comprehensive",
        "description": "🔥 ~$0.1/1K hotels 🔥 Scrape Google Hotels and Vacation Rentals with full filter support - price, hotel class, guest rating, amenities, property types, offers, eco-certified. Includes batch searches, booking links, and paginated reviews.",
        "version": "0.1",
        "x-build-id": "8AvuVOgmIT0xH3QJ1"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/kaix~google-hotels-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-kaix-google-hotels-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/kaix~google-hotels-scraper/runs": {
            "post": {
                "operationId": "runs-sync-kaix-google-hotels-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/kaix~google-hotels-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-kaix-google-hotels-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "searches": {
                        "title": "Searches",
                        "type": "array",
                        "description": "List of hotel searches to perform. Each search needs a location and dates."
                    },
                    "type": {
                        "title": "Search Type",
                        "enum": [
                            "hotels",
                            "vacation_rentals",
                            "both"
                        ],
                        "type": "string",
                        "description": "What type of properties to search for",
                        "default": "both"
                    },
                    "adults": {
                        "title": "Adults",
                        "minimum": 1,
                        "maximum": 9,
                        "type": "integer",
                        "description": "Number of adult guests",
                        "default": 2
                    },
                    "children": {
                        "title": "Children",
                        "minimum": 0,
                        "maximum": 9,
                        "type": "integer",
                        "description": "Number of child guests",
                        "default": 0
                    },
                    "rooms": {
                        "title": "Rooms",
                        "minimum": 1,
                        "maximum": 9,
                        "type": "integer",
                        "description": "Number of rooms",
                        "default": 1
                    },
                    "currency": {
                        "title": "Currency",
                        "type": "string",
                        "description": "ISO 4217 currency code for prices (e.g. USD, EUR, GBP, VND)",
                        "default": "USD"
                    },
                    "minPrice": {
                        "title": "Minimum Price",
                        "type": "integer",
                        "description": "Minimum price per night in local currency"
                    },
                    "maxPrice": {
                        "title": "Maximum Price",
                        "type": "integer",
                        "description": "Maximum price per night in local currency"
                    },
                    "hotelClass": {
                        "title": "Hotel Class",
                        "type": "array",
                        "description": "Star levels to filter by",
                        "items": {
                            "type": "string",
                            "enum": [
                                "2",
                                "3",
                                "4",
                                "5"
                            ],
                            "enumTitles": [
                                "2-star",
                                "3-star",
                                "4-star",
                                "5-star"
                            ]
                        }
                    },
                    "guestRating": {
                        "title": "Guest Rating",
                        "enum": [
                            "3.5",
                            "4.0",
                            "4.5"
                        ],
                        "type": "string",
                        "description": "Minimum guest rating"
                    },
                    "propertyTypes": {
                        "title": "Property Types",
                        "type": "array",
                        "description": "Filter by specific property types",
                        "items": {
                            "type": "string",
                            "enum": [
                                "Apartment hotels",
                                "Bed and breakfasts",
                                "Spa hotels",
                                "Resorts",
                                "Motels",
                                "Inns",
                                "Hostels",
                                "Boutique hotels",
                                "Beach hotels",
                                "Other"
                            ]
                        }
                    },
                    "amenities": {
                        "title": "Amenities",
                        "type": "array",
                        "description": "Filter by amenities",
                        "items": {
                            "type": "string",
                            "enum": [
                                "Free Wi-Fi",
                                "Free breakfast",
                                "Restaurant",
                                "Bar",
                                "Kid-friendly",
                                "Pet-friendly",
                                "Free parking",
                                "Parking",
                                "EV charger",
                                "Room service",
                                "Fitness center",
                                "Spa",
                                "Pool",
                                "Indoor pool",
                                "Outdoor pool",
                                "Air-conditioned",
                                "Wheelchair accessible",
                                "Beach access",
                                "All-inclusive available"
                            ]
                        }
                    },
                    "freeCancellation": {
                        "title": "Free Cancellation",
                        "type": "boolean",
                        "description": "Filter to properties with free cancellation",
                        "default": false
                    },
                    "specialOffers": {
                        "title": "Special Offers",
                        "type": "boolean",
                        "description": "Filter to properties with special offers",
                        "default": false
                    },
                    "ecoCertified": {
                        "title": "Eco-certified",
                        "type": "boolean",
                        "description": "Filter to eco-certified properties only",
                        "default": false
                    },
                    "sortBy": {
                        "title": "Sort By",
                        "enum": [
                            "relevance",
                            "price_low",
                            "price_high",
                            "rating",
                            "distance"
                        ],
                        "type": "string",
                        "description": "How to sort search results",
                        "default": "relevance"
                    },
                    "maxResults": {
                        "title": "Max Results",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Maximum number of results per search",
                        "default": 50
                    },
                    "includeDetails": {
                        "title": "Include Details",
                        "type": "boolean",
                        "description": "Fetch detailed info per property (booking links, amenities, description). Slower but richer data.",
                        "default": false
                    },
                    "includeReviews": {
                        "title": "Include Reviews",
                        "type": "boolean",
                        "description": "Fetch reviews per property from Google, Trip.com, Booking.com, etc. Slower.",
                        "default": false
                    },
                    "maxReviewsPerHotel": {
                        "title": "Max Reviews per Hotel",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Maximum number of reviews to fetch per property (40 per page). 0 = fetch all.",
                        "default": 40
                    },
                    "proxyConfiguration": {
                        "title": "Proxy Configuration",
                        "type": "object",
                        "description": "Proxy settings for avoiding blocks. Residential proxies recommended."
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
