Booking.com Hotel Scraper avatar

Booking.com Hotel Scraper

Pricing

from $2.87 / 1,000 hotel scrapeds

Go to Apify Store
Booking.com Hotel Scraper

Booking.com Hotel Scraper

Scrape hotel listings from Booking.com including prices, ratings, availability, and cancellation policies. Uses the unprotected GraphQL API — HTTP-only, low memory, fast.

Pricing

from $2.87 / 1,000 hotel scrapeds

Rating

0.0

(0)

Developer

NanoScrape

NanoScrape

Maintained by Community

Actor stats

6

Bookmarked

1.2K

Total users

214

Monthly active users

4 days ago

Last modified

Share

Scrape hotel listings from Booking.com with 34+ structured fields including GPS coordinates, guest review scores, street addresses, discount badges, sold-out signals, high-res photos, and cancellation policies. Search any city, region, or country worldwide.

Export results as JSON, CSV, Excel, or HTML directly from the Apify platform.

How it works

  1. Enter a destination (e.g., "Berlin", "Rome", "Tokyo")
  2. Set check-in and check-out dates
  3. Choose number of guests and rooms
  4. Run the actor — results appear in seconds

The actor calls Booking.com's internal GraphQL API directly. No browser, no cookies, no manual session handling required.

Use cases

  • Travel price comparison and monitoring — track nightly rates across hundreds of hotels for any destination and date range
  • Revenue management and competitive pricing intelligence — monitor competitor pricing, discount patterns, and availability signals
  • Market research for hotel operators and consultants — benchmark star ratings, pricing tiers, and cancellation policies by location
  • Mapping hotel inventories with GPS data — build geo-analytics dashboards, coverage maps, or proximity-based filters using latitude/longitude
  • Lead generation for travel agencies and OTAs — extract hotel contact details and inventory at scale
  • Tracking promotional discount patterns — capture "Getaway Deal", "Limited-time Deal", and "Early Bird" badges as they appear
  • Monitoring availability and sold-out signals — identify high-demand periods by tracking is_sold_out across date windows
  • Building hotel comparison tools and travel apps — structured data with photos, GPS, pricing, and policies ready for direct integration
  • Academic research on travel pricing patterns — large-scale structured dataset for econometric or machine-learning studies
  • Yield analysis and demand forecasting — correlate occupancy signals with price fluctuations over time

Architecture note

HTTP-only (no browser) — uses Booking.com's internal GraphQL API with TLS fingerprinting. Significantly faster and cheaper than browser-based alternatives, with lower memory requirements and no risk of JavaScript rendering failures.

Output

FieldTypeDescription
idnumberBooking.com hotel ID
namestringHotel name
urlstringDirect link to hotel on Booking.com
star_ratingnumber|nullStar rating (1–5)
review_scorenumber|nullGuest review score (0–10, e.g. 8.7)
review_countnumber|nullTotal number of guest reviews
review_score_wordstring|nullScore label (Exceptional / Fabulous / Wonderful / Superb / Very Good / Good / Pleasant / Okay)
secondary_scorenumber|nullSecondary review sub-score (0–10)
room_typestring|nullMatching room/unit type name
meal_plan_textstring|nulle.g. "Breakfast included" when a meal is included
breakfast_includedbooleanWhether the offered rate includes breakfast
is_closedbooleanWhether the hotel is temporarily closed
photo_urlstring|nullMain photo (240px square)
photo_url_high_resstring|nullMain photo (600px square, high-res)
photosstring[]|nullAll photo URLs (when includeAllPhotos=true)
locationstring|nullDistrict + city from search results
districtstring|nullDistrict or neighborhood
citystring|nullCity from destination resolution
property_citystring|nullCity from hotel's own data
property_countrystring|nullCountry from hotel's own data
country_codestring|nullISO country code
addressstring|nullStreet address (e.g. "Kurfürstendamm 12")
latitudenumber|nullGPS latitude
longitudenumber|nullGPS longitude
distance_from_centerstring|nullDistance from city center
pricenumber|nullPrice for the whole booking: all nights and all searched rooms (for rooms > 1 the per-room prices are summed), not per night, in the selected currency
price_totalnumber|nullSame whole-booking price, rounded to 2 decimals
price_per_nightnumber|nullprice_total ÷ nights, rounded to 2 decimals
nightsintegerNumber of nights the price covers (check-out minus check-in)
roomsintegerNumber of rooms the price covers (the rooms input)
price_scopestringbooking when price covers all searched rooms; per_room if Booking returned fewer priced rooms than requested (price is then for one room)
original_pricenumber|nullOriginal price before discount, in the hotel's own currency (can differ from currency)
original_price_staystring|nullPre-discount formatted stay total (e.g. "CHF 259")
currencystring|nullPrice currency code
is_sold_outbooleanWhether sold out for selected dates
discount_badgestring|nullPromotion label ("Getaway Deal", "Limited-time Deal")
discount_badge_idstring|nullInternal badge identifier from Booking.com
free_cancellationbooleanFree cancellation available
free_cancellation_untilstring|nullCancellation deadline date
no_prepaymentbooleanNo prepayment required
room_idstring|nullRoom type identifier
meal_planstring|nullIncluded meal plan
scraped_atstringISO timestamp of when data was scraped

