ParseForge Scrapers

Booking.com Hotel Scraper

parseforge/booking-com-scraper

TravelDeveloper toolsAutomation

Scrapes Booking.com hotel listings by destination, search URL, or property type. Returns price, review score, star rating, and other details as flat rows for CSV, JSON, Excel, or XML export.

Run this scraper See the API call
Total users
7
Monthly active
0
Total runs
197
Bookmarked
1
Rating
Not rated yet
Last modified
9 days ago

Overview

ParseForge

Booking.com Hotel Scraper

Scrape Booking.com hotel listings from any destination, search URL, or property type, up to a million per run. Every property comes with its price, review score, star rating, and full details. No login or API key. Export to CSV, JSON, Excel, or XML.

Booking.com's official API is closed to most developers and requires a partnership agreement. This reads the public hotel search pages directly, filtered by star rating, review score, price, and property type, and returns each match in one fixed schema. It works for any destination, from New York to Paris to Tokyo, and handles the site's anti-bot protection with residential proxies.

Who uses it What they scrape Booking.com for
Market researchers Which hotels in a city are trending and at what price point
Travel agencies Build a live inventory of available properties for their clients
Revenue managers Monitor competitor pricing and review scores in their market
Data analysts Collect structured hotel data for dashboards and reports
Affiliate marketers Find top-rated hotels to feature in travel content

What it does

This Actor collects Booking.com hotel listings by destination, search URL, or property type, and returns each one as a flat row with price, review score, star rating, and other details.

  • ๐Ÿจ Destination search: type a city, region, or property name and the Actor resolves it to a Booking.com destination ID automatically.
  • ๐Ÿ”— Direct URL input: paste any Booking.com search results URL to scrape exactly what you see in your browser.
  • ๐Ÿ“… Date and guest controls: set check-in, check-out, adults, children, and rooms to get real-time availability and pricing.
  • ๐ŸŒ Language and currency: request results in any supported language and currency code, like en-us and USD.
  • โญ Quality filters: keep only properties above a minimum star rating or review score.
  • ๐Ÿ’ฐ Price cap: exclude properties above a maximum nightly rate.
  • ๐Ÿ  Property type filter: narrow to hotels, apartments, hostels, villas, and more.
  • ๐Ÿ›ก๏ธ Residential proxies built in: the Actor uses Apify's residential proxy pool to avoid Booking.com's bot detection.

Results export to CSV, JSON, Excel, or XML, or straight from the API.

What you can do with Booking.com data

๐Ÿ“Š Monitor competitor pricing.

A hotel revenue manager runs the Actor daily for their city, filters to 4-star and above, and compares nightly rates against their own property to adjust pricing.

๐Ÿงณ Build a travel inventory.

A travel agency scrapes all apartments in Barcelona for the next three months and imports the results into their booking system to offer clients live options.

๐Ÿ“ˆ Track review scores over time.

A market researcher collects weekly snapshots of top-rated hotels in Tokyo and charts review score trends to identify improving or declining properties.

๐Ÿ† Find top-rated stays for content.

An affiliate marketer scrapes hotels in Bali with a review score above 9.0 and uses the list to write a 'best places to stay' article with accurate prices.

๐Ÿ” Analyze property type supply.

A data analyst scrapes all hostels in Berlin and compares their prices and review scores to hotels to understand budget travel demand.

Why choose this scraper

What you get
No API key or partnership Booking.com's official API is not open to the public. This Actor reads the public search pages directly.
Real-time pricing and availability Every run fetches current prices for your selected dates and guest count.
Structured, flat output Each property is one row with consistent fields, ready for CSV, JSON, Excel, or XML export.
Handles anti-bot protection Residential proxies are preconfigured to avoid blocks and CAPTCHAs.
Scales to a million properties Set a high maxItems and let the Actor paginate through all results.

How it compares

No other Store actor targets Booking.com the same way, so the honest comparison is with the alternatives teams actually weigh.

Booking.com Hotel Scraper Build it in-house By hand
Setup Run it now, zero config Days of engineering None, but hours per pull
When Booking.com changes Maintained for you You fix it You re-learn the page
Proxies, retries, anti-bot Built in Your problem Browser only
Output Fixed JSON schema, CSV/Excel export Whatever you build Copy-paste
Cost Pay per result Engineering time Analyst hours

Configure the run

Drive the Actor from a destination, a direct search URL, or both, and filters run as each property is read so only matches reach your dataset. The Input tab lists every parameter.

A first run with the defaults:

{
  "maxItems": 10,
  "destination": "New York",
  "checkin": "2026-03-15",
  "checkout": "2026-03-17",
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}

A larger pull:

{
  "maxItems": 200,
  "destination": "New York",
  "checkin": "2026-03-15",
  "checkout": "2026-03-17",
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}

Pricing

Pay-per-result: $0.03199 per result collected. You pay only for the results written to your dataset.

Results collected Approximate cost
100 results $3.20
1,000 results $31.99
10,000 results $319.90

New Apify accounts start with $5 in free credit.

Free users

Free-plan runs return up to 10 results as a preview. Upgrade your Apify plan to collect up to 1,000,000 results per run.

Run it

  1. Create a free Apify account with $5 in credit.
  2. Open the Booking.com Hotel Scraper.
  3. Set your inputs and any filters, then click Start.
  4. Export the results as CSV, Excel, JSON, or XML from the Dataset tab.

Run it programmatically through the Apify API (run-sync-get-dataset-items) or the ApifyClient for JavaScript and Python.

Use with AI agents (MCP)

Give an AI agent live access to Booking.com through the Model Context Protocol. Add the Actor to Claude, Cursor, or any MCP client:

