DRAFT tutorial. Not indexed by search engines. Not yet listed on the tutorials hub. Review + iterate in the Claude Code session, then merge the "Publish tutorial" PR to make it public.

How to Scrape Booking.com: Hotels, Prices, and Availability

Pull hotel listings from any Booking.com city search -- prices, star ratings, guest scores, GPS coordinates, cancellation policies, and discount badges -- without a browser or session cookies. The actor calls Booking.com's internal API directly, so runs complete in seconds. About $0.003 per hotel on the free tier.

Apify dataset table showing scraped Booking.com hotels with columns for name, star rating, review score, price per night, location, and free cancellation status
One row per hotel. Price, rating, GPS, address, and cancellation policy all in a single dataset.
Difficulty: Beginner
Time: 5 minutes
Cost: $0.003 per hotel (free tier includes $5/month credit)
Tools: Apify
Try the Booking.com Scraper free Browse all NanoScrape actors

In this tutorial

  1. What data you get
  2. Prerequisites
  3. Step 1: Open the actor
  4. Step 2: Set destination and dates
  5. Step 3: Run and watch the results
  6. Step 4: Export your results
  7. Pricing
  8. Common use cases
  9. Automate with n8n
  10. FAQ

What data you get

Each hotel result contains 19+ structured fields. Here is a sample record from a Paris search:

{
  "name": "Mercure Tour Eiffel Grenelle",
  "url": "https://www.booking.com/hotel/fr/mercure-paris-tour-eiffel-grenelle.html",
  "star_rating": 4,
  "review_score": 8.2,
  "review_count": 1099,
  "review_score_word": "Wonderful",
  "price": 516.56,
  "price_per_night": 258.28,
  "currency": "USD",
  "original_price": 603.00,
  "discount_badge": "Limited-time Deal",
  "free_cancellation": true,
  "free_cancellation_until": "2026-08-20",
  "is_sold_out": false,
  "address": "64, Boulevard de Grenelle",
  "latitude": 48.8503,
  "longitude": 2.2912,
  "distance_from_center": "1.2 miles from downtown",
  "meal_plan": 0
}

Available fields

Price tracking tip: Run the same search weekly and store results in a spreadsheet. The original_price and discount_badge fields let you spot when a hotel's rate drops and whether it's a genuine deal or just marketing.

Prerequisites

STEP 1

Open the actor

  1. Go to the Booking.com Hotel Scraper on Apify.
  2. Click Try for free and sign in with Google or email. No credit card required.
  3. You land on the Input tab, ready to configure your search.
Apify Console showing the Booking.com Hotel Scraper actor page with the Information tab active, displaying the actor description, pricing, and Try for free button
The actor page on Apify. Click Try for free to open the input form.
STEP 2

Set destination and dates

The form has a handful of inputs. Most have sensible defaults -- the only required field is Destination.

For programmatic access, switch to the JSON editor and paste an input object directly:

{
  "destination": "Barcelona",
  "checkin": "2026-09-12",
  "checkout": "2026-09-15",
  "adults": 2,
  "currency": "EUR",
  "sortBy": "PRICE",
  "maxResults": 50
}
Apify Console showing the Booking.com Hotel Scraper input form with destination set to Barcelona, check-in and check-out dates filled in, and maxResults set to 50
Input form with a Barcelona weekend search configured. Switch to JSON editor for batch or automated runs.
STEP 3

Run and watch the results

Click Start at the top right. Results appear in the Results tab within seconds as the actor pages through the search. A run returning 100 hotels typically completes in under 30 seconds.

How it works: The actor uses Booking.com's internal GraphQL API with TLS fingerprinting -- no browser, no cookies, no Selenium. This makes it significantly faster and cheaper than browser-based alternatives, and avoids JavaScript rendering failures.
Apify Console run log for the Booking.com Hotel Scraper showing successful page fetches and hotel count incrementing in real time
Live log during a run. Hotel count climbs quickly as pages are fetched from Booking.com's GraphQL endpoint.
STEP 4

Export your results