Pricing

EventCost
Start$0.050 per run
Hotel$0.005 per result

100 hotels = $0.55 | 1,000 hotels = $5.05

Input options

FieldDefaultDescription
destination(required)City, region, or country name
checkinTomorrowCheck-in date (YYYY-MM-DD)
checkoutDay after checkinCheck-out date (YYYY-MM-DD)
adults2Number of adult guests
children0Number of child guests
childrenAges[]Age (0-17) of each child. Missing ages default to 10
rooms1Number of rooms
currencyEURPrice currency (ISO 4217)
sortByPOPULARITYSort order (POPULARITY, PRICE, REVIEW_SCORE, DISTANCE)
maxResults100Max hotels to scrape (0 = unlimited)
includeAllPhotosfalseInclude photos[] array with all photo URLs

Use with AI Agents (MCP)

Connect this actor to any MCP-compatible AI client — Claude Desktop, Claude.ai, Cursor, VS Code, LangChain, LlamaIndex, or custom agents.

Apify MCP server URL:

https://mcp.apify.com?tools=santamaria-automations/booking-com-scraper

Example prompts once connected:

"Use booking-com-scraper to find the 20 cheapest hotels in Rome for next weekend. Sort by price and return as a table with name, price per night, GPS coordinates, and cancellation policy."

"Scrape 50 hotels in Amsterdam for July 15–17 and show which ones have a discount badge active."

Clients that support dynamic tool discovery (Claude.ai, VS Code) will receive the full input schema automatically via add-actor.

Examples

Hotels in Berlin

{
"destination": "Berlin",
"checkin": "2026-08-01",
"checkout": "2026-08-03",
"adults": 2,
"currency": "EUR",
"maxResults": 50
}

Cheapest hotels in Rome

{
"destination": "Rome",
"checkin": "2026-09-01",
"checkout": "2026-09-03",
"sortBy": "PRICE",
"maxResults": 100
}

Family trip to Zurich with photos

{
"destination": "Zurich",
"checkin": "2026-10-01",
"checkout": "2026-10-05",
"adults": 2,
"children": 2,
"rooms": 1,
"currency": "CHF",
"maxResults": 50,
"includeAllPhotos": true
}

Hotels sorted by review score in Tokyo

{
"destination": "Tokyo",
"checkin": "2026-11-01",
"checkout": "2026-11-04",
"sortBy": "REVIEW_SCORE",
"currency": "JPY",
"maxResults": 200
}

E-Commerce & Price Comparison

Classifieds

Enrich your data

Changelog

1.2

  • The currency and sortBy inputs are now applied to the results.
  • Default currency is EUR. Previously prices came back in the proxy location's currency.
  • Duplicate hotels across result pages are no longer returned or charged.

1.2.3

  • Clarified that price is the total for the whole booking, not per night. Added price_total, nights and rooms; for rooms > 1, price and original_price now sum all rooms (before, only the first room was returned). For one room all values are unchanged. Searches with children now send child ages (new childrenAges input, default age 10) and no longer fail.

Issues & Feedback

Missing a field or not working as expected? Open an issue and we'll fix it.