{
  "openapi": "3.0.1",
  "info": {
    "title": "Google Hotels Scraper — Prices, Offers, Reviews & Amenities",
    "description": "Google Hotels scraper: every hotel in any city with nightly and total prices for your dates, all booking offers (Booking.com, Expedia, official site…) with links, address, phone, stars, rating, reviews, amenities, photos and deal flags. Big cities split automatically, no login.",
    "version": "1.0",
    "x-build-id": "ZFgVg4RvhkjmdbAVg"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/logiover~google-hotels-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-logiover-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/logiover~google-hotels-scraper/runs": {
      "post": {
        "operationId": "runs-sync-logiover-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/logiover~google-hotels-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-logiover-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": {
          "destinations": {
            "title": "Destinations",
            "type": "array",
            "description": "Where to look for hotels, as you would type it into Google Hotels: a city (\"Paris\"), a district (\"Shibuya, Tokyo\"), a region or island (\"Bali\", \"Tuscany\"), or a free-text search (\"hotels near Times Square\", \"resorts in Cancun\", \"hostels in Berlin\"). A plain place name becomes \"hotels in <place>\". Google Hotels search links work too.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "checkInDate": {
            "title": "Check-in date",
            "type": "string",
            "description": "YYYY-MM-DD, or +N for N days from the day of the run (e.g. +14 — handy for scheduled runs). Empty = the next Friday at least 7 days ahead, so a saved task never goes stale."
          },
          "checkOutDate": {
            "title": "Check-out date",
            "type": "string",
            "description": "YYYY-MM-DD or +N. Empty = check-in + \"Nights\"."
          },
          "nights": {
            "title": "Nights",
            "minimum": 1,
            "maximum": 30,
            "type": "integer",
            "description": "Length of stay when no check-out date is given (1–30). Prices come per night and for the whole stay.",
            "default": 2
          },
          "adults": {
            "title": "Adults",
            "minimum": 1,
            "maximum": 12,
            "type": "integer",
            "description": "Number of adult guests (1–12). Prices and offers are for this party.",
            "default": 2
          },
          "children": {
            "title": "Children",
            "minimum": 0,
            "maximum": 8,
            "type": "integer",
            "description": "Number of children (0–8). Give their ages below; a child without an age counts as 12.",
            "default": 0
          },
          "childrenAges": {
            "title": "Children's ages",
            "type": "array",
            "description": "One age per child, 0–17 (e.g. 4 and 9).",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "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",
              "UAH"
            ],
            "type": "string",
            "description": "Currency for every price and offer.",
            "default": "USD"
          },
          "sortBy": {
            "title": "Order",
            "enum": [
              "relevance",
              "lowest_price",
              "highest_rating",
              "most_reviewed"
            ],
            "type": "string",
            "description": "Which hotels come first (and the \"rank\" column). Google's own order mixes popularity and price; the other three sort the list. When a destination holds more hotels than Google's list shows, the rest is collected area by area after the ranked part.",
            "default": "relevance"
          },
          "maxItems": {
            "title": "Max hotels",
            "minimum": 0,
            "maximum": 1000000,
            "type": "integer",
            "description": "Stop after this many unique hotels across all destinations and links. 0 = no limit (every hotel Google Hotels lists — a big city has 5,000–15,000). Big runs need a big enough \"Maximum cost per run\".",
            "default": 1000
          },
          "maxItemsPerDestination": {
            "title": "Max hotels per destination",
            "minimum": 0,
            "maximum": 1000000,
            "type": "integer",
            "description": "Optional cap per destination, so one big city does not take the whole \"Max hotels\". 0 = no per-destination limit.",
            "default": 0
          },
          "onlyWithPrices": {
            "title": "Only hotels with prices for your dates",
            "type": "boolean",
            "description": "On: only places Google can price for your dates (what rate shopping and price monitoring need). Off: every hotel Google Hotels lists in the area — also the 40–60 % of a big city that shows no price for these dates (sold out, or no booking site has rates) — with name, rating, reviews, address, phone and amenities.",
            "default": true
          },
          "includeDetails": {
            "title": "Open each hotel's page (address, phone, all offers)",
            "type": "boolean",
            "description": "Adds the street address, phone, every booking offer with its price and link (Booking.com, Expedia, Hotels.com, Agoda, Trip.com, the hotel's official site…), room options, full amenity list by category, neighborhood, nearby transit and third-party ratings. One extra request per hotel, included in the price. Turn off for the fastest export of the result list only.",
            "default": true
          },
          "splitArea": {
            "title": "Split large areas (get every hotel)",
            "type": "boolean",
            "description": "Google's result list stops after ~500–1,000 hotels. With this on, a destination with more hotels is split into map boxes until every box's list can be read to the end — so a city returns thousands of hotels. Turn off to read only Google's list.",
            "default": true
          },
          "minPrice": {
            "title": "Minimum price per night",
            "minimum": 0,
            "maximum": 100000000,
            "type": "integer",
            "description": "Only hotels from this nightly price, in the chosen currency. 0 = no minimum. Hotels without a price for your dates are left out when a price filter is set.",
            "default": 0
          },
          "maxPrice": {
            "title": "Maximum price per night",
            "minimum": 0,
            "maximum": 100000000,
            "type": "integer",
            "description": "Only hotels up to this nightly price, in the chosen currency. 0 = no maximum.",
            "default": 0
          },
          "minRating": {
            "title": "Minimum guest rating",
            "enum": [
              "",
              "3.5",
              "4",
              "4.5"
            ],
            "type": "string",
            "description": "Only hotels rated at least this many stars by guests.",
            "default": ""
          },
          "hotelClass": {
            "title": "Hotel class (stars)",
            "type": "array",
            "description": "Only hotels with these official star classes. Empty = any.",
            "items": {
              "type": "string",
              "enum": [
                "2",
                "3",
                "4",
                "5"
              ],
              "enumTitles": [
                "2-star",
                "3-star",
                "4-star",
                "5-star"
              ]
            },
            "default": []
          },
          "amenities": {
            "title": "Amenities",
            "type": "array",
            "description": "Only hotels that have all of these amenities.",
            "items": {
              "type": "string",
              "enum": [
                "free_wifi",
                "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"
              ],
              "enumTitles": [
                "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"
              ]
            },
            "default": []
          },
          "propertyTypes": {
            "title": "Property types",
            "type": "array",
            "description": "Only these kinds of places. Empty = all hotels and similar places.",
            "items": {
              "type": "string",
              "enum": [
                "bed_and_breakfast",
                "hostel",
                "boutique_hotel",
                "spa_hotel",
                "inn",
                "resort",
                "motel",
                "beach_hotel",
                "apartment_hotel",
                "other"
              ],
              "enumTitles": [
                "Bed and breakfasts",
                "Hostels",
                "Boutique hotels",
                "Spa hotels",
                "Inns",
                "Resorts",
                "Motels",
                "Beach hotels",
                "Apartment hotels",
                "Other"
              ]
            },
            "default": []
          },
          "freeCancellation": {
            "title": "Free cancellation only",
            "type": "boolean",
            "description": "Only hotels with at least one free-cancellation rate for your dates.",
            "default": false
          },
          "specialOffers": {
            "title": "Special offers only",
            "type": "boolean",
            "description": "Only hotels Google flags with a special offer.",
            "default": false
          },
          "ecoCertified": {
            "title": "Eco-certified only",
            "type": "boolean",
            "description": "Only hotels with an independent sustainability certification recognised by Google.",
            "default": false
          },
          "includeVacationRentals": {
            "title": "Include vacation rentals",
            "type": "boolean",
            "description": "Google mixes a few vacation rentals (apartments, houses) into its default order. Off = hotels and similar places only.",
            "default": false
          },
          "hotelUrls": {
            "title": "Hotel links or IDs",
            "type": "array",
            "description": "Optional: specific hotels to price — Google Hotels hotel links (https://www.google.com/travel/hotels/entity/…) or hotel IDs (the \"hotelId\" column of an earlier run). Each comes back with all its offers for your dates; ideal for rate-parity checks and daily price tracking.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "language": {
            "title": "Language",
            "enum": [
              "en",
              "de",
              "fr",
              "es",
              "it",
              "pt",
              "pt-BR",
              "nl",
              "pl",
              "tr",
              "sv",
              "da",
              "no",
              "fi",
              "cs",
              "ro",
              "hu",
              "el",
              "ru",
              "uk",
              "ar",
              "he",
              "hi",
              "id",
              "ms",
              "th",
              "vi",
              "ja",
              "ko",
              "zh-CN",
              "zh-TW"
            ],
            "type": "string",
            "description": "Language of descriptions, amenities and labels (hotel names stay as they are).",
            "default": "en"
          },
          "countryCode": {
            "title": "Google country",
            "type": "string",
            "description": "Two-letter country Google uses for the search (gl), e.g. \"us\", \"gb\", \"de\". It decides which booking sites appear. Default \"us\".",
            "default": "us"
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Used only as a fallback. The scraper talks to Google over a direct connection first (no proxy cost); if Google slows it down or shows a captcha, it switches to Apify datacenter proxies (a new IP per request) and then to the proxy chosen here.",
            "default": {
              "useApifyProxy": true
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}