claude mcp add --transport http apify "https://mcp.apify.com?tools=parseforge/booking-com-scraper"

Then prompt it in plain language to run the scraper and read back the results.

Troubleshooting

Why am I getting no results?

Check your filters. If minStarRating, minReviewScore, or maxPricePerNight is set too restrictively, no properties may match. Also verify that your destination is spelled correctly and that dates are in the future.

Why am I getting blocked or seeing CAPTCHAs?

Ensure residential proxies are enabled in the Proxy Configuration. The default setting uses Apify's residential pool, which is required for Booking.com. If you changed it, switch back to RESIDENTIAL.

Why are prices different from what I see on the website?

Prices can vary by user location, cookies, and time of day. Make sure your Currency and Language settings match what you see in your browser, and run the Actor at the same time you check manually.

Why does the run stop before reaching maxItems?

Booking.com may limit the number of pages it shows for a search. If you need more properties, try narrowing your destination or using multiple search URLs with different filters.

Why is my destination not resolving?

Use a more specific name, like 'New York City' instead of 'New York', or paste a direct Booking.com search URL into the startUrl field to bypass destination lookup.

FAQ

Question Answer
Do I need a Booking.com API key? No. This Actor reads the public Booking.com search pages directly. You only need an Apify account and enough credits for the run.
Can I scrape a specific hotel by name? Yes. Enter the hotel name in the Destination field, like 'Marriott Times Square', and the Actor will resolve it to the correct property and return its listing.
How do I get prices for specific dates? Set the Check-in Date and Check-out Date fields in YYYY-MM-DD format. The Actor will fetch prices and availability for those exact dates.
Does it work for any country or language? Yes. Use the Language field to request results in a specific language code, like 'de' for German or 'fr' for French, and the Currency field for local prices.
What is the maximum number of properties I can scrape? You can set maxItems up to 1,000,000. The Actor will paginate through search results until it reaches that number or there are no more matches.
Why do I need residential proxies? Booking.com uses AWS WAF and other bot protection. Residential proxies make your requests look like they come from real users, reducing blocks and CAPTCHAs.
Can I filter by review score? Yes. Set minReviewScore to a value like 8.0 to keep only properties rated 'Very Good' or higher.
Can I filter by property type? Yes. Choose from Hotels, Apartments, Hostels, Bed and Breakfasts, Guest Houses, Holiday Homes, Resorts, Villas, Motels, Campsites, and Boats.
What output formats are supported? The Actor returns data in a structured dataset that you can export to CSV, JSON, Excel, or XML from the Apify platform.
How often should I run this Actor? It depends on your use case. For pricing monitoring, daily runs are common. For a one-time research project, a single run may be enough. You can schedule runs in Apify.

Related actors

Browse the full ParseForge collection for more scrapers.

๐Ÿ†˜ Need help? Email parseforge@protonmail.com with your run ID, your input, and what you expected.

โš ๏ธ Disclaimer. This Actor is unofficial and is not affiliated with, endorsed by, or sponsored by Booking.com B.V. It collects only publicly available data. You are responsible for using the collected data in compliance with the source's terms of service and applicable data-protection laws, including GDPR, CCPA, and PIPL. Do not use it to collect personal data unlawfully.

Input

FieldTypeWhat it doesDefault
startUrl string Booking.com search results URL (e.g. https://www.booking.com/searchresults.html?dest_id=-2140479&dest_type=city&...). If provided, destination text is ignored. not set
maxItems integer Maximum number of properties to collect per run. 10
destination string City, region, or property name to search (e.g. 'New York', 'Paris', 'Marriott Times Square'). Used to look up destId automatically. New York
checkin string Check-in date in YYYY-MM-DD format (e.g. 2026-03-15). 2026-03-15
checkout string Check-out date in YYYY-MM-DD format (e.g. 2026-03-17). 2026-03-17
nbAdults integer Number of adult guests. 2
nbChildren integer Number of child guests. 0
nbRooms integer Number of rooms to book. 1
currency string Currency code for prices (e.g. USD, EUR, GBP). USD
language string Language code for results (e.g. en-us, de, fr). en-us
sortBy string (4 options) Sort results by: popularity, price, review_score, or distance. popularity
minStarRating integer Filter to hotels with at least this star rating (1-5). not set
minReviewScore number Filter to hotels with at least this review score (e.g. 7.0 for Good, 8.0 for Very Good, 9.0 for Superb). not set
maxPricePerNight number Maximum price per night in selected currency. not set
propertyType string (11 options) Filter by property type. not set
proxyConfiguration object Proxy settings. Residential proxies are required for Booking.com (AWS WAF protection). {"useApifyProxy":true,"apifyProxyGroups"

Pricing

from $23.99 per 1,000 results

Charged forWhat it isPrice each
Actor Start Charged once when the run starts. $0.005
Result Item Charged once per result collected. $0.02399 to $0.03199

Tiered: the lower figure is the price on a higher Apify plan. Billing and the free credit live on Apify.

API

One POST returns the dataset directly. Same shape for every scraper in the library, so swapping the slug is the only change.

POST ยท run and get results
curl -X POST "https://api.apify.com/v2/acts/parseforge~booking-com-scraper/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "helloWorld": 123
  }'

Examples

Input that runs as-is.

input.json
{
  "helloWorld": 123
}

Reviews

No reviews yet. Be the first.

Issues

We build and maintain this scraper, so a problem with it comes to us. Report it on the Apify listing and the thread stays attached to the scraper where the next person can find it: open an issue.

Broken and urgent, or you would rather not post in public? Write to parseforge@protonmail.com and it reaches the people who wrote it.

Related scrapers

Run Booking.com Hotel Scraper on Apify All scrapers