{
  "openapi": "3.0.1",
  "info": {
    "title": "Google Hotels Scraper - Hotel Prices, Ratings & Booking Offers",
    "description": "Google Hotels scraper for hotel prices on your exact dates: search any city or look up hotels and get the lowest rate, every booking site's price (Booking.com, Agoda, Trip.com), ratings, amenities and coordinates. Hotel price tracking and comparison over plain HTTP, no browser, no login.",
    "version": "0.1",
    "x-build-id": "24kyoDMSgbMzOS9QD"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/datagleaner~google-hotels-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-datagleaner-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/datagleaner~google-hotels-scraper/runs": {
      "post": {
        "operationId": "runs-sync-datagleaner-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/datagleaner~google-hotels-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-datagleaner-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": "Free-text places to search, e.g. `Tokyo`, `Paris 8e`, `Waikiki, Honolulu`. Each is searched as `hotels in <place>`; text that already names a lodging type (`hostels in Berlin`, `ski resorts near Zermatt`) is used as typed.",
            "items": {
              "type": "string"
            }
          },
          "hotelUrls": {
            "title": "Hotel URLs or entity IDs",
            "type": "array",
            "description": "Detail mode: Google Hotels hotel page URLs (`https://www.google.com/travel/hotels/entity/Ch...`) or the bare entity ID (the `entityId` field of earlier results). Returns the full record with offers for your dates.",
            "items": {
              "type": "string"
            }
          },
          "checkIn": {
            "title": "Check-in date",
            "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
            "type": "string",
            "description": "YYYY-MM-DD. Prices are specific to these dates. Defaults to 30 days from today."
          },
          "checkOut": {
            "title": "Check-out date",
            "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
            "type": "string",
            "description": "YYYY-MM-DD, after check-in. Defaults to check-in plus 2 nights."
          },
          "adults": {
            "title": "Adults",
            "minimum": 1,
            "maximum": 8,
            "type": "integer",
            "description": "Number of adult guests.",
            "default": 2
          },
          "currency": {
            "title": "Currency",
            "type": "string",
            "description": "ISO 4217 code for all prices, e.g. `USD`, `EUR`, `JPY`, `GBP`.",
            "default": "USD"
          },
          "maxHotelsPerLocation": {
            "title": "Max hotels per location",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "Google returns 20 hotels per page; pages are followed until this many distinct hotels are collected or Google has no more for the query.",
            "default": 20
          },
          "includeDetails": {
            "title": "Fetch full details and provider offers",
            "type": "boolean",
            "description": "One extra request per hotel adds the street address, check-in times, website and the per-provider price offers. Turn off for a faster, lighter list with only the lowest price.",
            "default": true
          },
          "minRating": {
            "title": "Minimum guest rating",
            "minimum": 1,
            "maximum": 5,
            "type": "number",
            "description": "Keep only hotels rated at least this (1-5), e.g. `4.2`. Filters apply to location search, are checked before the details request, and skipped hotels are not charged. Hotels with no rating are skipped when this is set."
          },
          "hotelClass": {
            "title": "Hotel class (stars)",
            "type": "array",
            "description": "Keep only these star classes, e.g. 4 and 5. Guest houses, hostels and apartments without a class are skipped when this is set.",
            "items": {
              "type": "string",
              "enum": [
                "1",
                "2",
                "3",
                "4",
                "5"
              ],
              "enumTitles": [
                "1 star",
                "2 stars",
                "3 stars",
                "4 stars",
                "5 stars"
              ]
            }
          },
          "minPrice": {
            "title": "Minimum price per night",
            "minimum": 0,
            "type": "number",
            "description": "In your currency. Keep only hotels whose lowest nightly price for your dates is at least this. Hotels without a price for your dates are skipped when a price filter is set."
          },
          "maxPrice": {
            "title": "Maximum price per night",
            "minimum": 0,
            "type": "number",
            "description": "In your currency. Keep only hotels whose lowest nightly price for your dates is at most this, e.g. `200`."
          },
          "sortBy": {
            "title": "Sort results by",
            "enum": [
              "lowestPrice",
              "highestRating",
              "mostReviewed"
            ],
            "type": "string",
            "description": "Off by default (Google's own order, kept in `position`). When set, up to 60-200 matching hotels per location are looked at first and the best `maxHotelsPerLocation` by this order are returned, so you get the cheapest or best-rated of the area, not of the first page. Hotels without the value come last. Looking at more hotels costs requests, not charges."
          },
          "language": {
            "title": "Language",
            "type": "string",
            "description": "Interface language code (`en`, `de`, `ja`...). Affects hotel names, addresses and price labels.",
            "default": "en"
          },
          "countryCode": {
            "title": "Market country",
            "type": "string",
            "description": "Two-letter Google market (`us`, `gb`, `de`...). Providers and deals can differ by market.",
            "default": "us"
          },
          "requestDelaySecs": {
            "title": "Delay between requests (seconds)",
            "minimum": 0.2,
            "type": "number",
            "description": "Polite pacing. Lower is faster and raises the chance of being blocked.",
            "default": 1.5
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Optional. Off by default: Google answered datacenter IPs in testing. Enable a proxy if runs start getting blocked at high volume."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}