This tutorial shows how to scrape Booking.com search-result listings into CSV with the Booking.com Listings Scraper for UScraper. You will import the workflow, replace the search URLs, set the export path, run the offset loop, and validate the file before using it.
Before you start
Prerequisites, scope, and policy checks
You need UScraper installed as a local desktop app, the Booking.com Listings Scraper template, and a Booking.com search URL you are allowed to process. Start with one destination, one guest setup, one language, and one sort order.
This guide covers visible accommodation search-result cards. It does not cover account dashboards, partner portals, checkout flows, private messages, CAPTCHA bypassing, or login-only data. Booking.com's public terms include restrictions around automated access, so review the current Booking.com Terms of Use before automation. If you need a sanctioned integration, compare this workflow with the Booking.com developer portal and the Demand API documentation.
Technical access is not permission. Keep runs modest, do not defeat access controls, document the business reason for collection, and use official API or partner routes when you need contractual rights.
API or scraping
Booking.com API vs scraping: choose the right path
The official Booking.com Demand API is built for approved affiliate and partner integrations. It is the cleaner choice when you need stable endpoints for accommodation search, availability, property details, reviews, orders, reporting, and production product behavior.
The UScraper template is for a different job: analyst-led research from rendered search-result pages. It helps when you need a quick Booking.com listings scraper tutorial, a no-code CSV export, and browser-level QA without writing Python, maintaining a crawler, or sending your CSV through a hosted scraping vendor.
| Approach | Best fit | Trade-off |
|---|---|---|
| UScraper template | Research batches, visible search cards, local CSV review | You maintain waits and selectors when Booking.com changes layout. |
| Booking.com Demand API | Approved partners, stable schemas, availability and booking workflows | Requires onboarding, keys, API implementation, and permitted use. |
| Hosted scraping actors | Scheduled cloud scraping, managed infrastructure, larger operations | Data custody, pricing, output shape, and scraping logic depend on the vendor. |
| Python scraper | Full engineering control and custom pipelines | Requires code, maintenance, anti-bot handling, and validation tooling. |
Workflow anatomy
What the Booking.com listings scraper does
The bundled JSON is the authoritative workflow definition. In plain English, the flow is:
Navigate -> Wait for Page Load -> Wait for property cards
-> Structured Export -> Sleep -> Loop Continue
The Navigate block contains multiple Booking.com search-result URLs with predictable offsets such as offset=0, offset=25, and offset=50. That avoids fragile next-button clicks and date-picker overlays. Each page is handled as one loop iteration.
Structured Export uses [data-testid="property-card"] as the row selector, then writes one row per visible listing card. The export appends to booking-com-hotel-listings-scraper.csv, includes headers, and stores the file in the local folder configured inside the block.
| CSV column | What it captures | Validation check |
|---|---|---|
keyword | The search keyword stored in the workflow definition | Confirm it matches the destination or campaign label. |
hotel_name | The visible property title from each result card | Compare several rows against the browser page. |
hotel_url | The listing detail URL from the title link | Open a few links and dedupe by URL. |
address | Best-effort address, location, distance, or map-adjacent text | Expect blanks when the card does not expose location text. |
rating | Human rating label such as Excellent or Very Good | Check localized labels if the page is not in English. |
reviews | Visible review count | Watch for comma and locale formatting. |
review_score | Numeric score parsed from the review block | Compare against the visible score badge. |
Runbook
How to scrape Booking.com hotel listings to CSV
Import the template
Open Booking.com Listings Scraper, download the workflow JSON, and import it into UScraper.
Create your search URL
Open Booking.com in the browser, set destination, dates, guests, rooms, filters, language, and sort order, then copy the final search-results URL.
Build offset variants
In Navigate, replace the sample URLs with your own sequence. Keep the same query parameters and only advance the pagination offset, for example offset=0, offset=25, and offset=50.
Set the export folder
In Structured Export, confirm booking-com-hotel-listings-scraper.csv, headers, append mode, and a project-specific local save folder.
Run one page, then widen
Run the first offset, compare the CSV with the browser, then run the remaining offsets when hotel names, URLs, ratings, reviews, and scores look correct.
Append mode is useful for pagination, but it can also mix test rows with production rows. Use a dated filename or clear the CSV before reruns when you are testing selector changes.
Validation
Validate the Booking.com CSV export
Open the CSV beside the browser after the first run. Check a few rows from the first offset and a few from the last offset. Sorting by hotel_url is the fastest way to find duplicates from repeated runs or repeated search pages.
| Symptom | Likely cause | Fix |
|---|---|---|
| Zero rows exported | Property cards never rendered or a prompt blocked the page | Handle the prompt, rerun one URL, and keep the visible card wait. |
| Empty hotel names | The row selector found cards but the title selector changed | Inspect one card and update the title selector. |
| Blank address cells | Booking.com did not expose address text in the result card | Treat address as optional or collect detail pages separately. |
| Review count mismatch | Locale-specific text or formatting changed | Update the JavaScript parsing pattern for that language. |
| Duplicate hotels | Offset URLs overlapped or the CSV was appended twice | Dedupe by hotel_url and clear old test rows before reruns. |
For recurring research, save the source URL list, run date, destination, stay dates, guests, filters, language, currency, and any selector edits.
FAQ
Booking.com listings scraper FAQ
Booking.com listing pages may be visible in a browser, but automated access can still be restricted by Booking.com's terms, robots rules, copyright, database rights, privacy law, and local regulations. Review the current terms, avoid bypassing access controls or CAPTCHA, keep runs modest, and get legal review before commercial reuse.
Next step
Download the Booking.com listings scraper template
Download the JSON from Booking.com Listings Scraper, import it into the UScraper local desktop app, and keep this guide open for the first validation pass. For neighboring workflows, browse the UScraper template library or the UScraper blog for more scraping tutorials.

