{
  "openapi": "3.0.1",
  "info": {
    "title": "Booking.com Price Tracker (Mobile Version)",
    "description": "A mobile-optimized Booking.com price tracker that extracts real-time hotel prices, discounts, and deals across dates—built for fast, reliable scraping and smart travel insights.",
    "version": "0.0",
    "x-build-id": "E4o0yVInqNaXSjHsN"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/moving_beacon-owner1~my-actor-3/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-moving_beacon-owner1-my-actor-3",
        "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/moving_beacon-owner1~my-actor-3/runs": {
      "post": {
        "operationId": "runs-sync-moving_beacon-owner1-my-actor-3",
        "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/moving_beacon-owner1~my-actor-3/run-sync": {
      "post": {
        "operationId": "run-sync-moving_beacon-owner1-my-actor-3",
        "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": {
          "searchUrl": {
            "title": "Search URL",
            "pattern": "^\\s*$|^https?://(www\\.)?booking\\.com/.+",
            "type": "string",
            "description": "Full Booking.com search results URL — the easiest way to scrape, since you can craft any filter combination on Booking.com and paste the URL here. When provided, the Destination, Destination ID, Destination Type, Currency, Adults, Rooms, and Children fields are all ignored.",
            "default": ""
          },
          "destination": {
            "title": "Destination",
            "type": "string",
            "description": "Search keyword — a city, neighbourhood, area, or hotel name. Used only when Search URL is empty. Examples: 'London Center', 'Paris', 'Hilton Tokyo'.",
            "default": ""
          },
          "destId": {
            "title": "Destination ID",
            "type": "string",
            "description": "Booking.com internal destination ID, paired with Destination Type. Find it by inspecting the 'dest_id' query parameter on a real Booking.com search URL. Used only when Search URL is empty.",
            "default": ""
          },
          "destType": {
            "title": "Destination Type",
            "enum": [
              "city",
              "district",
              "region",
              "landmark",
              "hotel",
              "country"
            ],
            "type": "string",
            "description": "What the Destination ID refers to. Must match the type Booking.com assigned to that ID. Used only when Search URL is empty.",
            "default": "district"
          },
          "startDate": {
            "title": "Start Date",
            "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
            "type": "string",
            "description": "First check-in date to scrape, in YYYY-MM-DD format. The scraper will then collect prices for this date plus the next (Number of Days − 1) consecutive dates.",
            "default": ""
          },
          "numDays": {
            "title": "Number of Days",
            "minimum": 1,
            "maximum": 365,
            "type": "integer",
            "description": "How many consecutive check-in dates to scrape starting from Start Date. Each date counts as one Booking.com page request, so larger values mean longer runs.",
            "default": 30
          },
          "currency": {
            "title": "Currency",
            "pattern": "^[A-Z]{3}$",
            "type": "string",
            "description": "ISO 4217 currency code for displayed prices. Examples: 'GBP', 'USD', 'EUR', 'JPY', 'AUD'. Used only when Search URL is empty.",
            "default": "GBP"
          },
          "adults": {
            "title": "Number of Adults",
            "minimum": 1,
            "maximum": 30,
            "type": "integer",
            "description": "Total adult guests across all rooms. Used only when Search URL is empty.",
            "default": 2
          },
          "rooms": {
            "title": "Number of Rooms",
            "minimum": 1,
            "maximum": 30,
            "type": "integer",
            "description": "How many rooms the search should price. Used only when Search URL is empty.",
            "default": 1
          },
          "children": {
            "title": "Number of Children",
            "minimum": 0,
            "maximum": 10,
            "type": "integer",
            "description": "Total child guests across all rooms. Used only when Search URL is empty.",
            "default": 0
          },
          "proxyConfiguration": {
            "title": "Proxy Configuration",
            "type": "object",
            "description": "Apify Proxy configuration. Residential proxies are strongly recommended for Booking.com — datacentre IPs are blocked aggressively. For best results, set the proxy country to match your target destination so prices and currency reflect a local user.",
            "default": {
              "useApifyProxy": true,
              "apifyProxyGroups": [
                "RESIDENTIAL"
              ],
              "apifyProxyCountry": "GB"
            }
          },
          "timeout": {
            "title": "Page Timeout (ms)",
            "minimum": 10000,
            "maximum": 300000,
            "type": "integer",
            "description": "Playwright navigation timeout per page, in milliseconds. Increase if Booking.com is slow to respond on your chosen proxy region.",
            "default": 60000
          },
          "retries": {
            "title": "Max Retries",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "How many times to retry a single date if the request is blocked, times out, or errors. Each retry uses a fresh proxy IP.",
            "default": 5
          },
          "delayMin": {
            "title": "Min Delay (seconds)",
            "minimum": 0,
            "maximum": 30,
            "type": "integer",
            "description": "Lower bound of the random pause between consecutive date requests. Larger delays look more human and reduce blocks, but slow the run down.",
            "default": 2
          },
          "delayMax": {
            "title": "Max Delay (seconds)",
            "minimum": 1,
            "maximum": 60,
            "type": "integer",
            "description": "Upper bound of the random pause between consecutive date requests. Should be greater than or equal to Min Delay.",
            "default": 5
          }
        }
      },
      "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
                  }
                }
              },
              "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}