Nimbryxo Studio

Booking.com Hotel Price & Amenity Search Scraper

Search Booking.com for a destination and dates, and collect each property's price, rating, review count, amenities, and breakfast info for the stay you specify.

Input schema

Input fields, types, required flags, descriptions, defaults, and prefills come from the published definition. Prefill examples are distinct from defaults.

FieldTypeRequiredDescription
modestringoptionalSearch a destination, or load specific Booking.com hotel URLs.
destinationstringoptionalCity, region or landmark to search, e.g. Paris, New York or Tokyo. Required in search mode.
startUrlsarrayoptionalBooking.com hotel page URLs, used in details mode. Copy links from a search result or your browser.
Show all input fields
FieldTypeRequiredDescription
modestringoptionalSearch a destination, or load specific Booking.com hotel URLs.
destinationstringoptionalCity, region or landmark to search, e.g. Paris, New York or Tokyo. Required in search mode.
startUrlsarrayoptionalBooking.com hotel page URLs, used in details mode. Copy links from a search result or your browser.
checkInstringoptionalCheck-in date as YYYY-MM-DD. Leave empty to use tomorrow.
checkOutstringoptionalCheck-out date as YYYY-MM-DD. Leave empty to use a 3-night stay.
adultsintegeroptionalNumber of adult guests.
roomsintegeroptionalNumber of rooms needed.
propertyTypestringoptionalKeep only one Booking.com property type, or search all types.
minReviewScorenumberoptionalMinimum guest score from 0 to 10. The actor applies Booking.com's score filter and then keeps only properties at or above this exact score.
starsstringoptionalKeep only properties with this star rating, or any star rating.
freeCancellationbooleanoptionalReturn properties with at least one free-cancellation rate.
breakfastbooleanoptionalReturn properties with a breakfast-included rate.
poolbooleanoptionalReturn properties that have a swimming pool.
minPricenumberoptionalOptional lower bound for the nightly price in the chosen currency.
maxPricenumberoptionalOptional upper bound for the nightly price in the chosen currency.
currencystringoptionalThree-letter currency code such as USD, EUR or GBP.
languagestringoptionalLanguage Booking.com should use for the pages.
maxItemsintegeroptionalStop after this many hotels.
includeRoomsbooleanoptionalAdd the room and rate table for each hotel. Turn off for a smaller, faster dataset.
includeFullAmenitiesbooleanoptionalRender each hotel page in a browser to collect the complete facility list. Slower and only needed when you want every amenity.
proxyConfigurationobjectoptionalBooking.com uses an AWS WAF challenge. Apify's AUTO proxy is prefilled; the actor uses this proxy for browser and HTTP requests.

Download the published input schema

