{
  "openapi": "3.0.1",
  "info": {
    "title": "Google Hotels Scraper",
    "description": "Scrape Google Hotels for any city or hotel: prices per night and total for your dates, guests and currency, deals, ratings, review topics, amenities, location scores and photos. Add every booking site's rate, typical price range, cheaper dates and highlights. Export to CSV, Excel or JSON.",
    "version": "0.1",
    "x-build-id": "GrU4f5xv2CHww7gMI"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/sz022~google-hotels-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-sz022-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/sz022~google-hotels-scraper/runs": {
      "post": {
        "operationId": "runs-sync-sz022-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/sz022~google-hotels-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-sz022-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": [
          "queries"
        ],
        "properties": {
          "queries": {
            "title": "Locations, searches or Google Hotels URLs",
            "minItems": 1,
            "maxItems": 500,
            "type": "array",
            "description": "One per line. A place or a search as you would type it on Google Hotels (Tokyo, hotels in Shinjuku, beach resorts in Bali), a Google Hotels search URL, or a hotel's own Google Hotels URL (https://www.google.com/travel/hotels/entity/...) to look up that one hotel. Up to 500 lines per run.",
            "items": {
              "type": "string"
            }
          },
          "checkInDate": {
            "title": "Check-in date",
            "type": "string",
            "description": "YYYY-MM-DD, or a relative date such as +30 days for scheduled runs. Leave empty for 30 days from today."
          },
          "checkOutDate": {
            "title": "Check-out date",
            "type": "string",
            "description": "YYYY-MM-DD or relative (+32 days). Leave empty for two nights after check-in. Stays of up to 30 nights."
          },
          "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-17) per child, for example [4, 9]. Leave empty for no children.",
            "default": []
          },
          "currency": {
            "title": "Currency",
            "pattern": "^[A-Za-z]{3}$",
            "type": "string",
            "description": "Three-letter code: USD, EUR, GBP, JPY, AUD, CAD, INR and about 70 more that Google Hotels offers. Every price in the output is in this currency, and each row's currency field confirms it.",
            "default": "USD"
          },
          "maxHotelsPerQuery": {
            "title": "Hotels per search",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "How many hotels to return for each search, in Google's order. Google shows about 20 per page; each further page takes about 3 seconds. Up to 1,000.",
            "default": 20
          },
          "includeDetails": {
            "title": "Add hotel details (charged separately)",
            "type": "boolean",
            "description": "Reads each hotel's own page as well: every booking site's price with its link, the official-site flag, member rates, free-cancellation deadlines, taxes, the typical price range and where today's price sits in it, cheaper dates nearby, Google's highlights with the reviews behind them, ratings from Tripadvisor and other sites, the full amenity list, address, phone and nearby similar hotels. Adds about one second and the hotel-details event per hotel.",
            "default": false
          },
          "includeSponsored": {
            "title": "Include sponsored listings",
            "type": "boolean",
            "description": "Also return the paid listings Google shows above the results (marked sponsored: true). They carry fewer fields, and are charged like any other hotel row. A hotel already in the regular results is not repeated.",
            "default": false
          },
          "minRating": {
            "title": "Minimum guest rating",
            "enum": [
              "any",
              "3.5",
              "4.0",
              "4.5"
            ],
            "type": "string",
            "description": "Google's own guest-rating filter.",
            "default": "any"
          },
          "hotelClass": {
            "title": "Hotel class (stars)",
            "type": "array",
            "description": "Only hotels with these official star ratings. Leave empty for all, including vacation rentals and unrated places.",
            "items": {
              "type": "string",
              "enum": [
                "2",
                "3",
                "4",
                "5"
              ],
              "enumTitles": [
                "2-star",
                "3-star",
                "4-star",
                "5-star"
              ]
            }
          },
          "maxPrice": {
            "title": "Maximum price per night",
            "minimum": 1,
            "type": "integer",
            "description": "In the currency above. Google's own price filter."
          },
          "minPrice": {
            "title": "Minimum price per night",
            "minimum": 0,
            "type": "integer",
            "description": "In the currency above. Google ignores a minimum, so the Actor skips cheaper hotels after reading them; skipped hotels are not charged and do not count toward Hotels per search."
          },
          "sortBy": {
            "title": "Sort by",
            "enum": [
              "relevance",
              "lowest_price",
              "highest_rating",
              "most_reviewed"
            ],
            "type": "string",
            "description": "Google's sort order for the results.",
            "default": "relevance"
          },
          "language": {
            "title": "Language",
            "type": "string",
            "description": "Language of hotel names, descriptions and reviews, as a Google language code (en, de, fr, es, ja, zh-TW...). Amenity labels are always English. The overall rating of a hotel looked up by URL is only read in English.",
            "default": "en"
          },
          "country": {
            "title": "Google country",
            "pattern": "^[A-Za-z]{2}$",
            "type": "string",
            "description": "Two-letter country code Google treats you as searching from. It decides which booking sites are listed. Prices stay in the currency above.",
            "default": "us"
          },
          "proxyConfiguration": {
            "title": "Proxy",
            "type": "object",
            "description": "Apify's datacenter proxy, which read Google Hotels in every test on the platform. Residential and Google SERP groups are not used: a Google Hotels page is 2-3 MB, and the price per hotel is set for datacenter traffic, so a run that asks for them falls back to the datacenter proxy and says so in the log. Proxy URLs of your own are used as given.",
            "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}