{
  "openapi": "3.0.1",
  "info": {
    "title": "Booking.com Room Rates Scraper",
    "description": "Scrape every room Booking.com is selling for a hotel and your dates. Just add hotel links and get room name, size, beds, board, price for the stay, price per night, cancellation terms and payment policy. Export to CSV, JSON or Excel, or schedule it.",
    "version": "1.0",
    "x-build-id": "IyxC4Smozof3UbrVD"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/boncross~booking-room-rates/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-boncross-booking-room-rates",
        "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/boncross~booking-room-rates/runs": {
      "post": {
        "operationId": "runs-sync-boncross-booking-room-rates",
        "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/boncross~booking-room-rates/run-sync": {
      "post": {
        "operationId": "run-sync-boncross-booking-room-rates",
        "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": "Booking.com hotel links, \"country/slug\" (us/bellagio), a bare slug or a hotel ID. A link is looked up as that exact page; a bare slug is confirmed against Booking before it is priced.",
            "items": {
              "type": "string"
            }
          },
          "startUrls": {
            "title": "Start URLs",
            "type": "array",
            "description": "The same hotels as links, or a file or Google Sheet holding many of them.",
            "default": [],
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "checkIn": {
            "title": "Check-in",
            "type": "string",
            "description": "Arrival date, YYYY-MM-DD. Leave both dates empty to price one night 30 days from today."
          },
          "checkOut": {
            "title": "Check-out",
            "type": "string",
            "description": "Departure date, YYYY-MM-DD. Must be after check-in."
          },
          "adults": {
            "title": "Adults",
            "minimum": 1,
            "maximum": 30,
            "type": "integer",
            "description": "Adults in the room. Booking lists the same rooms and prices for any party, so this and Children's ages decide which rooms are big enough (see Hide rooms too small). Prices are for one room.",
            "default": 2
          },
          "childrenAges": {
            "title": "Children's ages",
            "type": "array",
            "description": "One entry per child, their age at check-in (0-17). Children count towards the room's capacity. Leave empty for adults only.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "maxRowsPerHotel": {
            "title": "Max rows per hotel",
            "minimum": 0,
            "type": "integer",
            "description": "Keep the cheapest this many rate rows per hotel-stay. 0 keeps every one.",
            "default": 0
          },
          "maxItems": {
            "title": "Max hotel-stays",
            "minimum": 0,
            "type": "integer",
            "description": "Stop after this many hotel-stays, across every hotel. A stay is one hotel for your dates, with all its rates. 0 means no limit.",
            "default": 0
          },
          "maxRows": {
            "title": "Max rows in total",
            "minimum": 0,
            "type": "integer",
            "description": "Stop after this many rows across the run. The last hotel-stay is cut to fit, keeping its cheapest rates. 0 means no limit.",
            "default": 0
          },
          "hideRoomsTooSmall": {
            "title": "Hide rooms too small for your party",
            "type": "boolean",
            "description": "Booking lists every room whatever the party, so a search for 4 adults also returns rooms that sleep 2. On by default, rooms that cannot sleep your adults and children are left out. Turn off to get every room.",
            "default": true
          },
          "onlyRefundable": {
            "title": "Only refundable rates",
            "type": "boolean",
            "description": "Keep only rates with free cancellation.",
            "default": false
          },
          "onlyBreakfastIncluded": {
            "title": "Only rates including breakfast",
            "type": "boolean",
            "description": "Keep only rates whose board includes breakfast.",
            "default": false
          },
          "includeAlternativeOccupancy": {
            "title": "Include reduced-occupancy rates",
            "type": "boolean",
            "description": "Booking sometimes sells the same room to fewer guests for less. These rows are marked with isAlternativeOccupancy so they cannot be mistaken for a cheaper version of the full-occupancy rate. Turn off to keep only the full-occupancy rate for each room and board.",
            "default": true
          },
          "sessions": {
            "title": "Passes per hotel",
            "minimum": 1,
            "maximum": 5,
            "type": "integer",
            "description": "Booking shows reduced-occupancy rates to some visitors and not others. Each extra pass raises the chance of catching them: 1 pass may miss them, 2 catches them about 9 times in 10, 3 about 97 times in 100. Costs one extra request per pass.",
            "default": 2
          },
          "currency": {
            "title": "Currency",
            "type": "string",
            "description": "Three-letter code, e.g. USD or GBP. Default USD. Left empty, Booking picks a currency from the visitor's location, which can change between runs.",
            "default": "USD"
          },
          "language": {
            "title": "Language",
            "type": "string",
            "description": "Booking language code, e.g. en-gb, en-us, de, fr, ja.",
            "default": "en-gb"
          },
          "delayMs": {
            "title": "Delay between requests (ms)",
            "minimum": 0,
            "type": "integer",
            "description": "Optional pause before each call, in milliseconds. 0 (the default) runs as fast as the parallel limit allows. Values above 2000 are treated as 2000.",
            "default": 0
          },
          "maxConcurrency": {
            "title": "Parallel requests",
            "minimum": 1,
            "maximum": 32,
            "type": "integer",
            "description": "How many requests run at once across the whole run. The default is the fastest level measured clean; lower it only if a run reports refusals or errors.",
            "default": 32
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}