{
  "openapi": "3.0.1",
  "info": {
    "title": "Google Hotels Scraper · Prices, Reviews & Booking-Site Rates",
    "description": "Scrape Google Hotels for any city and dates: nightly and total price, deals, rating, stars and amenities, plus the price at every booking site. Track the price of specific hotels across up to 330 check-in dates, and get guest reviews from Google, Tripadvisor and more. Any currency.",
    "version": "0.0",
    "x-build-id": "ERQYSXh5GYVmQJPQ3"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/memo23~google-hotels-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-memo23-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/memo23~google-hotels-scraper/runs": {
      "post": {
        "operationId": "runs-sync-memo23-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/memo23~google-hotels-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-memo23-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": {
          "locations": {
            "title": "Locations",
            "type": "array",
            "description": "Cities, neighbourhoods or landmarks, for example \"Paris\", \"Shibuya, Tokyo\" or \"near Times Square\". Each is searched as \"hotels in <location>\"; write \"hostels in Lisbon\" or \"resorts in Cancun\" to search for another type of stay. Leave empty when you only want price tracking or reviews for the hotel links below.",
            "items": {
              "type": "string"
            }
          },
          "checkInDate": {
            "title": "Check-in date",
            "type": "string",
            "description": "YYYY-MM-DD. Leave empty for two weeks from today."
          },
          "checkOutDate": {
            "title": "Check-out date",
            "type": "string",
            "description": "YYYY-MM-DD, after check-in, at most 30 nights later. Leave empty for a 2-night stay."
          },
          "adults": {
            "title": "Adults",
            "minimum": 1,
            "maximum": 12,
            "type": "integer",
            "description": "Guests per room.",
            "default": 2
          },
          "currency": {
            "title": "Currency",
            "enum": [
              "USD",
              "EUR",
              "GBP",
              "CAD",
              "AUD",
              "CHF",
              "JPY",
              "CNY",
              "INR",
              "SGD",
              "HKD",
              "AED",
              "SAR",
              "TRY",
              "BRL",
              "MXN",
              "ZAR",
              "SEK",
              "NOK",
              "DKK",
              "PLN",
              "CZK",
              "HUF",
              "THB",
              "IDR",
              "MYR",
              "PHP",
              "VND",
              "KRW",
              "NZD",
              "ILS"
            ],
            "type": "string",
            "description": "Prices are returned in this currency.",
            "default": "USD"
          },
          "maxResults": {
            "title": "Max hotels per location",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "Google lists 20 hotels per page; the actor keeps paging until it has this many. Up to 1,000.",
            "default": 20
          },
          "includeDetails": {
            "title": "Hotel details and prices at every booking site",
            "type": "boolean",
            "description": "Opens each hotel's page for address, coordinates, phone, website, neighbourhood, check-in and check-out times, Google Place ID, review topics, and the nightly and total price at every booking site that lists it (Booking.com, Expedia, the hotel's own site and more). Billed as an extra event per hotel.",
            "default": false
          },
          "minRating": {
            "title": "Minimum guest rating",
            "minimum": 1,
            "maximum": 5,
            "type": "number",
            "description": "Keep only hotels rated at least this (1 to 5). Hotels without a rating are dropped when this is set."
          },
          "minHotelClass": {
            "title": "Minimum star class",
            "minimum": 1,
            "maximum": 5,
            "type": "integer",
            "description": "Keep only hotels of at least this many stars (2 to 5)."
          },
          "maxPricePerNight": {
            "title": "Maximum price per night",
            "minimum": 0,
            "type": "number",
            "description": "In the chosen currency. Hotels above it, or without a price for your dates, are dropped."
          },
          "priceHotelUrls": {
            "title": "Hotels to track",
            "type": "array",
            "description": "Google Hotels links of the hotels whose prices you want across dates, or their entity IDs. Open the hotel on google.com/travel and copy the address; it contains /entity/ followed by the ID. Each hotel returns one row per check-in date with the nightly and total price at every booking site. Adults and Currency above apply; the search dates above do not.",
            "items": {
              "type": "string"
            }
          },
          "priceStartDate": {
            "title": "First check-in date",
            "type": "string",
            "description": "YYYY-MM-DD. Leave empty for tomorrow. Google Hotels prices check-ins up to 330 days ahead."
          },
          "priceDays": {
            "title": "Number of check-in dates",
            "minimum": 1,
            "maximum": 331,
            "type": "integer",
            "description": "How many consecutive check-in dates to price, starting at the first check-in date. 30 covers a month. Billed per hotel per date that has a price.",
            "default": 30
          },
          "priceNights": {
            "title": "Nights per stay",
            "minimum": 1,
            "maximum": 30,
            "type": "integer",
            "description": "Length of the stay priced for each check-in date.",
            "default": 1
          },
          "priceRows": {
            "title": "Price rows",
            "enum": [
              "per_date",
              "per_site"
            ],
            "type": "string",
            "description": "How tracked prices are written. Per date: one row per hotel per check-in date, with the lowest price, the hotel's own price and the list of booking sites inside the row. Per booking site: one flat row per booking site per date, which is easier in CSV, Excel and BI tools. Billing is the same either way: per hotel per priced date.",
            "default": "per_date"
          },
          "includeReviews": {
            "title": "Guest reviews for every hotel found",
            "type": "boolean",
            "description": "Adds one row per guest review for each hotel in the results: text, score, date, reviewer, where the review was posted (Google, Tripadvisor, Trip.com, the hotel chain's own site and others), trip type, room, service and location scores, the owner's reply and photos. Billed per review.",
            "default": false
          },
          "hotelUrls": {
            "title": "Reviews for specific hotels",
            "type": "array",
            "description": "Google Hotels links of the hotels whose reviews you want, or their entity IDs. Open the hotel on google.com/travel and copy the address; it contains /entity/ followed by the ID. These hotels are read directly, with no city search, and return review rows only.",
            "items": {
              "type": "string"
            }
          },
          "maxReviewsPerHotel": {
            "title": "Max reviews per hotel",
            "minimum": 1,
            "maximum": 100000,
            "type": "integer",
            "description": "Reviews to collect for each hotel, in the order chosen below. A hotel with fewer returns all it has.",
            "default": 50
          },
          "reviewsSort": {
            "title": "Sort reviews by",
            "enum": [
              "most_recent",
              "most_helpful",
              "highest_score",
              "lowest_score"
            ],
            "type": "string",
            "description": "The same orders as the reviews tab on Google Hotels.",
            "default": "most_recent"
          },
          "reviewsSource": {
            "title": "Review source",
            "type": "string",
            "description": "Leave empty for every source. Write \"Google\", or a partner site as the hotel's page names it, for example \"Tripadvisor\", \"Trip.com\" or \"Priceline\". A hotel that has no reviews from that source returns none."
          },
          "reviewsTopic": {
            "title": "Review topic",
            "type": "string",
            "description": "Only reviews about one of the topics Google lists for the hotel, for example \"Breakfast\", \"Service\", \"Location\" or \"Cleanliness\". Leave empty for all reviews."
          },
          "reviewsSearch": {
            "title": "Search in reviews",
            "type": "string",
            "description": "Only reviews that contain this text, for example \"parking\" or \"airport shuttle\"."
          },
          "maxConcurrency": {
            "title": "Locations in parallel",
            "minimum": 1,
            "maximum": 6,
            "type": "integer",
            "description": "How many locations to search at once.",
            "default": 3
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Google Hotels answers reliably through residential proxies.",
            "default": {
              "useApifyProxy": true,
              "apifyProxyGroups": [
                "RESIDENTIAL"
              ],
              "apifyProxyCountry": "US"
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}