{
  "openapi": "3.0.1",
  "info": {
    "title": "Booking.com Hotels, Prices and Reviews Scraper",
    "description": "Scrape booking.com hotels, apartments, villas and hostels. Search any destination with the site's own filters (type, stars, review score, budget, meals, cancellation, amenities) or paste links. Live prices in 36 currencies, room-level rates, facilities, house rules and guest reviews.",
    "version": "1.0",
    "x-build-id": "SE7KRCZwCcYuZo6HK"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/abotapi~booking-com-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-abotapi-booking-com-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/abotapi~booking-com-scraper/runs": {
      "post": {
        "operationId": "runs-sync-abotapi-booking-com-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/abotapi~booking-com-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-abotapi-booking-com-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",
        "required": [
          "mode"
        ],
        "properties": {
          "mode": {
            "title": "Mode",
            "enum": [
              "search",
              "url"
            ],
            "type": "string",
            "description": "Search: name destinations and let the actor build the search. URL: paste booking.com search links or property links and walk exactly those.",
            "default": "search"
          },
          "destinations": {
            "title": "Destinations",
            "type": "array",
            "description": "One destination per line, exactly as you would type it into the site's own search box: a city, a region, a neighbourhood, a landmark or an airport. Example: Sydney, Lisbon, Manhattan New York.",
            "items": {
              "type": "string"
            }
          },
          "propertyTypes": {
            "title": "Property type",
            "type": "array",
            "description": "Keep only these kinds of place. Several kinds widen the search (any of them matches). Leave empty for every kind. Search mode only; pasted links keep their own filters.",
            "items": {
              "type": "string",
              "enum": [
                "hotels",
                "apartments",
                "villas",
                "vacation_homes",
                "resort_villages",
                "chalets",
                "bed_and_breakfasts",
                "guesthouses",
                "hostels",
                "motels",
                "homestays",
                "lodges",
                "campgrounds",
                "luxury_tents",
                "boats",
                "capsule_hotels",
                "student_accommodations",
                "entire_homes_and_apartments"
              ],
              "enumTitles": [
                "Hotels",
                "Apartments",
                "Villas",
                "Vacation homes",
                "Resort villages",
                "Chalets",
                "Bed and breakfasts",
                "Guesthouses",
                "Hostels",
                "Motels",
                "Homestays",
                "Lodges",
                "Campgrounds",
                "Luxury tents",
                "Boats",
                "Capsule hotels",
                "Student accommodations",
                "Entire homes and apartments"
              ]
            },
            "default": []
          },
          "starRatings": {
            "title": "Property rating (stars)",
            "type": "array",
            "description": "Keep only properties with these star ratings. Several ratings widen the search (any of them matches).",
            "items": {
              "type": "string",
              "enum": [
                "1",
                "2",
                "3",
                "4",
                "5"
              ],
              "enumTitles": [
                "1 star",
                "2 stars",
                "3 stars",
                "4 stars",
                "5 stars"
              ]
            },
            "default": []
          },
          "minReviewScore": {
            "title": "Minimum guest review score",
            "enum": [
              "any",
              "6",
              "7",
              "8",
              "9"
            ],
            "type": "string",
            "description": "Keep only properties scoring at least this, out of 10, from guest reviews.",
            "default": "any"
          },
          "minPricePerNight": {
            "title": "Min price per night",
            "minimum": 0,
            "type": "integer",
            "description": "Lower bound of the nightly budget, in the currency selected below."
          },
          "maxPricePerNight": {
            "title": "Max price per night",
            "minimum": 0,
            "type": "integer",
            "description": "Upper bound of the nightly budget, in the currency selected below."
          },
          "mealPlans": {
            "title": "Meals",
            "type": "array",
            "description": "Keep only properties offering ALL of the meal arrangements you pick, so each extra one narrows the search further.",
            "items": {
              "type": "string",
              "enum": [
                "breakfast_included",
                "all_inclusive",
                "breakfast_and_lunch_included",
                "breakfast_and_dinner_included",
                "kitchen_amenities"
              ],
              "enumTitles": [
                "Breakfast included",
                "All inclusive",
                "Breakfast and lunch included",
                "Breakfast and dinner included",
                "Kitchen amenities"
              ]
            },
            "default": []
          },
          "reservationPolicies": {
            "title": "Reservation policy",
            "type": "array",
            "description": "Keep only properties whose booking conditions match ALL of the ones you pick, so each extra one narrows the search further.",
            "items": {
              "type": "string",
              "enum": [
                "free_cancellation",
                "book_without_credit_card",
                "no_prepayment"
              ],
              "enumTitles": [
                "Free cancellation",
                "Book without a credit card",
                "No prepayment"
              ]
            },
            "default": []
          },
          "amenities": {
            "title": "Property amenities",
            "type": "array",
            "description": "Keep only properties that have ALL of these, so each extra one narrows the search further.",
            "items": {
              "type": "string",
              "enum": [
                "free_wifi",
                "parking",
                "swimming_pool",
                "fitness_centre",
                "spa_and_wellness_centre",
                "restaurant",
                "room_service",
                "airport_shuttle",
                "front_desk_24h",
                "non_smoking_rooms",
                "electric_vehicle_charging",
                "beachfront",
                "hot_tub",
                "sauna",
                "garden"
              ],
              "enumTitles": [
                "Free WiFi",
                "Parking",
                "Swimming pool",
                "Fitness centre",
                "Spa and wellness centre",
                "Restaurant",
                "Room service",
                "Airport shuttle",
                "24 hour front desk",
                "Non smoking rooms",
                "Electric vehicle charging",
                "Beachfront",
                "Hot tub",
                "Sauna",
                "Garden"
              ]
            },
            "default": []
          },
          "roomAmenities": {
            "title": "Room amenities",
            "type": "array",
            "description": "Keep only properties whose rooms have ALL of these, so each extra one narrows the search further.",
            "items": {
              "type": "string",
              "enum": [
                "private_bathroom",
                "air_conditioning",
                "balcony",
                "terrace",
                "sea_view",
                "private_pool",
                "kitchen",
                "washing_machine"
              ],
              "enumTitles": [
                "Private bathroom",
                "Air conditioning",
                "Balcony",
                "Terrace",
                "Sea view",
                "Private pool",
                "Kitchen",
                "Washing machine"
              ]
            },
            "default": []
          },
          "bedPreferences": {
            "title": "Bed preference",
            "type": "array",
            "description": "Keep only properties offering these bed types for your party. Several types widen the search (any of them matches).",
            "items": {
              "type": "string",
              "enum": [
                "twin_beds",
                "double_bed",
                "queen_bed",
                "king_bed"
              ],
              "enumTitles": [
                "Twin beds",
                "Double bed",
                "Queen bed",
                "King bed"
              ]
            },
            "default": []
          },
          "travelGroups": {
            "title": "Travel group",
            "type": "array",
            "description": "Keep only properties suited to ALL of these travellers, so each extra one narrows the search further.",
            "items": {
              "type": "string",
              "enum": [
                "pet_friendly",
                "adults_only",
                "lgbtq_friendly"
              ],
              "enumTitles": [
                "Pet friendly",
                "Adults only",
                "LGBTQ+ friendly"
              ]
            },
            "default": []
          },
          "sortBy": {
            "title": "Sort by",
            "enum": [
              "relevance",
              "price_low_to_high",
              "rating_high_to_low",
              "stars_high_to_low",
              "stars_low_to_high",
              "distance_from_centre",
              "homes_and_apartments_first"
            ],
            "type": "string",
            "description": "Which order the site returns results in. This decides WHICH properties you get when Max results stops the run early. Search mode only; a pasted link keeps its own order.",
            "default": "relevance"
          },
          "urls": {
            "title": "Booking.com links",
            "type": "array",
            "description": "One link per line. A search link (searchresults.html) is walked with the destination, dates, guests and filters that link already carries. A property link (/hotel/<country>/<name>.html) returns that one property with its full detail.",
            "items": {
              "type": "string"
            }
          },
          "checkIn": {
            "title": "Check-in date",
            "type": "string",
            "description": "YYYY-MM-DD. Prices exist only for a real stay, so if you leave this empty the run prices a 2 night stay 30 days from now and says so in the log."
          },
          "checkOut": {
            "title": "Check-out date",
            "type": "string",
            "description": "YYYY-MM-DD. Must be after check-in. Left empty, it becomes 2 nights after check-in."
          },
          "adults": {
            "title": "Adults",
            "minimum": 1,
            "maximum": 30,
            "type": "integer",
            "description": "Adults in the party. Changes which rooms and prices come back.",
            "default": 2
          },
          "childrenAges": {
            "title": "Children ages",
            "type": "array",
            "description": "One age (0 to 17) per child, one per line. The number of children is taken from how many ages you list.",
            "items": {
              "type": "string"
            }
          },
          "rooms": {
            "title": "Rooms",
            "minimum": 1,
            "maximum": 30,
            "type": "integer",
            "description": "How many rooms the party needs.",
            "default": 1
          },
          "currency": {
            "title": "Currency",
            "enum": [
              "USD",
              "EUR",
              "GBP",
              "AUD",
              "CAD",
              "NZD",
              "JPY",
              "CNY",
              "INR",
              "BRL",
              "MXN",
              "CHF",
              "SEK",
              "NOK",
              "DKK",
              "PLN",
              "CZK",
              "HUF",
              "TRY",
              "ZAR",
              "AED",
              "SAR",
              "SGD",
              "HKD",
              "KRW",
              "THB",
              "IDR",
              "MYR",
              "PHP",
              "VND",
              "ILS",
              "RON",
              "ARS",
              "CLP",
              "COP",
              "TWD"
            ],
            "type": "string",
            "description": "Every price in the output is converted to this currency, and the budget filter above is denominated in it. The property's own currency is returned alongside it.",
            "default": "USD"
          },
          "language": {
            "title": "Language",
            "enum": [
              "en-us",
              "en-gb",
              "de",
              "fr",
              "es",
              "it",
              "nl",
              "pt-pt",
              "pt-br",
              "pl",
              "sv",
              "da",
              "no",
              "fi",
              "cs",
              "hu",
              "ro",
              "tr",
              "ru",
              "ar",
              "he",
              "ja",
              "ko",
              "zh-cn",
              "zh-tw",
              "th",
              "id",
              "vi",
              "ms"
            ],
            "type": "string",
            "description": "Language for property names, room names, facility labels and review text where the site has a translation.",
            "default": "en-us"
          },
          "availableOnly": {
            "title": "Only properties available for these dates",
            "type": "boolean",
            "description": "The site pads a thin result set with places that are not actually bookable for your dates. Turn this on to drop them and keep only the bookable ones, reported in the isAvailableForDates column. Applied by this actor after the search, because the site ignores its own availability filter tokens. Works in search mode and for pasted search links; a pasted property link has no availability context to test.",
            "default": false
          },
          "minReviewCount": {
            "title": "Minimum number of reviews",
            "minimum": 0,
            "type": "integer",
            "description": "Drop properties with fewer reviews than this. A 10 out of 10 from two guests is not the same evidence as an 8.9 from four thousand. Applied by this actor after the search, because the site's own filters bound the score but never the sample size."
          },
          "excludeSoldOut": {
            "title": "Drop sold-out properties",
            "type": "boolean",
            "description": "Applied by this actor after the search. Useful mainly for pasted links, whose own filter string may not carry the availability option.",
            "default": false
          },
          "fetchDetails": {
            "title": "Read each property's own page",
            "type": "boolean",
            "description": "Adds facilities, house rules, check-in and check-out times, the child and bed policy, accepted payment methods, the fine print, the photo gallery, the room catalogue and guest questions. Costs one extra request per property and adds the per-property surcharge.",
            "default": false
          },
          "maxReviewsPerProperty": {
            "title": "Guest reviews per property",
            "minimum": 0,
            "maximum": 500,
            "type": "integer",
            "description": "How many guest reviews to attach to each property, newest first. 0 returns none. Reviews are read 25 at a time, so 100 costs four extra requests per property and adds the per-property surcharge.",
            "default": 20
          },
          "maxItems": {
            "title": "Max results",
            "minimum": 0,
            "type": "integer",
            "description": "Stop after this many properties. 0 means no limit, which on a big destination can be up to 1000 per search: the site stops serving new results past that point, whatever it declares as the total.",
            "default": 20
          },
          "maxPages": {
            "title": "Max pages per destination",
            "minimum": 0,
            "type": "integer",
            "description": "Stop each destination after this many result pages (25 properties per page). 0 walks until the results run out or the site stops serving new ones.",
            "default": 0
          },
          "resumeFromRunId": {
            "title": "Resume from a previous run",
            "type": "string",
            "description": "Paste a run id or dataset id from an earlier run of this actor to continue where it stopped: everything that run already collected is skipped, so you are not charged for it twice. For recurring monitoring use Incremental mode below instead."
          },
          "incrementalMode": {
            "title": "Incremental mode (only what changed)",
            "type": "boolean",
            "description": "For scheduled runs against the same search. The actor remembers the previous run itself and returns only NEW, UPDATED and REAPPEARED properties, with a changedFields list. Use Resume from a previous run above to continue one interrupted crawl instead.",
            "default": false
          },
          "stateKey": {
            "title": "State key",
            "type": "string",
            "description": "Name this monitoring campaign so several schedules can track different searches independently. Leave empty and the actor derives one from the mode, destinations, links, filters and stay."
          },
          "emitUnchanged": {
            "title": "Also return unchanged properties",
            "type": "boolean",
            "description": "Incremental mode only. Returns properties that did not change since the last run. These are extra rows and they are billed as results.",
            "default": false
          },
          "emitExpired": {
            "title": "Also return properties that disappeared",
            "type": "boolean",
            "description": "Incremental mode only. Returns a row marked EXPIRED for each tracked property no longer found, but only after a run that reached the natural end of every search. These are extra rows and they are billed as results.",
            "default": false
          },
          "proxy": {
            "title": "Connection",
            "type": "object",
            "description": "Leave the default on. The shared connection pool is what this actor is tuned for and it costs far less than the traffic-billed one.",
            "default": {
              "useApifyProxy": true
            }
          },
          "mcpConnectors": {
            "title": "MCP connectors",
            "type": "array",
            "description": "Optional. Send the results straight into your own apps through Apify's MCP proxy, for example notion or slack. Leave empty to skip.",
            "items": {
              "type": "string"
            }
          },
          "notionParentPageUrl": {
            "title": "Notion parent page URL",
            "type": "string",
            "description": "Only used when the notion connector is selected: the page new property pages are created under."
          },
          "maxNotifyProperties": {
            "title": "Max properties to export",
            "minimum": 1,
            "type": "integer",
            "description": "How many properties to push into the connectors above. The dataset always keeps them all.",
            "default": 50
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}