{
  "openapi": "3.0.1",
  "info": {
    "title": "Google Hotels Scraper - Hotel Price Tracker & Comparison",
    "description": "Hotel and vacation-rental prices from Google Hotels for any place, dates and guests: nightly prices before and after taxes, deals, ratings, amenities and location, with Google's own filters. Compare every booking site's price and room rates, price specific hotels, and track price drops between runs.",
    "version": "0.1",
    "x-build-id": "xLwhValOuqwhoS8MX"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/akhil_rajesh~google-hotels-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-akhil_rajesh-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/akhil_rajesh~google-hotels-scraper/runs": {
      "post": {
        "operationId": "runs-sync-akhil_rajesh-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/akhil_rajesh~google-hotels-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-akhil_rajesh-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",
            "maxItems": 100,
            "type": "array",
            "description": "Places to search, one per line: a city, a neighbourhood or any Google Hotels search such as \"hotels near Times Square, New York\" or \"vacation rentals in Banff\". Name the city with a landmark. A bare place like Toronto is searched as \"hotels in Toronto\". Ignored when Specific hotels is filled.",
            "default": [
              "Toronto"
            ],
            "items": {
              "type": "string"
            }
          },
          "hotels": {
            "title": "Specific hotels",
            "maxItems": 100,
            "type": "array",
            "description": "Instead of searching places, price these hotels, one per line: a Google Hotels link (google.com/travel/hotels/entity/...), its id, or the hotel's name with its city, such as \"Fairmont Royal York Toronto\". A name Google doesn't recognise is reported as not found rather than swapped for another hotel. Each hotel comes with everything Booking-site prices adds and is charged the same way.",
            "items": {
              "type": "string"
            }
          },
          "checkIn": {
            "title": "Check-in date",
            "pattern": "^(\\d{4})-(0[1-9]|1[0-2])-(0[1-9]|[12]\\d|3[01])$|^(\\d+)\\s*(day|week|month)s?$|^(today|tomorrow)$",
            "type": "string",
            "description": "A date (YYYY-MM-DD) or a time from today (UTC), such as \"2 weeks\". Empty means 14 days from today. Google Hotels prices stays up to about 11 months ahead."
          },
          "nights": {
            "title": "Nights",
            "minimum": 1,
            "maximum": 30,
            "type": "integer",
            "description": "Length of the stay. Prices are per night; each booking site's total for the whole stay comes with Booking-site prices.",
            "default": 1
          },
          "adults": {
            "title": "Adults",
            "minimum": 1,
            "maximum": 12,
            "type": "integer",
            "description": "Guests aged 18 or over.",
            "default": 2
          },
          "childrenAges": {
            "title": "Children's ages",
            "type": "array",
            "description": "One age (0 to 17) per child, such as 8 and 12. Leave empty for no children.",
            "items": {
              "type": "string"
            }
          },
          "currency": {
            "title": "Currency",
            "enum": [
              "USD",
              "EUR",
              "GBP",
              "CAD",
              "AUD",
              "NZD",
              "JPY",
              "CNY",
              "INR",
              "SGD",
              "HKD",
              "CHF",
              "SEK",
              "NOK",
              "DKK",
              "PLN",
              "CZK",
              "HUF",
              "TRY",
              "ILS",
              "AED",
              "SAR",
              "ZAR",
              "MXN",
              "BRL",
              "ARS",
              "CLP",
              "COP",
              "KRW",
              "TWD",
              "THB",
              "MYR",
              "IDR",
              "PHP",
              "VND"
            ],
            "type": "string",
            "description": "Prices come in this currency, whatever the place.",
            "default": "USD"
          },
          "maxResultsPerSearch": {
            "title": "Max results per search",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "Most properties to return for each place and check-in date. Google lists 18 a page, in its own order unless you pick a sort below. This is also your cost ceiling: places x check-in dates x this number. With Only price changes, it is how many of Google's properties are watched; only the changed ones are returned.",
            "default": 20
          },
          "sortBy": {
            "title": "Sort by",
            "enum": [
              "relevance",
              "lowestPrice",
              "highestRating",
              "mostReviewed"
            ],
            "type": "string",
            "description": "Google's own orders. Relevance is the default list.",
            "default": "relevance"
          },
          "minPrice": {
            "title": "Min price per night",
            "minimum": 0,
            "maximum": 1000000000,
            "type": "integer",
            "description": "In the currency above. Leave empty or 0 for no minimum."
          },
          "maxPrice": {
            "title": "Max price per night",
            "minimum": 0,
            "maximum": 1000000000,
            "type": "integer",
            "description": "In the currency above. Leave empty or 0 for no maximum."
          },
          "hotelClass": {
            "title": "Hotel class",
            "type": "array",
            "description": "Star classes to keep. Leave empty for all. Vacation rentals and hostels have no class and drop out when you pick one.",
            "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": "Minimum Google guest rating.",
            "default": "any"
          },
          "amenities": {
            "title": "Amenities",
            "type": "array",
            "description": "Keep only properties with all of these.",
            "items": {
              "type": "string",
              "enum": [
                "freeWifi",
                "freeBreakfast",
                "freeParking",
                "parking",
                "pool",
                "indoorPool",
                "outdoorPool",
                "hotTub",
                "fitnessCenter",
                "spa",
                "restaurant",
                "bar",
                "roomService",
                "airConditioned",
                "kidFriendly",
                "petFriendly",
                "wheelchairAccessible",
                "evCharger",
                "beachAccess",
                "allInclusive"
              ],
              "enumTitles": [
                "Free Wi-Fi",
                "Free breakfast",
                "Free parking",
                "Parking",
                "Pool",
                "Indoor pool",
                "Outdoor pool",
                "Hot tub",
                "Fitness center",
                "Spa",
                "Restaurant",
                "Bar",
                "Room service",
                "Air-conditioned",
                "Kid-friendly",
                "Pet-friendly",
                "Wheelchair accessible",
                "EV charger",
                "Beach access",
                "All-inclusive available"
              ]
            }
          },
          "propertyTypes": {
            "title": "Property types",
            "type": "array",
            "description": "Keep only these kinds of property. Leave empty for all.",
            "items": {
              "type": "string",
              "enum": [
                "bedAndBreakfasts",
                "spaHotels",
                "resorts",
                "motels",
                "inns",
                "hostels",
                "boutiqueHotels",
                "beachHotels",
                "other"
              ],
              "enumTitles": [
                "Bed and breakfasts",
                "Spa hotels",
                "Resorts",
                "Motels",
                "Inns",
                "Hostels",
                "Boutique hotels",
                "Beach hotels",
                "Other"
              ]
            }
          },
          "freeCancellation": {
            "title": "Free cancellation only",
            "type": "boolean",
            "description": "Keep only properties with a free-cancellation rate.",
            "default": false
          },
          "specialOffers": {
            "title": "Special offers only",
            "type": "boolean",
            "description": "Keep only properties with a special offer.",
            "default": false
          },
          "ecoCertified": {
            "title": "Eco-certified only",
            "type": "boolean",
            "description": "Keep only properties with an eco certification.",
            "default": false
          },
          "includeNearMatches": {
            "title": "Include near matches",
            "type": "boolean",
            "description": "Also return the properties Google adds when too few match your filters. They come with matchesFilters false.",
            "default": false
          },
          "includeOffers": {
            "title": "Booking-site prices",
            "type": "boolean",
            "description": "For each property, also read its own Google Hotels page: every booking site's price (Booking.com, Expedia, Hotels.com, Agoda, the hotel's own site and more) per night and in total, before and after taxes, with free cancellation; every room rate the sites list; review quotes; the full amenity list by category and languages spoken; and the address and phone. One more page per property, charged separately.",
            "default": false
          },
          "days": {
            "title": "Number of check-in dates",
            "minimum": 1,
            "maximum": 60,
            "type": "integer",
            "description": "Search this many check-in dates in a row, starting at the check-in date, to see how prices move (for example 30 for a month). Each date is a separate search with its own Max results.",
            "default": 1
          },
          "onlyChanges": {
            "title": "Only price changes",
            "type": "boolean",
            "description": "For scheduled runs: return only what changed since the last run of the same watch list (the same places or hotels, guests, currency, stay length and filters): price drops and rises (with the previous price and the change), and stays that became priced again or stopped being priced. Unchanged properties aren't returned or charged. The first run of each search returns everything, marked new. Use a fixed check-in date (or several check-in dates) so that runs price the same stays.",
            "default": false
          },
          "minPriceChangePercent": {
            "title": "Minimum price change",
            "minimum": 0,
            "maximum": 100,
            "type": "integer",
            "description": "With Only price changes: ignore price moves smaller than this percentage. 1 by default, since prices can move by cents between checks with nothing really changed; 0 reports every move.",
            "default": 1
          },
          "reportNewProperties": {
            "title": "Also return properties new to the list",
            "type": "boolean",
            "description": "With Only price changes: after the first run, also return properties that weren't in the list before, marked new. Google reshuffles its list from run to run, so most of them have only moved into the first N; off, they join the watch list without being returned or charged. The first run of a search always returns everything, as the baseline.",
            "default": false
          },
          "historyName": {
            "title": "History name",
            "type": "string",
            "description": "With Only price changes: the name of the store that remembers the prices seen. Leave empty to get one per watch list automatically; name it to share one history between tasks. Tasks with different guests, currency, stay length or filters keep their prices apart inside it. Letters, digits and hyphens."
          },
          "checkOut": {
            "title": "Check-out date",
            "pattern": "^(\\d{4})-(0[1-9]|1[0-2])-(0[1-9]|[12]\\d|3[01])$|^(\\d+)\\s*(day|week|month)s?$|^(today|tomorrow)$",
            "type": "string",
            "description": "Instead of Nights: a check-out date (YYYY-MM-DD) or a time from today, such as \"16 days\"."
          },
          "country": {
            "title": "Google country",
            "pattern": "^[A-Za-z]{2}$",
            "type": "string",
            "description": "Two-letter country code Google localises the page for (gl), such as us, gb or ca. It doesn't change the currency.",
            "default": "us"
          },
          "language": {
            "title": "Language",
            "type": "string",
            "description": "Language of names and texts Google translates (hl), such as en, fr or de. Prices are read in any language. The amenities and deal badges on search results are read from English pages only, so other languages leave them empty (booking-site prices bring each hotel's full amenity list in any language).",
            "default": "en"
          },
          "proxy": {
            "title": "Proxy",
            "type": "object",
            "description": "Apify's standard datacenter proxy by default. Each search keeps one address and one Google session.",
            "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}