{
  "openapi": "3.0.1",
  "info": {
    "title": "Booking.com Scraper: Hotel Prices, Ratings, Deals & Alerts",
    "description": "Booking.com scraper & hotel price API: hotels of any city for your dates with price per night, review score and count, stars, free cancellation, breakfast, distance to centre, deals. Price calendars over many dates, cheapest and best-value hotel per city, price-drop alerts.",
    "version": "0.1",
    "x-build-id": "85KonImtL6i4i8Wvd"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/euroscrape~booking-prices/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-euroscrape-booking-prices",
        "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/euroscrape~booking-prices/runs": {
      "post": {
        "operationId": "runs-sync-euroscrape-booking-prices",
        "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/euroscrape~booking-prices/run-sync": {
      "post": {
        "operationId": "run-sync-euroscrape-booking-prices",
        "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": [
          "locations"
        ],
        "properties": {
          "locations": {
            "title": "Locations",
            "type": "array",
            "description": "Cities, areas or landmarks as you would type them on Booking.com: \"Lisbon\", \"Paris 11e\", \"Lake Como\", \"Barcelona Eixample\".",
            "items": {
              "type": "string"
            }
          },
          "checkInDate": {
            "title": "Check-in date",
            "type": "string",
            "description": "First check-in date (YYYY-MM-DD). Default: in 14 days."
          },
          "nights": {
            "title": "Nights",
            "minimum": 1,
            "maximum": 30,
            "type": "integer",
            "description": "Length of stay.",
            "default": 1
          },
          "numberOfDates": {
            "title": "Number of check-in dates",
            "minimum": 1,
            "maximum": 90,
            "type": "integer",
            "description": "Check prices for several check-in dates in a row, e.g. 30 = every day of the next month (a price calendar).",
            "default": 1
          },
          "daysBetweenDates": {
            "title": "Days between dates",
            "minimum": 1,
            "maximum": 60,
            "type": "integer",
            "description": "1 = every day, 7 = the same weekday every week.",
            "default": 1
          },
          "adults": {
            "title": "Adults",
            "minimum": 1,
            "maximum": 30,
            "type": "integer",
            "description": "Number of adult guests.",
            "default": 2
          },
          "childrenAges": {
            "title": "Children (ages)",
            "type": "array",
            "description": "One age per child, e.g. [4, 9].",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "rooms": {
            "title": "Rooms",
            "minimum": 1,
            "maximum": 30,
            "type": "integer",
            "description": "Number of rooms.",
            "default": 1
          },
          "currency": {
            "title": "Currency",
            "type": "string",
            "description": "ISO code of the currency of all prices (EUR, USD, GBP…).",
            "default": "EUR"
          },
          "language": {
            "title": "Language",
            "type": "string",
            "description": "Booking.com language code for names and labels: en-gb, en-us, fr, de, es, it, nl, pt-pt…",
            "default": "en-gb"
          },
          "maxHotelsPerLocation": {
            "title": "Max hotels per location and date",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "Booking shows 25 per page; up to 1,000.",
            "default": 50
          },
          "sortBy": {
            "title": "Sort",
            "enum": [
              "relevance",
              "price_asc",
              "best_value",
              "review_score",
              "stars_desc",
              "distance"
            ],
            "type": "string",
            "description": "Order of Booking's results, which decides which hotels are collected when the cap is reached.",
            "default": "relevance"
          },
          "minReviewScore": {
            "title": "Minimum review score",
            "minimum": 6,
            "maximum": 9,
            "type": "integer",
            "description": "6, 7, 8 or 9 (Booking's filter steps)."
          },
          "hotelClasses": {
            "title": "Stars",
            "type": "array",
            "description": "Keep only these star ratings, e.g. [4, 5].",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "propertyTypes": {
            "title": "Property types",
            "type": "array",
            "description": "Leave empty for all.",
            "items": {
              "type": "string",
              "enum": [
                "hotel",
                "apartment",
                "holiday_home",
                "hostel",
                "bed_and_breakfast",
                "guest_house",
                "villa",
                "resort"
              ],
              "enumTitles": [
                "Hotels",
                "Apartments",
                "Holiday homes",
                "Hostels",
                "Bed and breakfasts",
                "Guest houses",
                "Villas",
                "Resorts"
              ]
            },
            "default": []
          },
          "freeCancellation": {
            "title": "Free cancellation only",
            "type": "boolean",
            "description": "Keep only rates with free cancellation.",
            "default": false
          },
          "breakfastIncluded": {
            "title": "Breakfast included only",
            "type": "boolean",
            "description": "Keep only rates with breakfast included.",
            "default": false
          },
          "minPricePerNight": {
            "title": "Min price per night",
            "minimum": 0,
            "type": "integer",
            "description": "In the chosen currency."
          },
          "maxPricePerNight": {
            "title": "Max price per night",
            "minimum": 0,
            "type": "integer",
            "description": "In the chosen currency."
          },
          "includeSummary": {
            "title": "Destination summary",
            "type": "boolean",
            "description": "One free row per location and date: median, lowest and highest price per night, median review score, share of free cancellation and breakfast, median price by stars, cheapest and best-value hotel.",
            "default": true
          },
          "monitorName": {
            "title": "Monitor name",
            "type": "string",
            "description": "Name this search and schedule the Actor (e.g. daily): each hotel row then carries the price change since the previous run, and price drops trigger the alerts below. The first run saves the baseline."
          },
          "onlyChanges": {
            "title": "Monitoring: only new hotels and price drops",
            "type": "boolean",
            "description": "Skip unchanged prices and price increases (cheaper runs).",
            "default": false
          },
          "alertOnPriceDropPct": {
            "title": "Alert on price drop (%)",
            "minimum": 1,
            "maximum": 90,
            "type": "integer",
            "description": "Monitoring: send an alert when a price per night drops by this percentage or more.",
            "default": 10
          },
          "telegramBotToken": {
            "title": "Telegram bot token",
            "type": "string",
            "description": "Alerts on Telegram: create a bot with @BotFather and paste its token."
          },
          "telegramChatId": {
            "title": "Telegram chat ID",
            "type": "string",
            "description": "Your chat ID (send a message to your bot, then open api.telegram.org/bot<token>/getUpdates)."
          },
          "discordWebhookUrl": {
            "title": "Discord webhook",
            "type": "string",
            "description": "Alerts in a Discord channel: Channel settings → Integrations → Webhooks."
          },
          "slackWebhookUrl": {
            "title": "Slack webhook",
            "type": "string",
            "description": "Alerts in Slack: create an Incoming Webhook for your channel."
          },
          "webhookUrl": {
            "title": "Webhook URL",
            "type": "string",
            "description": "Receives one POST per run with all price drops (Make, Zapier, n8n…)."
          },
          "maxNotifications": {
            "title": "Max alerts per run",
            "minimum": 1,
            "maximum": 200,
            "type": "integer",
            "description": "Maximum number of alert messages per run.",
            "default": 30
          },
          "useBrowser": {
            "title": "Use a real browser",
            "type": "boolean",
            "description": "Booking.com answers plain HTTP requests with a bot challenge; a headless browser passes it. Turn off only to try the cheaper HTTP mode.",
            "default": true
          },
          "proxy": {
            "title": "Proxy",
            "type": "object",
            "description": "Apify Proxy is recommended: datacenter IPs first, residential only when Booking challenges the request.",
            "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}