{
  "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": "TcipkKQbqhcnYNAEs"
  },
  "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": {
          "searchUrls": {
            "title": "Search URLs",
            "uniqueItems": true,
            "type": "array",
            "description": "One or more full Booking.com search results URLs. The date range will be applied to each URL in turn. Easiest way to use the scraper — craft any filter combination on Booking.com and paste the URLs here. When at least one URL is provided, the Destination / Destination ID / Destination Type / Currency / Adults / Rooms / Children fields are ignored.",
            "items": {
              "type": "string",
              "pattern": "^https?://(www\\.)?booking\\.com/.+"
            },
            "default": []
          },
          "destination": {
            "title": "Destination",
            "type": "string",
            "description": "Search keyword — a city, neighbourhood, area, or hotel name. Used only when no Search URLs are provided. 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 no Search URLs are provided.",
            "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 no Search URLs are provided.",
            "default": "district"
          },
          "startDate": {
            "title": "Start Date",
            "pattern": "^\\s*$|^\\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 per URL, so larger values × more URLs mean longer runs.",
            "default": 15
          },
          "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 no Search URLs are provided.",
            "default": "GBP"
          },
          "adults": {
            "title": "Number of Adults",
            "minimum": 1,
            "maximum": 30,
            "type": "integer",
            "description": "Total adult guests across all rooms. Used only when no Search URLs are provided.",
            "default": 2
          },
          "rooms": {
            "title": "Number of Rooms",
            "minimum": 1,
            "maximum": 30,
            "type": "integer",
            "description": "How many rooms the search should price. Used only when no Search URLs are provided.",
            "default": 1
          },
          "children": {
            "title": "Number of Children",
            "minimum": 0,
            "maximum": 10,
            "type": "integer",
            "description": "Total child guests across all rooms. Used only when no Search URLs are provided.",
            "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. If the chosen proxy fails to connect at startup the scraper will automatically fall back to RESIDENTIAL → auto group → direct connection, and each retry rotates to a fresh IP.",
            "default": {
              "useApifyProxy": true,
              "apifyProxyGroups": [
                "RESIDENTIAL"
              ]
            }
          },
          "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 launches a fresh browser with a new 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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}