View complete JSON
{
  "description": "Search Booking.com or load hotel URLs, then collect prices, rooms, ratings, amenities, photos and policies for your travel dates.",
  "properties": {
    "adults": {
      "default": 2,
      "description": "Number of adult guests.",
      "maximum": 30,
      "minimum": 1,
      "prefill": 2,
      "title": "Adults",
      "type": "integer"
    },
    "breakfast": {
      "default": false,
      "description": "Return properties with a breakfast-included rate.",
      "prefill": false,
      "title": "Breakfast included only",
      "type": "boolean"
    },
    "checkIn": {
      "description": "Check-in date as YYYY-MM-DD. Leave empty to use tomorrow.",
      "editor": "textfield",
      "title": "Check-in date",
      "type": "string"
    },
    "checkOut": {
      "description": "Check-out date as YYYY-MM-DD. Leave empty to use a 3-night stay.",
      "editor": "textfield",
      "title": "Check-out date",
      "type": "string"
    },
    "currency": {
      "default": "USD",
      "description": "Three-letter currency code such as USD, EUR or GBP.",
      "editor": "textfield",
      "prefill": "USD",
      "title": "Currency",
      "type": "string"
    },
    "destination": {
      "description": "City, region or landmark to search, e.g. Paris, New York or Tokyo. Required in search mode.",
      "editor": "textfield",
      "prefill": "Paris",
      "title": "Destination",
      "type": "string"
    },
    "freeCancellation": {
      "default": false,
      "description": "Return properties with at least one free-cancellation rate.",
      "prefill": false,
      "title": "Free cancellation only",
      "type": "boolean"
    },
    "includeFullAmenities": {
      "default": false,
      "description": "Render each hotel page in a browser to collect the complete facility list. Slower and only needed when you want every amenity.",
      "prefill": false,
      "title": "Include full amenity list",
      "type": "boolean"
    },
    "includeRooms": {
      "default": true,
      "description": "Add the room and rate table for each hotel. Turn off for a smaller, faster dataset.",
      "prefill": false,
      "title": "Include room types",
      "type": "boolean"
    },
    "language": {
      "default": "en-us",
      "description": "Language Booking.com should use for the pages.",
      "editor": "select",
      "enum": [
        "en-us",
        "en-gb",
        "de",
        "fr",
        "es",
        "it",
        "pt-br",
        "nl",
        "ja",
        "zh-cn"
      ],
      "enumTitles": [
        "English (US)",
        "English (UK)",
        "German",
        "French",
        "Spanish",
        "Italian",
        "Portuguese (Brazil)",
        "Dutch",
        "Japanese",
        "Chinese"
      ],
      "prefill": "en-us",
      "title": "Language",
      "type": "string"
    },
    "maxItems": {
      "default": 3,
      "description": "Stop after this many hotels.",
      "maximum": 250,
      "minimum": 1,
      "prefill": 1,
      "title": "Maximum results",
      "type": "integer"
    },
    "maxPrice": {
      "description": "Optional upper bound for the nightly price in the chosen currency.",
      "minimum": 0,
      "title": "Maximum price per night",
      "type": "number"
    },
    "minPrice": {
      "description": "Optional lower bound for the nightly price in the chosen currency.",
      "minimum": 0,
      "title": "Minimum price per night",
      "type": "number"
    },
    "minReviewScore": {
      "default": 0,
      "description": "Minimum guest score from 0 to 10. The actor applies Booking.com's score filter and then keeps only properties at or above this exact score.",
      "maximum": 10,
      "minimum": 0,
      "title": "Minimum review score",
      "type": "number"
    },
    "mode": {
      "default": "search",
      "description": "Search a destination, or load specific Booking.com hotel URLs.",
      "editor": "select",
      "enum": [
        "search",
        "details"
      ],
      "enumTitles": [
        "Search a destination",
        "Load hotel URLs"
      ],
      "prefill": "search",
      "title": "What to scrape",
      "type": "string"
    },
    "pool": {
      "default": false,
      "description": "Return properties that have a swimming pool.",
      "prefill": false,
      "title": "Swimming pool only",
      "type": "boolean"
    },
    "propertyType": {
      "default": "all",
      "description": "Keep only one Booking.com property type, or search all types.",
      "editor": "select",
      "enum": [
        "all",
        "hotels",
        "apartments",
        "hostels",
        "guesthouses",
        "villas",
        "resorts"
      ],
      "enumTitles": [
        "All types",
        "Hotels",
        "Apartments",
        "Hostels",
        "Guesthouses",
        "Villas",
        "Resorts"
      ],
      "prefill": "all",
      "title": "Property type",
      "type": "string"
    },
    "proxyConfiguration": {
      "description": "Booking.com uses an AWS WAF challenge. Apify's AUTO proxy is prefilled; the actor uses this proxy for browser and HTTP requests.",
      "editor": "proxy",
      "prefill": {
        "useApifyProxy": true
      },
      "title": "Proxy configuration",
      "type": "object"
    },
    "rooms": {
      "default": 1,
      "description": "Number of rooms needed.",
      "maximum": 30,
      "minimum": 1,
      "prefill": 1,
      "title": "Rooms",
      "type": "integer"
    },
    "stars": {
      "default": "0",
      "description": "Keep only properties with this star rating, or any star rating.",
      "editor": "select",
      "enum": [
        "0",
        "1",
        "2",
        "3",
        "4",
        "5"
      ],
      "enumTitles": [
        "Any stars",
        "1 star",
        "2 stars",
        "3 stars",
        "4 stars",
        "5 stars"
      ],
      "prefill": "0",
      "title": "Stars",
      "type": "string"
    },
    "startUrls": {
      "default": [],
      "description": "Booking.com hotel page URLs, used in details mode. Copy links from a search result or your browser.",
      "editor": "requestListSources",
      "prefill": [
        {
          "url": "https://www.booking.com/hotel/fr/du-printemps-paris.html"
        }
      ],
      "title": "Hotel URLs",
      "type": "array"
    }
  },
  "required": [],
  "schemaVersion": 1,
  "title": "Booking.com Hotel Search & Details Scraper",
  "type": "object"
}

