{
  "openapi": "3.0.1",
  "info": {
    "title": "Google Hotels Scraper & API — Prices, OTA Rates, $2.50/1K",
    "description": "Google Hotels API and hotel price tracker: up to 500 hotels per search for any city and dates, or one hotel night by night (price calendar, rate shopping). Nightly price, total with taxes, stars, rating, amenities, GPS and every booking site’s price and link. $2.50 per 1,000 hotels; unpriced free.",
    "version": "1.0",
    "x-build-id": "BvBKTNehxoYeRcHY2"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/datafabrik~google-hotels-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-datafabrik-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/datafabrik~google-hotels-scraper/runs": {
      "post": {
        "operationId": "runs-sync-datafabrik-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/datafabrik~google-hotels-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-datafabrik-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": "Where to search, one per line, as you would type it in Google Hotels: a city (\"Lisbon\"), a neighbourhood (\"Shinjuku, Tokyo\"), a landmark (\"hotels near the Eiffel Tower\") or a free query (\"boutique hotels in Rome\"). A plain place name is searched as \"hotels in <place>\". Leave empty to track only the hotels below.",
            "items": {
              "type": "string"
            }
          },
          "hotels": {
            "title": "Hotels to track",
            "type": "array",
            "description": "Optional. Specific hotels to price, one per line: the hotel's Google Hotels link (it contains /entity/…), its Google id, or its name as you would type it in Google Hotels (e.g. \"Ritz Paris\"; the hotel Google shows first is used, see matchedName). Each hotel × check-in date gives one row with the hotel's price for those dates; turn on \"Add every booking site's price\" to get every booking site too.",
            "items": {
              "type": "string"
            }
          },
          "checkIn": {
            "title": "Check-in date",
            "type": "string",
            "description": "Format YYYY-MM-DD. Leave empty to search a stay 30 days from today (handy for saved tasks and schedules)."
          },
          "checkOut": {
            "title": "Check-out date",
            "type": "string",
            "description": "Format YYYY-MM-DD. Leave empty to use the number of nights below."
          },
          "nights": {
            "title": "Nights",
            "minimum": 1,
            "maximum": 30,
            "type": "integer",
            "description": "Length of the stay when no check-out date is given (1–30). Also used with the extra check-in dates below.",
            "default": 1
          },
          "checkInDates": {
            "title": "Extra check-in dates (price monitoring)",
            "type": "array",
            "description": "Optional. More check-in dates (YYYY-MM-DD) to search with the same number of nights, e.g. every Friday of next month. Each location × date is one search.",
            "items": {
              "type": "string"
            }
          },
          "consecutiveDays": {
            "title": "Consecutive check-in days",
            "minimum": 1,
            "maximum": 180,
            "type": "integer",
            "description": "Search the check-in date and the following days too, e.g. 30 for a price calendar of the next 30 nights (1–180). Applies to every location and hotel; each one × date is one search. Each day is a separate search: 30 days × 100 hotels = 3,000 hotel rows ($7.50 on the Free plan). Unpriced hotels are free.",
            "default": 1
          },
          "adults": {
            "title": "Adults",
            "minimum": 1,
            "maximum": 12,
            "type": "integer",
            "description": "Number of adult guests (1–12). Google prices the room for this many people.",
            "default": 2
          },
          "maxResultsPerSearch": {
            "title": "Max hotels per search",
            "minimum": 1,
            "maximum": 500,
            "type": "integer",
            "description": "Google Hotels shows 20 properties per page; the Actor reads the following pages until this number is reached (1–500). Each hotel with a price is one hotel event (100 hotels ≈ $0.25 on the Free plan); unpriced hotels are free.",
            "default": 100
          },
          "currency": {
            "title": "Currency",
            "type": "string",
            "description": "Three-letter code for every price in the output: USD, EUR, GBP, JPY, INR…",
            "default": "USD"
          },
          "sortBy": {
            "title": "Sort by",
            "enum": [
              "relevance",
              "lowest_price",
              "highest_rating",
              "most_reviewed"
            ],
            "type": "string",
            "description": "Google's order for the results.",
            "default": "relevance"
          },
          "minRating": {
            "title": "Minimum guest rating",
            "enum": [
              "any",
              "3.5",
              "4.0",
              "4.5"
            ],
            "type": "string",
            "description": "Keep only properties rated at least this (Google's 5-point scale).",
            "default": "any"
          },
          "hotelClass": {
            "title": "Hotel class (stars)",
            "type": "array",
            "description": "Keep only these star classes, e.g. 4 and 5. Leave empty for all.",
            "items": {
              "type": "string",
              "enum": [
                "2",
                "3",
                "4",
                "5"
              ],
              "enumTitles": [
                "2 stars",
                "3 stars",
                "4 stars",
                "5 stars"
              ]
            }
          },
          "minPrice": {
            "title": "Minimum price per night",
            "minimum": 1,
            "type": "integer",
            "description": "In the chosen currency. Leave empty for no minimum."
          },
          "maxPrice": {
            "title": "Maximum price per night",
            "minimum": 1,
            "type": "integer",
            "description": "In the chosen currency. Leave empty for no maximum."
          },
          "amenities": {
            "title": "Required amenities",
            "type": "array",
            "description": "Keep only properties that have all of these amenities.",
            "items": {
              "type": "string",
              "enum": [
                "free_parking",
                "pool",
                "indoor_pool",
                "fitness_center",
                "free_breakfast",
                "spa",
                "beach_access",
                "pet_friendly"
              ],
              "enumTitles": [
                "Free parking",
                "Pool",
                "Indoor pool",
                "Fitness center",
                "Free breakfast",
                "Spa",
                "Beach access",
                "Pet-friendly"
              ]
            }
          },
          "includeOffers": {
            "title": "Add every booking site's price",
            "type": "boolean",
            "description": "Also open each hotel's Google Hotels page and return all booking offers: provider (Booking.com, Expedia, Agoda, the hotel's own site…), nightly price and stay total with and without taxes, and the booking link. Charged per hotel that has offers.",
            "default": false
          },
          "maxOfferLookupsPerSearch": {
            "title": "Hotels with booking-site prices (per search)",
            "minimum": 1,
            "maximum": 500,
            "type": "integer",
            "description": "When the option above is on, fetch booking-site prices for the first N hotels of each search (1–500).",
            "default": 20
          },
          "language": {
            "title": "Language",
            "type": "string",
            "description": "Language code for names, descriptions and labels, e.g. en, fr, de, es.",
            "default": "en"
          },
          "country": {
            "title": "Country",
            "type": "string",
            "description": "Two-letter country code Google prices for (point of sale), e.g. us, gb, fr, de. Booking sites and prices can differ by country.",
            "default": "us"
          },
          "maxConcurrency": {
            "title": "Parallel searches",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "How many searches run at the same time (1–20).",
            "default": 5
          },
          "maxRetries": {
            "title": "Retries per page",
            "minimum": 0,
            "maximum": 10,
            "type": "integer",
            "description": "How many times a page is retried, each time from a new IP, before the search is marked as failed (not charged).",
            "default": 6
          },
          "proxy": {
            "title": "Proxy",
            "type": "object",
            "description": "The default Apify Proxy (datacenter) is enough for Google Hotels.",
            "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}