Booking.com hotel prices for a whole city and exact dates, without a browser (Python + n8n)
Description and use
Retrieve Booking.com hotel prices for an entire city on specific dates without a browser, using Apify’s API and n8n automation.
Problem
Scraping Booking.com hotel prices for an entire city on specific dates without triggering AWS WAF challenges and without using a headless browser.
Outcome
Obtained structured hotel price data for a city on exact dates without browser overhead, enabling daily price monitoring and comparison.
Workflow
- 1. Prepare Apify token and set environment variable APIFY_TOKEN.
- 2. Construct JSON payload with locationQueries, checkIn, nights, adults, childrenAges, rooms, currency, sortBy, minStars, maxPrice, maxHotelsPerQuery.
- 3. Send POST request to https://api.apify.com/v2/acts/kestrel~booking-prices-scraper/run-sync-get-dataset-items?token=YOUR_TOKEN.
- 4. Receive JSON array of hotel rows with price_total, price_nightly, taxes_included, free_cancellation, breakfast_included, etc.
- 5. Optionally filter or sort results in Python or n8n workflow.
- 6. Schedule the request to run every morning via n8n cron node.
- 7. Store or export the data for analysis or pricing dashboards.
Evidence
Every Booking.com page sits behind AWS WAF. The results page, once loaded, calls a GraphQL operation named FullSearch on Booking's /dml/graphql endpoint, 100 properties per page, and that call is served without the WAF token — on residential IPs.
The Booking.com Scraper on Apify takes destinations as typed into Booking's search box, or property URLs, names and ids, plus a stay (checkIn, nights, adults, childrenAges, rooms, currency), and returns one hotel row per property.
- Record date: 2026-09-10T23:45:29.126Z