{
  "openapi": "3.0.1",
  "info": {
    "title": "Google Hotels Scraper - Prices, Booking Sites & Hotel Data",
    "description": "Scrape Google Hotels for any destination and dates: hotels with price per night, deals, rating, class and GPS. Optionally every booking site's price (Booking.com, Expedia, Agoda, official site) on one fixed tax basis, with rooms, address, phone and amenities. 84 currencies. No API keys.",
    "version": "0.0",
    "x-build-id": "QiX1WnfSktFcy150n"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/santhej~google-hotels-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-santhej-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/santhej~google-hotels-scraper/runs": {
      "post": {
        "operationId": "runs-sync-santhej-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/santhej~google-hotels-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-santhej-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",
        "required": [
          "searches"
        ],
        "properties": {
          "searches": {
            "title": "Searches",
            "minItems": 1,
            "maxItems": 100,
            "type": "array",
            "description": "What to search on Google Hotels, exactly as you would type it there: 'hotels in Paris', 'Tokyo', '5 star hotels in Bangkok', 'hotels near Times Square' or a hotel's name. One search per line, up to 100 per run. The destination is read from the text - add the country when a place name is shared by several cities ('Valencia, Venezuela').",
            "items": {
              "type": "string"
            }
          },
          "maxHotelsPerSearch": {
            "title": "Hotels per search",
            "minimum": 10,
            "maximum": 140,
            "type": "integer",
            "description": "How many hotels to return for each search (10-140). You are charged per hotel actually returned. Google lists fewer for small places and for very narrow filters.",
            "default": 20
          },
          "checkIn": {
            "title": "Check-in",
            "type": "string",
            "description": "Check-in date as YYYY-MM-DD, or relative to the day the run starts: '30 days', '6 weeks', 'tomorrow'. Leave both dates empty to price a 2-night stay starting 30 days from the run date - a schedule set up this way never goes stale."
          },
          "checkOut": {
            "title": "Check-out",
            "type": "string",
            "description": "Check-out date as YYYY-MM-DD, or relative: '32 days'. Must be after check-in; a stay can be 1 to 30 nights. Empty = 2 nights after check-in."
          },
          "adults": {
            "title": "Adults",
            "minimum": 1,
            "maximum": 6,
            "type": "integer",
            "description": "Adults in the room. Google prices one room for the whole party: adults plus children can be at most 6.",
            "default": 2
          },
          "childrenAges": {
            "title": "Children's ages",
            "type": "string",
            "description": "Age of each child in the room, separated by commas - for example '5, 9' for two children. Ages 0 to 17. Leave empty for no children. Prices change with the ages, as on Google."
          },
          "currency": {
            "title": "Currency",
            "enum": [
              "USD",
              "EUR",
              "GBP",
              "JPY",
              "CAD",
              "AUD",
              "CHF",
              "CNY",
              "INR",
              "AED",
              "SGD",
              "HKD",
              "NZD",
              "SEK",
              "NOK",
              "DKK",
              "PLN",
              "CZK",
              "HUF",
              "RON",
              "BGN",
              "HRK",
              "ISK",
              "TRY",
              "RUB",
              "UAH",
              "ILS",
              "SAR",
              "QAR",
              "KWD",
              "BHD",
              "OMR",
              "JOD",
              "LBP",
              "EGP",
              "MAD",
              "TND",
              "DZD",
              "ZAR",
              "KES",
              "NGN",
              "GHS",
              "UGX",
              "TZS",
              "MUR",
              "XOF",
              "XAF",
              "MXN",
              "BRL",
              "ARS",
              "CLP",
              "COP",
              "PEN",
              "UYU",
              "DOP",
              "CRC",
              "GTQ",
              "JMD",
              "TTD",
              "KRW",
              "TWD",
              "THB",
              "IDR",
              "MYR",
              "PHP",
              "VND",
              "PKR",
              "BDT",
              "LKR",
              "NPR",
              "MMK",
              "KHR",
              "KZT",
              "UZS",
              "GEL",
              "AZN",
              "RSD",
              "BAM",
              "MKD",
              "ALL",
              "MDL",
              "BYN",
              "IQD",
              "IRR"
            ],
            "type": "string",
            "description": "Currency for every price in the run.",
            "default": "USD"
          },
          "countryCode": {
            "title": "Searching from (country)",
            "type": "string",
            "description": "Two-letter code of the country the search is made FROM (Google's market) - not the destination. 'hotels in Paris' finds Paris, France from any country. The market decides which booking sites are listed and, with booking options on, whether prices include taxes: 'us' and 'ca' quote before taxes and fees, other countries ('gb', 'de', 'fr', 'jp', 'au' ...) with them included.",
            "default": "us"
          },
          "languageCode": {
            "title": "Language",
            "type": "string",
            "description": "Language of hotel names, deal notes, room names and amenities: 'en', 'fr', 'de', 'es', 'ja', 'pt-BR', 'zh-CN' ...",
            "default": "en"
          },
          "sortBy": {
            "title": "Sort by",
            "enum": [
              "relevance",
              "lowest_price",
              "highest_rating",
              "most_reviewed"
            ],
            "type": "string",
            "description": "Google Hotels' own order. With 'Hotels per search' it gives you, for example, the 30 cheapest or the 50 most reviewed hotels of a city.",
            "default": "relevance"
          },
          "hotelClass": {
            "title": "Hotel class",
            "uniqueItems": true,
            "type": "array",
            "description": "Only hotels of these star classes. Empty = any class.",
            "items": {
              "type": "string",
              "enum": [
                "2",
                "3",
                "4",
                "5"
              ],
              "enumTitles": [
                "2-star",
                "3-star",
                "4-star",
                "5-star"
              ]
            }
          },
          "minRating": {
            "title": "Minimum guest rating",
            "enum": [
              "any",
              "3.5",
              "4.0",
              "4.5"
            ],
            "type": "string",
            "description": "Only hotels with at least this Google guest rating (out of 5).",
            "default": "any"
          },
          "minPrice": {
            "title": "Minimum price per night",
            "minimum": 0,
            "type": "integer",
            "description": "Lowest nightly price, in the selected currency. Empty or 0 = no minimum."
          },
          "maxPrice": {
            "title": "Maximum price per night",
            "minimum": 0,
            "type": "integer",
            "description": "Highest nightly price, in the selected currency. Empty or 0 = no maximum."
          },
          "freeCancellation": {
            "title": "Free cancellation only",
            "type": "boolean",
            "description": "Only hotels with a free-cancellation rate for the dates. Google then quotes that refundable rate as the price.",
            "default": false
          },
          "amenities": {
            "title": "Amenities",
            "uniqueItems": true,
            "type": "array",
            "description": "Only hotels that have all of the selected amenities.",
            "items": {
              "type": "string",
              "enum": [
                "free_wifi",
                "free_breakfast",
                "pool",
                "indoor_pool",
                "outdoor_pool",
                "spa",
                "fitness_center",
                "restaurant",
                "bar",
                "room_service",
                "free_parking",
                "parking",
                "air_conditioning",
                "kid_friendly",
                "pets_allowed",
                "wheelchair_accessible",
                "beach_access",
                "all_inclusive_available"
              ],
              "enumTitles": [
                "Free Wi-Fi",
                "Free breakfast",
                "Pool",
                "Indoor pool",
                "Outdoor pool",
                "Spa",
                "Fitness centre",
                "Restaurant",
                "Bar",
                "Room service",
                "Free parking",
                "Parking",
                "Air conditioning",
                "Kid-friendly",
                "Pets allowed",
                "Wheelchair accessible",
                "Beach access",
                "All-inclusive available"
              ]
            }
          },
          "onlyWithPrice": {
            "title": "Leave out hotels without a price",
            "type": "boolean",
            "description": "A few hotels have no rate on Google for the dates (sold out, or not bookable online). Turn this on to leave them out, so every row you pay for has a price.",
            "default": false
          },
          "includeBookingOptions": {
            "title": "Include booking options and hotel details",
            "type": "boolean",
            "description": "Reads each hotel's own Google Hotels page. Adds the price on every booking site Google lists (Booking.com, Expedia, Agoda, the hotel's own site ...) with free-cancellation dates and links, plus address, phone, website, amenities, check-in and check-out times and the rating breakdown. Prices are then on one fixed basis - before taxes and fees when searching from the US or Canada, taxes and fees included from other countries - which is what you need to track prices over time. Charged per hotel as a separate event - see the pricing section.",
            "default": false
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}