{
  "openapi": "3.0.1",
  "info": {
    "title": "Google Hotels Prices Scraper",
    "description": "Hotel prices from Google Hotels: every booking site's price (Booking.com, Expedia, Agoda, the hotel's own site...) for any hotel and dates, per night and total, with and without taxes, plus hotel searches like \"hotels in Paris\" with ratings, stars, address and lowest price. $0.80 per 1,000 prices.",
    "version": "0.1",
    "x-build-id": "22o3xQbwYhrvl3AXx"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/wulfcare~google-hotels-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-wulfcare-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/wulfcare~google-hotels-scraper/runs": {
      "post": {
        "operationId": "runs-sync-wulfcare-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/wulfcare~google-hotels-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-wulfcare-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": {
          "hotels": {
            "title": "Hotels",
            "type": "array",
            "description": "Hotels to get every booking site's prices for. Each one can be a hotel's name (best with the city: \"Hilton London Paddington\"), a Google Hotels link (https://www.google.com/travel/hotels/entity/...) or its entity ID (the \"Ch...\" code in that link), or the hotel's Google Maps link or CID.",
            "items": {
              "type": "string"
            }
          },
          "searchQueries": {
            "title": "Searches",
            "type": "array",
            "description": "Google Hotels searches, e.g. \"hotels in Paris\" or \"beach hotels in Bali\". Each gives one row per hotel (name, stars, rating, reviews, address, lowest price and more), up to \"Maximum hotels per search\".",
            "items": {
              "type": "string"
            }
          },
          "maxHotels": {
            "title": "Maximum hotels per search",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "Hotels to get from each search, in Google's order.",
            "default": 20
          },
          "includeAllPrices": {
            "title": "Every booking site's price for searched hotels",
            "type": "boolean",
            "description": "Searches give each hotel's lowest price. Turn this on to also get every booking site's price for each hotel found (in its \"prices\" list, charged per price).",
            "default": false
          },
          "checkInDate": {
            "title": "Check-in date",
            "type": "string",
            "description": "First check-in date (YYYY-MM-DD, or \"tomorrow\", \"+7 days\"). Empty = tomorrow. Google has prices for about a year ahead."
          },
          "days": {
            "title": "Check-in dates",
            "minimum": 1,
            "maximum": 365,
            "type": "integer",
            "description": "How many check-in dates in a row, from the first: 30 gives a price calendar for the next 30 check-ins.",
            "default": 1
          },
          "nights": {
            "title": "Nights",
            "minimum": 1,
            "maximum": 30,
            "type": "integer",
            "description": "Length of each stay.",
            "default": 1
          },
          "adults": {
            "title": "Adults",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "Guests. Prices and the booking sites offering them change with the number of guests.",
            "default": 2
          },
          "currency": {
            "title": "Currency",
            "type": "string",
            "description": "Three-letter code (USD, EUR, GBP, AUD...). Google prices in the currency of the country the request comes from (USD with the default US proxy); other currencies are converted at the day's ECB reference rate. For prices exactly as shown in a country (local currency and taxes), use a residential proxy from that country.",
            "default": "USD"
          },
          "outputFormat": {
            "title": "Output",
            "enum": [
              "providers",
              "hotels"
            ],
            "type": "string",
            "description": "How rows for the hotels above come out. Searches always give one row per hotel.",
            "default": "providers"
          },
          "device": {
            "title": "Device",
            "enum": [
              "desktop",
              "mobile"
            ],
            "type": "string",
            "description": "Get the prices Google shows on desktop or on mobile (some sites have mobile-only rates).",
            "default": "desktop"
          },
          "language": {
            "title": "Language",
            "type": "string",
            "description": "Language of hotel descriptions and texts (en, fr, de, es...).",
            "default": "en"
          },
          "maxConcurrency": {
            "title": "Parallel requests",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "Requests to Google at once.",
            "default": 6
          },
          "proxyConfig": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Apify Proxy (datacenter) works well. Pick a residential proxy and a country to get prices in that country's currency and with its taxes.",
            "default": {
              "useApifyProxy": true
            }
          },
          "onlyChanges": {
            "title": "Monitor: only new and changed prices",
            "type": "boolean",
            "description": "For a schedule or a task that runs every hour or day. The Actor remembers each price from the last run (in a key-value store named \"google-hotels-monitor\" on your own account) and outputs only prices that are new, cheaper, dearer or gone, each with change, previousPrice, priceChange and priceChangePercent. You pay only for the rows that come out. The first run outputs every price as new. If a run stops early (maximum cost reached, or blocked), the remembered prices stay as they were, so the next run reports those changes again.",
            "default": false
          },
          "minChangePercent": {
            "title": "Ignore changes smaller than (%)",
            "minimum": 0,
            "maximum": 100,
            "type": "integer",
            "description": "With monitoring on: skip price moves smaller than this, e.g. 5 to hear only about moves of 5% or more. 0 reports every change.",
            "default": 0
          },
          "onlyDrops": {
            "title": "Only price drops",
            "type": "boolean",
            "description": "With monitoring on: output only new prices and price drops (no rises, no gone rows). Good for deal alerts.",
            "default": false
          },
          "monitorName": {
            "title": "Monitor name (optional)",
            "type": "string",
            "description": "With monitoring on: which saved prices to compare against. Leave empty and each different input keeps its own; set a name to keep comparing after you edit the input, or to run two monitors on the same input."
          },
          "entity": {
            "title": "Entity (compatibility)",
            "type": "string",
            "description": "A single hotel (entity ID, link or name): same as one line in Hotels."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}