{
  "openapi": "3.0.1",
  "info": {
    "title": "Google Hotels Scraper - Prices & Booking Sites",
    "description": "Scrape Google Hotels by destination or hotel: price per night and total for your dates and guests, deals, stars, rating, reviews, amenities and location. Add-on: every booking site's price and link (Booking.com, Expedia, the hotel's own site). Price calendars, vacation rentals. No login.",
    "version": "0.1",
    "x-build-id": "yqoWbLc0z9LuEBToU"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/eiv~google-hotels-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-eiv-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/eiv~google-hotels-scraper/runs": {
      "post": {
        "operationId": "runs-sync-eiv-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/eiv~google-hotels-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-eiv-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": {
          "searchQueries": {
            "title": "🔍 Searches",
            "type": "array",
            "description": "One search per line, as you would type it into Google Hotels: \"hotels in Paris\", \"resorts in Bali\", \"hotels near Times Square\", \"hostels in Amsterdam\". Google Hotels links work too. Each search returns up to \"Hotels per search\" rows, in Google's order.",
            "items": {
              "type": "string"
            }
          },
          "hotels": {
            "title": "🏨 Specific hotels",
            "type": "array",
            "description": "One hotel per line: a Google Hotels link (google.com/travel/hotels/entity/…), its id (\"ChoI…\"), or the hotel's name with its city (\"Hotel Artemide Rome\"). Each hotel returns one row per stay, always with every booking site's price (charged as the booking-prices add-on). Ideal for rate tracking on a schedule.",
            "items": {
              "type": "string"
            }
          },
          "checkInDate": {
            "title": "📅 Check-in",
            "type": "string",
            "description": "A date (YYYY-MM-DD) or a time from today, such as \"7 days\" or \"2 weeks\". Relative dates keep scheduled runs pointing at the future. Prices are for this check-in.",
            "default": "7 days"
          },
          "checkOutDate": {
            "title": "Check-out",
            "type": "string",
            "description": "Optional: a date (YYYY-MM-DD) or a time from today. Leave empty to use \"Nights\". Must be 1-30 nights after check-in."
          },
          "nights": {
            "title": "Nights",
            "minimum": 1,
            "maximum": 30,
            "type": "integer",
            "description": "Length of the stay when no check-out date is set.",
            "default": 1
          },
          "dateRangeDays": {
            "title": "Price several check-in dates",
            "minimum": 1,
            "maximum": 60,
            "type": "integer",
            "description": "Price the same stay for this many consecutive check-in dates, starting at the check-in date: 1 = only that date, 30 = a month of daily prices. Every search and hotel is repeated for each date, so rows and cost multiply by this number.",
            "default": 1
          },
          "adults": {
            "title": "Adults",
            "minimum": 1,
            "maximum": 12,
            "type": "integer",
            "description": "Adult guests. Prices change with the number of guests. Google prices stays with children only in its live web page, so this Actor prices adults.",
            "default": 2
          },
          "currency": {
            "title": "💱 Currency",
            "enum": [
              "USD",
              "EUR",
              "GBP",
              "CAD",
              "AUD",
              "NZD",
              "CHF",
              "JPY",
              "CNY",
              "HKD",
              "SGD",
              "INR",
              "KRW",
              "THB",
              "IDR",
              "MYR",
              "PHP",
              "VND",
              "TWD",
              "AED",
              "SAR",
              "QAR",
              "ILS",
              "TRY",
              "ZAR",
              "EGP",
              "MAD",
              "BRL",
              "MXN",
              "ARS",
              "CLP",
              "COP",
              "PEN",
              "SEK",
              "NOK",
              "DKK",
              "PLN",
              "CZK",
              "HUF",
              "RON",
              "BGN",
              "ISK",
              "UAH"
            ],
            "type": "string",
            "description": "Currency for every price.",
            "default": "USD"
          },
          "country": {
            "title": "Country (point of sale)",
            "enum": [
              "us",
              "gb",
              "ca",
              "au",
              "nz",
              "ie",
              "de",
              "fr",
              "es",
              "it",
              "nl",
              "be",
              "at",
              "ch",
              "pt",
              "se",
              "no",
              "dk",
              "fi",
              "pl",
              "cz",
              "hu",
              "ro",
              "gr",
              "tr",
              "il",
              "ae",
              "sa",
              "qa",
              "eg",
              "ma",
              "za",
              "in",
              "sg",
              "my",
              "th",
              "id",
              "ph",
              "vn",
              "jp",
              "kr",
              "cn",
              "hk",
              "tw",
              "br",
              "mx",
              "ar",
              "cl",
              "co",
              "pe"
            ],
            "type": "string",
            "description": "The market Google prices for: which booking sites appear and whether taxes are included can differ by country.",
            "default": "us"
          },
          "language": {
            "title": "Language",
            "enum": [
              "en",
              "en-GB",
              "de",
              "fr",
              "es",
              "it",
              "pt",
              "pt-BR",
              "nl",
              "sv",
              "no",
              "da",
              "fi",
              "pl",
              "cs",
              "hu",
              "ro",
              "el",
              "tr",
              "he",
              "ar",
              "ru",
              "uk",
              "ja",
              "ko",
              "zh-CN",
              "zh-TW",
              "th",
              "id",
              "ms",
              "vi",
              "hi"
            ],
            "type": "string",
            "description": "Language for descriptions, price labels and deal texts. Amenity names are always in English.",
            "default": "en"
          },
          "includeBookingPrices": {
            "title": "🧾 Booking-site prices for search results ($)",
            "type": "boolean",
            "description": "Opens each hotel a search returns for the price on every booking site (Booking.com, Expedia, Agoda, Hotels.com, the hotel's own site…) with direct links, plus address, phone, typical price range and Place ID. One extra request per hotel, charged as the booking-prices add-on only where prices came back. Hotels under \"Specific hotels\" always get this.",
            "default": false
          },
          "sortBy": {
            "title": "Sort by",
            "enum": [
              "relevance",
              "lowestPrice",
              "highestRating",
              "mostReviewed"
            ],
            "type": "string",
            "description": "Google's order for search results.",
            "default": "relevance"
          },
          "minPrice": {
            "title": "Min price per night",
            "minimum": 0,
            "type": "integer",
            "description": "Optional, in the currency above."
          },
          "maxPrice": {
            "title": "Max price per night",
            "minimum": 1,
            "type": "integer",
            "description": "Optional, in the currency above."
          },
          "hotelClass": {
            "title": "Hotel class",
            "type": "array",
            "description": "Only these star classes. Leave empty for all.",
            "items": {
              "type": "string",
              "enum": [
                "2",
                "3",
                "4",
                "5"
              ],
              "enumTitles": [
                "2-star",
                "3-star",
                "4-star",
                "5-star"
              ]
            }
          },
          "minRating": {
            "title": "Guest rating",
            "enum": [
              "any",
              "3.5",
              "4.0",
              "4.5"
            ],
            "type": "string",
            "description": "Only hotels rated at least this.",
            "default": "any"
          },
          "amenities": {
            "title": "Amenities",
            "type": "array",
            "description": "Only hotels with all of these.",
            "items": {
              "type": "string",
              "enum": [
                "freeWifi",
                "freeBreakfast",
                "freeParking",
                "parking",
                "pool",
                "indoorPool",
                "outdoorPool",
                "fitnessCenter",
                "spa",
                "restaurant",
                "bar",
                "roomService",
                "beachAccess",
                "kidFriendly",
                "petFriendly",
                "airConditioned",
                "allInclusive",
                "wheelchairAccessible",
                "evCharger"
              ],
              "enumTitles": [
                "Free Wi-Fi",
                "Free breakfast",
                "Free parking",
                "Parking",
                "Pool",
                "Indoor pool",
                "Outdoor pool",
                "Fitness center",
                "Spa",
                "Restaurant",
                "Bar",
                "Room service",
                "Beach access",
                "Kid-friendly",
                "Pet-friendly",
                "Air-conditioned",
                "All-inclusive available",
                "Wheelchair accessible",
                "EV charger"
              ]
            }
          },
          "freeCancellation": {
            "title": "Free cancellation",
            "type": "boolean",
            "description": "Only offers that can be cancelled for free.",
            "default": false
          },
          "specialOffers": {
            "title": "Special offers",
            "type": "boolean",
            "description": "Only hotels with a special offer or deal.",
            "default": false
          },
          "ecoCertified": {
            "title": "Eco-certified",
            "type": "boolean",
            "description": "Only hotels with an eco certification.",
            "default": false
          },
          "vacationRentals": {
            "title": "Vacation rentals instead of hotels",
            "type": "boolean",
            "description": "Search Google's vacation rentals (apartments, houses) instead of hotels. Rows then include guests, bedrooms and bathrooms.",
            "default": false
          },
          "skipVacationRentals": {
            "title": "Skip vacation rentals in hotel searches",
            "type": "boolean",
            "description": "Google mixes some apartments and rooms-for-rent into hotel lists. Turn on to keep hotels, hostels, B&Bs and the like only; skipped rentals are not charged.",
            "default": false
          },
          "minBedrooms": {
            "title": "Min bedrooms (vacation rentals)",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "Vacation rentals only."
          },
          "minBathrooms": {
            "title": "Min bathrooms (vacation rentals)",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "Vacation rentals only."
          },
          "maxResultsPerSearch": {
            "title": "Hotels per search",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "Stop each search (per check-in date) after this many hotels. Google shows about 20 per page; one page is one request. You pay per hotel, so this is your main cost lever.",
            "default": 20
          },
          "maxItems": {
            "title": "Max rows in total",
            "minimum": 1,
            "maximum": 1000000,
            "type": "integer",
            "description": "Optional cap for the whole run, across all searches, hotels and dates. Empty = no cap beyond \"Hotels per search\" and your maximum charge per run."
          },
          "proxyConfiguration": {
            "title": "Proxy",
            "type": "object",
            "description": "Leave empty: the Actor uses the run's own address (free) and moves to Apify datacenter, then residential proxy, only if Google refuses it. Set a proxy here only to force your own."
          },
          "maxConcurrency": {
            "title": "Concurrency",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "How many searches or hotels are processed at the same time.",
            "default": 5
          },
          "requestTimeoutSecs": {
            "title": "Request timeout",
            "minimum": 5,
            "maximum": 120,
            "type": "integer",
            "description": "How long to wait for one response before giving up on it.",
            "default": 30
          },
          "maxRetries": {
            "title": "Retries per request",
            "minimum": 0,
            "maximum": 5,
            "type": "integer",
            "description": "Retries for blocked or failed requests, each from another address.",
            "default": 2
          }
        }
      },
      "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
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "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
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}