Output schema

Published result links and storage locations. This schema is not an exhaustive contract for every field in a dataset record.

FieldTypeRequiredDescription
hotelsstringoptionalDataset containing every scraped Booking.com property.

Download the published output schema

View complete JSON
{
  "actorOutputSchemaVersion": 1,
  "description": "One row per Booking.com property with stay prices, room types, ratings, review subscores, amenities, photos, description and policies.",
  "properties": {
    "hotels": {
      "description": "Dataset containing every scraped Booking.com property.",
      "template": "{{links.apiDefaultDatasetUrl}}/items",
      "title": "Booking.com Hotels",
      "type": "string"
    }
  },
  "title": "Booking.com Hotel Search & Details Output"
}

Dataset schema

Published dataset views and any declared field definitions. A view can select only a subset of the returned record fields.

Download the published dataset schema

View complete JSON
{
  "actorSpecification": 1,
  "fields": {
    "properties": {
      "address": {
        "description": "Full street address",
        "type": "string"
      },
      "adults": {
        "description": "Number of adults used for pricing",
        "type": "integer"
      },
      "amenities": {
        "description": "Amenity keywords found on the search card",
        "items": {
          "type": "string"
        },
        "type": "array"
      },
      "breakfastAvailable": {
        "description": "Whether breakfast is available",
        "type": "boolean"
      },
      "breakfastIncluded": {
        "description": "Whether a breakfast-included rate exists",
        "type": "boolean"
      },
      "breakfastPrice": {
        "description": "Breakfast price when it is paid separately",
        "type": "number"
      },
      "checkin": {
        "description": "Stay check-in date used for the prices",
        "type": "string"
      },
      "checkinTime": {
        "description": "Check-in time",
        "type": "string"
      },
      "checkout": {
        "description": "Stay check-out date used for the prices",
        "type": "string"
      },
      "checkoutTime": {
        "description": "Check-out time",
        "type": "string"
      },
      "city": {
        "description": "City",
        "type": "string"
      },
      "country": {
        "description": "Country name",
        "type": "string"
      },
      "currency": {
        "description": "ISO 4217 currency code",
        "type": "string"
      },
      "description": {
        "description": "Property description",
        "type": "string"
      },
      "detailStatus": {
        "description": "enriched, search_only or failed",
        "type": "string"
      },
      "discountPercent": {
        "description": "Discount percentage when an original price is shown",
        "type": "number"
      },
      "distance": {
        "description": "Distance from the city centre as shown by Booking.com",
        "type": "string"
      },
      "freeCancellation": {
        "description": "Whether a free-cancellation rate exists",
        "type": "boolean"
      },
      "fullAmenities": {
        "description": "Complete facility list when includeFullAmenities is on",
        "items": {
          "type": "string"
        },
        "type": "array"
      },
      "hotelId": {
        "description": "Hotel slug from the Booking.com URL",
        "type": "string"
      },
      "latitude": {
        "description": "Latitude",
        "type": "number"
      },
      "longitude": {
        "description": "Longitude",
        "type": "number"
      },
      "mode": {
        "description": "search or details",
        "type": "string"
      },
      "name": {
        "description": "Hotel name",
        "type": "string"
      },
      "nights": {
        "description": "Number of nights in the stay",
        "type": "integer"
      },
      "originalPrice": {
        "description": "Pre-discount price when Booking.com shows a strike-through price",
        "type": "number"
      },
      "photoUrl": {
        "description": "Main hotel photo URL",
        "type": "string"
      },
      "photos": {
        "description": "Hotel photo URLs",
        "items": {
          "type": "string"
        },
        "type": "array"
      },
      "price": {
        "description": "Cheapest total price for the whole stay",
        "type": "number"
      },
      "pricePerNight": {
        "description": "Total price divided by the number of nights",
        "type": "number"
      },
      "priceWithTaxes": {
        "description": "Cheapest rate total plus taxes and fees",
        "type": "number"
      },
      "propertyType": {
        "description": "Property type from Booking.com",
        "type": "string"
      },
      "rating": {
        "description": "Guest review score (0-10)",
        "type": "number"
      },
      "reviewCount": {
        "description": "Number of guest reviews",
        "type": "integer"
      },
      "reviewSubscores": {
        "description": "Guest subscores such as Location and Cleanliness",
        "items": {
          "properties": {
            "name": {
              "type": "string"
            },
            "score": {
              "type": "number"
            }
          },
          "type": "object"
        },
        "type": "array"
      },
      "reviewWord": {
        "description": "Booking.com rating label such as Wonderful or Very Good",
        "type": "string"
      },
      "roomTypeCount": {
        "description": "Number of distinct room types",
        "type": "integer"
      },
      "roomTypes": {
        "description": "Room and rate options",
        "items": {
          "properties": {
            "amenities": {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            "bedType": {
              "type": "string"
            },
            "breakfastAvailable": {
              "type": "boolean"
            },
            "breakfastIncluded": {
              "type": "boolean"
            },
            "breakfastPrice": {
              "type": "number"
            },
            "currency": {
              "type": "string"
            },
            "freeCancellation": {
              "type": "boolean"
            },
            "name": {
              "type": "string"
            },
            "originalPrice": {
              "type": "number"
            },
            "price": {
              "type": "number"
            },
            "ratePlans": {
              "type": "integer"
            },
            "size": {
              "type": "string"
            },
            "sleeps": {
              "type": "string"
            },
            "taxesAndFees": {
              "type": "number"
            },
            "totalPrice": {
              "type": "number"
            }
          },
          "type": "object"
        },
        "type": "array"
      },
      "rooms": {
        "description": "Number of rooms used for pricing",
        "type": "integer"
      },
      "scrapedAt": {
        "description": "Collection timestamp in ISO 8601 format",
        "type": "string"
      },
      "source": {
        "description": "Data source",
        "type": "string"
      },
      "stars": {
        "description": "Star rating (1-5)",
        "type": "integer"
      },
      "taxesAndFees": {
        "description": "Taxes and fees shown for the cheapest rate",
        "type": "number"
      },
      "topAmenities": {
        "description": "Headline facilities",
        "items": {
          "type": "string"
        },
        "type": "array"
      },
      "url": {
        "description": "Booking.com hotel URL",
        "type": "string"
      }
    },
    "type": "object"
  },
  "title": "Booking.com Hotel Search & Details",
  "views": {
    "overview": {
      "display": {
        "component": "table",
        "properties": {
          "breakfastIncluded": {
            "format": "text",
            "label": "Breakfast"
          },
          "city": {
            "format": "text",
            "label": "City"
          },
          "country": {
            "format": "text",
            "label": "Country"
          },
          "currency": {
            "format": "text",
            "label": "Currency"
          },
          "freeCancellation": {
            "format": "text",
            "label": "Free cancellation"
          },
          "name": {
            "format": "text",
            "label": "Hotel"
          },
          "price": {
            "format": "number",
            "label": "Stay total"
          },
          "pricePerNight": {
            "format": "number",
            "label": "Per night"
          },
          "propertyType": {
            "format": "text",
            "label": "Type"
          },
          "rating": {
            "format": "number",
            "label": "Rating"
          },
          "reviewCount": {
            "format": "number",
            "label": "Reviews"
          },
          "reviewWord": {
            "format": "text",
            "label": "Score word"
          },
          "stars": {
            "format": "number",
            "label": "Stars"
          },
          "topAmenities": {
            "format": "text",
            "label": "Top amenities"
          },
          "url": {
            "format": "link",
            "label": "URL"
          }
        }
      },
      "title": "Hotels",
      "transformation": {
        "fields": [
          "name",
          "price",
          "pricePerNight",
          "currency",
          "rating",
          "reviewCount",
          "reviewWord",
          "stars",
          "propertyType",
          "city",
          "country",
          "freeCancellation",
          "breakfastIncluded",
          "topAmenities",
          "url"
        ]
      }
    },
    "rooms": {
      "display": {
        "component": "table",
        "properties": {
          "name": {
            "format": "text",
            "label": "Hotel"
          },
          "roomTypeCount": {
            "format": "number",
            "label": "Room types"
          },
          "roomTypes": {
            "format": "text",
            "label": "Rooms and rates"
          },
          "url": {
            "format": "link",
            "label": "URL"
          }
        }
      },
      "title": "Rooms",
      "transformation": {
        "fields": [
          "name",
          "roomTypeCount",
          "roomTypes",
          "url"
        ]
      }
    }
  }
}

Key-value schema

Published key-value store definitions, when provided by this build.

This definition is not present in the default published build. See the published README for available documentation.

Published README

Read the full published documentation

Booking.com Hotel Search & Details Scraper

Search Booking.com for a destination and travel dates, or paste hotel links directly, and get one row per property with the stay price, room and rate options, guest scores, review subscores, facilities, photos, description and booking policies.

What this actor does

  • Search mode runs a Booking.com destination search for your dates, guests and filters, then scrolls and clicks Load more results to go beyond the first page. It collects up to 250 properties per run.
  • Details mode loads Booking.com hotel URLs you provide and returns the same rich row for each one.
  • Solves Booking.com's AWS WAF challenge once in a browser, then reuses the session cookie over HTTP for the rest of the run. If a detail request is challenged again, the actor refreshes the cookie and falls back to the browser for that page.
  • Applies Booking.com's own filters for property type, review score, stars, free cancellation, breakfast, pool and nightly price.
  • Returns the cheapest room-table price for the whole stay, plus every room and rate option when includeRooms is on.
  • Optionally renders each hotel in a browser to collect the complete facility list, not just the headline amenities.
  • If some detail pages fail, the run finishes with a PARTIAL warning and keeps the search rows instead of failing the whole run.

Output per hotel

Field What it contains
hotelId, name, url Property identity and its Booking.com page
propertyType, stars Property type and star rating
address, city, country Full address and location
latitude, longitude Map coordinates
distance Distance from the city centre as Booking.com shows it
rating, reviewCount, reviewWord Guest score, number of reviews and Booking.com's label
reviewSubscores Category scores such as Location, Cleanliness and Staff
price, pricePerNight, currency Cheapest total for the stay, nightly equivalent and ISO currency code
originalPrice, discountPercent Pre-discount price and discount percentage when a deal is shown
taxesAndFees, priceWithTaxes Taxes and fees for the cheapest rate and the resulting total
roomTypes Room name, rate-plan count, price, original price, total, taxes, breakfast, cancellation, sleeps, bed, size and room amenities
topAmenities, fullAmenities Headline facilities, plus the complete list when includeFullAmenities is on
amenities Amenity keywords found on the search card
photos, photoUrl Photo URLs and the main image
description Property description
breakfastIncluded, breakfastAvailable, breakfastPrice Whether breakfast is included, merely available, or paid separately
freeCancellation Whether a free-cancellation rate exists
checkinTime, checkoutTime Property check-in and check-out times
checkin, checkout, nights, adults, rooms The stay used for pricing
mode, detailStatus, source, scrapedAt Run metadata and enrichment status

Empty values are omitted from a record instead of being written as null.

Input

Field Type Default Description
mode select search search a destination or load hotel details
destination string – City, region or landmark; required in search mode
startUrls array [] Booking.com hotel URLs; required in details mode
checkIn string - Check-in date (YYYY-MM-DD); empty uses tomorrow
checkOut string - Check-out date (YYYY-MM-DD); empty uses a 3-night stay
adults integer 2 Adult guests (1–30)
rooms integer 1 Rooms needed (1–30)
propertyType select all All, hotels, apartments, hostels, guesthouses, villas or resorts
minReviewScore number 0 Minimum guest score (0–10)
stars select 0 Exact star rating, or any
freeCancellation boolean false Keep properties with a free-cancellation rate
breakfast boolean false Keep properties with breakfast included
pool boolean false Keep properties with a swimming pool
minPrice, maxPrice number – Nightly price bounds in the chosen currency
currency string USD Three-letter currency code
language select en-us Page language
maxItems integer 3 Maximum hotels to return (1–250)
includeRooms boolean true Add the room and rate table
includeFullAmenities boolean false Render each hotel page to collect every facility
proxyConfiguration object AUTO Apify proxy used for browser and HTTP requests

Example: search Paris for three nights

{
  "mode": "search",
  "destination": "Paris",
  "checkIn": "2026-11-10",
  "checkOut": "2026-11-13",
  "adults": 2,
  "rooms": 1,
  "maxItems": 3,
  "includeFullAmenities": false
}

Example: five-star hotels with a pool and free cancellation

{
  "mode": "search",
  "destination": "Barcelona",
  "checkIn": "2026-11-10",
  "checkOut": "2026-11-13",
  "stars": 5,
  "pool": true,
  "freeCancellation": true,
  "minReviewScore": 8,
  "currency": "EUR",
  "maxItems": 25
}

Example: load specific hotel pages

{
  "mode": "details",
  "startUrls": [
    { "url": "https://www.booking.com/hotel/fr/sorbonne.html" },
    { "url": "https://www.booking.com/hotel/fr/moxy-paris-la-villette.html" }
  ],
  "checkIn": "2026-11-10",
  "checkOut": "2026-11-13",
  "includeRooms": true,
  "includeFullAmenities": true
}

Use cases

  • Price comparison — compare stay totals for the same dates across a destination
  • Rate tracking — schedule runs to watch prices and discounts move
  • Room-level analysis — compare room types, breakfast and cancellation terms
  • Travel apps and spreadsheets — feed structured hotel data into your own tools
  • Market research — analyse ratings, review subscores and facilities by city or property type

FAQ

Do I need a Booking.com account? No. The actor reads public hotel and search pages. It solves the site's technical challenge without you providing cookies or a login.

Why does the first request take longer? Booking.com uses an AWS WAF JavaScript challenge. The actor opens one browser page to solve it, then reuses the resulting cookie over HTTP. That bootstrap is a few seconds per run.

What does price mean? It is the cheapest total for the whole stay, for the dates, guest count and room count in your input. pricePerNight divides that total by the number of nights. Use originalPrice when Booking.com shows a strike-through price.

Why do some prices differ from the search card? The search card can show a promotional or selected-room price. The detail parser takes the cheapest valid room-table price, which is the same number Booking.com uses for the cheapest rate on that page.

Why is fullAmenities missing? It is only collected when includeFullAmenities is on. That setting renders a hotel page in a browser, so it is slower and costs more than the default HTTP-only detail fetch.

What happens when Booking.com blocks the run? The actor fails with a BLOCKED status instead of returning an empty dataset. If only some detail pages fail, it finishes with a PARTIAL status and keeps the rows it did collect.

What happens when a search has no results? A valid search with no matches fails with NO_RESULTS, so you can tell it apart from a block. Loosen your filters or check the destination spelling.

How many results can I get? Set maxItems up to 250. Booking.com loads 25 cards at a time and exposes a "Load more results" button; the actor scrolls and clicks it until your cap or the page stops growing. Booking.com itself caps a single query at about 1,000 results.

Are prices and availability live? Yes. They are captured when the actor runs and can change as availability changes.

Is this affiliated with Booking.com? No. This is an independent third-party actor that reads publicly available Booking.com pages.

Python quickstart

Use a schema-derived input and the Python standard library to start a run. An Apify account and token are required for execution.

Open the step-by-step Python guide →

Source build cTXCXZCoq14RlU0gU. Documentation is regenerated from the default published build; private drafts are not included.