From the Results tab, click Export to download in JSON, CSV, Excel, or HTML. For automated pipelines, use the Apify API or connect to Google Sheets, Airtable, or a webhook via the Integrations panel.

# Download results as JSON via API
curl "https://api.apify.com/v2/datasets/{DATASET_ID}/items?format=json&token={YOUR_API_TOKEN}" \
  --output hotels.json
Google Sheets integration: In the Integrations panel, click Google Sheets and connect your account. After each run, results append automatically to a sheet you choose -- useful for building a price-tracking dashboard without writing any code.

Pricing

The actor uses pay-per-result billing with no monthly fee and no minimum spend.

The free Apify account includes $5 of credit every month, which covers roughly 1,600 hotel results at no charge. Paid plans get volume discounts -- the cost drops to $0.00287 per hotel on the Gold tier and above.

Common use cases

Hotel price comparison and tracking

Run the same destination and date range on a schedule and store results by timestamp. The price_per_night, original_price, and discount_badge fields give you everything needed to spot price drops and compare deals across properties over time.

Competitive pricing intelligence for hotel operators

Extract all hotels in your city sorted by REVIEW_SCORE or PRICE. Filter by star_rating to benchmark only direct competitors. The review_score_word and review_count fields help you understand where you stand relative to the market.

Travel research and geo-mapping

Every result includes latitude, longitude, and distance_from_center. Feed these into a mapping tool like Kepler.gl or Google Maps to visualize hotel density, price gradients by neighborhood, or proximity to a venue.

Availability monitoring

The is_sold_out field tracks when specific hotels sell out for a given date window. Run nightly for a high-demand period (a conference, a public holiday) and you can identify demand peaks and the hotels that fill up first.

Automate with n8n

To track hotel prices on a schedule -- for example, every Monday morning for the following weekend -- connect the actor to n8n using the Apify node.

  1. In n8n, add a Schedule trigger set to weekly.
  2. Add an Apify node, select Run Actor, and enter santamaria-automations/booking-com-scraper as the actor ID.
  3. Set the input JSON with your destination and date range.
  4. Add a Google Sheets or Airtable node to append each week's results to a tracking spreadsheet.
  5. Optionally add an If node to send an email or Slack notification when price_per_night drops below a threshold.
n8n's Apify node handles polling automatically -- it starts the actor run and waits for completion before passing results to the next node. No custom API calls needed.

FAQ

Do I need a Booking.com account or API key?

No. The actor uses Booking.com's internal GraphQL API without authentication. No account, no API key, and no session cookies are required.

How accurate are the prices?

Prices reflect what Booking.com shows at the moment of the run for the exact dates and guest configuration you entered. They include taxes and fees when Booking.com displays them that way. For the most accurate prices, match the currency and guest count of your actual search.

Can I scrape hotel reviews?

Not yet. The current actor returns the aggregate review score and review count per hotel, but not individual review text. If you need review-level data, check the NanoScrape actor catalog for future additions.

How many hotels can I scrape at once?

Set maxResults to 0 to scrape all hotels Booking.com returns for that search (typically up to a few thousand per city). For very large cities like Paris or New York, Booking.com caps its own search results at around 2,000 per query regardless of your setting.

Can I track prices for a specific hotel over time?

Yes. Run the same city search on a schedule and filter results by hotel name or Booking.com hotel ID. Alternatively, sort by PRICE and export to a spreadsheet each time -- the ID field is stable, so you can VLOOKUP or join across runs.

What does the free Apify tier cover?

The free tier includes $5 of compute credit per month. At $0.003 per hotel, that covers around 1,600 hotel results before any charges apply. Most single-destination searches (100 to 500 hotels) fit comfortably within the free tier.

Is the actor blocked by Booking.com?

The actor uses TLS fingerprinting to mimic a browser's network profile and calls Booking.com's internal GraphQL endpoint rather than scraping rendered HTML. This approach has proven reliable. If you see a FAILED run, check the log -- the most common cause is an invalid destination string or a date in the past.

Related resources

Try the Booking.com Scraper free Browse all NanoScrape actors