{
  "openapi": "3.0.1",
  "info": {
    "title": "Google Hotels Scraper: OTA Prices & Rate Parity",
    "description": "Hotel prices from every booking site on Google Hotels (OTAs and the official site) for revenue managers, travel agencies and data teams. Rate-parity flag, 90-day price calendar, specific hotels or city search, any country. Free during launch.",
    "version": "1.0",
    "x-build-id": "dY32hqnH2cQidwtqp"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/splashboard.labs~google-hotels-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-splashboard.labs-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/splashboard.labs~google-hotels-scraper/runs": {
      "post": {
        "operationId": "runs-sync-splashboard.labs-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/splashboard.labs~google-hotels-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-splashboard.labs-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": {
          "hotelUrls": {
            "title": "Hotels to monitor (URLs or IDs)",
            "type": "array",
            "description": "Hotels to track directly. Each entry can be a Google Hotels URL (e.g. \"https://www.google.com/travel/hotels/entity/ChkI0__xnKWzuY3oARoML2cvMWhjNDJ6dmNfEAE\"), a Google Maps place URL of the hotel, or the hotel's Google ID (CID, e.g. \"16724932617184247763\"). An entry that cannot be recognised produces a row with status \"invalid_input\".",
            "items": {
              "type": "string"
            }
          },
          "searchTerms": {
            "title": "Search terms (discover hotels)",
            "type": "array",
            "description": "Searches to run on Google Hotels to discover hotels, e.g. \"hotels in Seville\" or \"hoteles en Madrid centro\". Up to maxHotelsPerSearch hotels are taken from each search (vacation rentals are skipped).",
            "items": {
              "type": "string"
            }
          },
          "maxHotelsPerSearch": {
            "title": "Max hotels per search",
            "minimum": 1,
            "maximum": 200,
            "type": "integer",
            "description": "How many hotels to take from each search term, in Google's order, e.g. 20. Each hotel produces one row per check-in date.",
            "default": 20
          },
          "checkInDate": {
            "title": "First check-in date",
            "type": "string",
            "description": "First check-in date, either absolute (e.g. \"2026-11-02\") or relative to the day of the run (e.g. \"14 days\", \"2 weeks\"). Relative dates keep scheduled runs always looking ahead. It cannot be in the past or more than 330 days ahead. Empty = 14 days from today."
          },
          "stayNights": {
            "title": "Nights per stay",
            "minimum": 1,
            "maximum": 30,
            "type": "integer",
            "description": "Length of each stay in nights, e.g. 1 (check-out the next day) or 3. Prices are returned for the whole stay (totalPrice) and per night (pricePerNight).",
            "default": 1
          },
          "dateRangeDays": {
            "title": "Number of check-in dates",
            "minimum": 1,
            "maximum": 90,
            "type": "integer",
            "description": "How many consecutive check-in dates to price, starting at the first check-in date. E.g. 30 with 10 hotels gives 300 rows (one per hotel per day), ideal for rate shopping across a month.",
            "default": 1
          },
          "adults": {
            "title": "Adults",
            "minimum": 1,
            "maximum": 8,
            "type": "integer",
            "description": "Number of adult guests, e.g. 2.",
            "default": 2
          },
          "childrenAges": {
            "title": "Children's ages",
            "type": "array",
            "description": "Age of each child at check-in (0–17), as a list, e.g. [5, 9] for two children aged 5 and 9. Leave empty for no children. Google Hotels prices per stay and guests; it has no 'number of rooms' option.",
            "default": []
          },
          "countryCode": {
            "title": "Country (Google edition and proxy)",
            "pattern": "^[A-Za-z]{2}$",
            "type": "string",
            "description": "Two-letter ISO 3166-1 country the search is made from, e.g. \"ES\" (Spain) or \"US\". It sets the Google edition and the proxy country. Note: prices are always reported including taxes; in the US edition Google's tax-inclusive price is used.",
            "default": "ES"
          },
          "currency": {
            "title": "Currency",
            "pattern": "^[A-Za-z]{3}$",
            "type": "string",
            "description": "Three-letter ISO 4217 currency to ask Google for, e.g. \"EUR\" or \"USD\". Prices are returned exactly as Google gives them (no conversion by us); the currency Google actually used is in each row.",
            "default": "EUR"
          },
          "language": {
            "title": "Language",
            "type": "string",
            "description": "Language of Google's interface, e.g. \"es\", \"en\" or \"en-GB\". It affects texts such as room names, not prices.",
            "default": "es"
          },
          "maxConcurrency": {
            "title": "Max parallel sessions",
            "minimum": 1,
            "maximum": 30,
            "type": "integer",
            "description": "How many proxy sessions work in parallel, e.g. 5. Higher is faster for large runs; the Actor lowers it automatically if Google starts blocking.",
            "default": 5
          },
          "maxAttempts": {
            "title": "Max attempts per hotel × date",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "How many times to try each hotel × date before reporting it as \"failed\", e.g. 5.",
            "default": 5
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Proxy used to reach Google, e.g. Apify Proxy with the RESIDENTIAL group (recommended). With Apify Proxy, the proxy country is always set to the country above.",
            "default": {
              "useApifyProxy": true,
              "apifyProxyGroups": [
                "RESIDENTIAL"
              ]
            }
          },
          "auditTaxes": {
            "title": "Tax audit (diagnostic)",
            "type": "boolean",
            "description": "Internal diagnostic. When true, editions that show prices without taxes (e.g. US) store a TAX_AUDIT record in the key-value store with the price basis of every offer. It does not change the output rows.",
            "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}