Booking.com Real-Time Data Scraper avatar

Booking.com Real-Time Data Scraper

Pricing

from $1.00 / 1,000 results

Go to Apify Store
Booking.com Real-Time Data Scraper

Booking.com Real-Time Data Scraper

Get live hotel and accommodation data from Booking.com for any city or country — names, prices, star ratings, review scores, locations and more. Multi-destination runs process in parallel with filters, market breakdown and real-time webhooks. Paid Apify plans; free accounts get a small sample.

Pricing

from $1.00 / 1,000 results

Rating

0.0

(0)

Developer

Emmanuel

Emmanuel

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Categories

Share

Booking Real-Time Data

Turn Booking.com into a clean, structured property and market-intelligence feed. Discover hotels, apartments, villas, guest houses and more across multiple destinations in a single run — with names, links, descriptions, star ratings, guest review scores and counts, nightly "from" prices, coordinates, districts, cities and countries — delivered as clean JSON to your Apify dataset while the run is still going.

Built for travel and hospitality teams, lead-generation agencies, revenue managers, market researchers, real-estate and short-let investors, and AI/LLM workflows that need reliable Booking.com data without maintaining a brittle scraper of their own.

Free plan / paid plan: this Actor is intended for paid Apify plans. Runs on a free Apify account are restricted to a small sample of 2 results per run and log a clear message inviting you to upgrade. Upgrade to a paid plan for full, unlimited data. See Free plan & paid plans.


Why this Actor

Booking Real-Time DataTypical DIY scraper
SetupOrganized input UI, run immediatelyFragile scripts to maintain
SpeedUp to 4 destinations processed in parallelOne destination at a time
Memory512 MB default — records written as they arriveHigh memory, everything held until the end
ReliabilityRetries, session rotation and graceful recovery built inBreaks on the first hiccup
OutputConsistent, LLM-ready JSONInconsistent formats per source
ScaleMany destinations per runUsually one destination at a time
Market dataStars, review scores, review counts, prices, coordinatesRarely normalized
DeliveryDataset + optional real-time webhookManual export
InsightOptional destination/market breakdownNone

What you get

Every record is tagged with featureType (property or destination) and scrapedAt, so you can filter, join and pipeline the data anywhere.

Property records — featureType: "property"

FieldDescription
nameProperty name
propertyIdBooking.com property identifier
url, sourceUrlLink to the property's Booking.com listing
descriptionProperty summary when the destination provides one
imageCover image link
propertyTypeProperty type when shown (e.g. Hotel, Apartment, Villa)
starRatingStar rating as shown
reviewScoreGuest review score (0–10)
reviewCountNumber of guest reviews
priceFrom, priceDisplay, currencyLowest nightly "from" price where shown
addressStreet address when the destination provides one
districtDistrict / neighbourhood / area
city, countryCodeLocation breakdown
latitude, longitudeCoordinates for mapping and geo filters
isPreferredWhether the property is a preferred partner
reviewHighlight{ author, countryCode, score, text } — a recent guest review snippet when shown
searchDestinationThe input destination that produced this record
scrapedAtRecord timestamp

Destination records — featureType: "destination"

Emitted when Include market breakdown is enabled.

FieldDescription
nameDestination name (city, region, landmark or airport)
typecity, region, landmark or airport
countryCodeCountry code
urlDestination link
hotelsCountNumber of properties available in that destination
imageDestination image link
searchDestinationThe input destination that produced this record
scrapedAtRecord timestamp

New records are written to the dataset as they are collected — long runs stay light in memory and you can start consuming results before the run finishes.


Features

🏨 Property Discovery — on by default

Discover properties for any number of destinations in one run. Each row is a destination, and it accepts:

  • a common city name (e.g. Lisbon, Portugal, New York, USA, Bangkok, Thailand),
  • a country name (e.g. Portugal, Spain, Japan, United Arab Emirates), or
  • a full destination link.

Add as many rows as you like. Turning on Include market breakdown also returns the nearby destinations that make up a country or region, with the number of properties in each — ideal for planning where to expand next.

🎯 Filters

Narrow results before they reach your dataset:

  • Minimum star rating — keep only properties at or above a star level.
  • Minimum review score — keep only well-reviewed properties (0–10).
  • Minimum review count — filter out properties without enough social proof.

Perfect for building shortlists of premium or proven properties.

🗺️ Market breakdown

For country-level inputs, get the cities, regions, landmarks and airports that make up the market together with their inventory sizes — a fast way to size a market before you commit to a full scan.

🔔 Real-time webhooks

Every record is always saved to the dataset. Optionally add a webhook URL and each new record is also POSTed in real time to your CRM, Slack, Zapier, Make, n8n or Google Sheets. Choose json (full record) or slack (ready-to-post Slack message).

🌐 Connection

Runs use the built-in Apify residential proxy (US) by default, configurable in the Connection section if you need a different country or your own proxy URLs.


Use cases

  • Hotel lead generation — every property in a market with links, ratings and prices, ready for outreach.
  • Travel agency shortlists — curated lists filtered by star rating and review score.
  • Revenue & pricing research — compare nightly "from" prices across destinations and property types.
  • Market sizing — use the market breakdown to see how many properties exist per city or region.
  • Hospitality SaaS prospecting — find hotels by market for PMS, booking engines, marketing and operations tools.
  • Real-estate & short-let investment — map property density, districts and coordinates for a target area.
  • Competitor set building — assemble a comparable set of properties per destination and compare ratings.
  • Multi-market expansion — one run across dozens of city + country combinations.
  • Reputation benchmarking — track star ratings and review counts across a market.
  • Territory planning — join coordinates to geographic and territory analysis.
  • Data enrichment — start from a destination list and backfill structured property profiles.
  • AI & LLM pipelines — JSON records for RAG, scoring, outreach drafts and market summaries.
  • Warehouse & BI feeds — scheduled runs feeding dashboards and data warehouses.
  • Travel alerts & monitoring — watch a destination on a schedule and see what changes.

Scenario: hotel outreach list for a sales team

  1. Enable Property Discovery with destinations Lisbon, Portugal and Porto, Portugal.
  2. Turn on Filters → minimum star rating 4, minimum review score 8.
  3. Run. Stream the dataset into your CRM, or set a webhook for real-time delivery.

Scenario: country-level market scan

  1. Enable Property Discovery with destination Spain.
  2. Turn on Include market breakdown.
  3. Run. You get properties plus the cities and regions that make up the Spanish market and their inventory sizes.

Scenario: premium shortlist in one city

  1. Destination Dubai, United Arab Emirates.
  2. Filters → star rating 5, review score 9, review count 500.
  3. Run and export straight to Excel.

Output reference

Each dataset row is one record. Filter by featureType:

featureTypeDescription
propertyA property discovered for a destination
destinationA nearby destination and its property inventory size

Traceability: searchDestination records which input destination produced each record; sourceUrl is the property's own listing link.

Export formats: JSON, CSV, Excel, XML, RSS or via the Apify API.


Input reference

Enable only what you need.

InputTypeDefaultDescription
🏨 Property Discovery
enableListingDiscoverybooleantrueDiscover properties by destination
listingTasksobject[]2 example rows{ destination, maxItems? } per destination
minStarRatingnumber—Minimum star rating (0–5)
minReviewScorenumber—Minimum guest review score (0–10)
minReviewCountinteger—Minimum number of guest reviews
includeMarketBreakdownbooleanfalseAlso output nearby destinations with inventory size
⚙️ Output & limits
maxItemsinteger1000Global cap on dataset rows across all destinations
webhookUrlstring—Optional real-time POST URL (dataset is always written)
webhookFormatenumjsonjson (full record) or slack (Slack message)
🌐 Connection
proxyConfigurationobjectresidential USApify proxy settings

Full schema: see .actor/input_schema.json or the Input tab on Apify Console.


Webhook delivery (optional)

Every record is always saved to the Apify dataset first. If you set webhookUrl, each new record is also POSTed in real time to your endpoint — ideal for CRMs, Slack, Zapier, Make or custom pipelines.

SettingDescription
webhookUrlYour endpoint (http/https). Leave empty to use the dataset only.
webhookFormatjson — full property or destination object. slack — compact Slack incoming-webhook message.

Webhook delivery is best-effort: a failed webhook never stops the run or prevents dataset writes.

Example — discovery with Slack alerts

{
"enableListingDiscovery": true,
"listingTasks": [{ "destination": "Lisbon, Portugal", "maxItems": 50 }],
"minStarRating": 4,
"webhookUrl": "https://hooks.slack.com/services/YOUR/WEBHOOK/URL",
"webhookFormat": "slack"
}

Example — lead export with JSON webhook

{
"enableListingDiscovery": true,
"listingTasks": [{ "destination": "Barcelona, Spain", "maxItems": 100 }],
"minReviewScore": 8,
"webhookUrl": "https://your-crm.example.com/api/leads",
"webhookFormat": "json"
}

Quick start examples

Two-city property list

{
"enableListingDiscovery": true,
"listingTasks": [
{ "destination": "Lisbon, Portugal", "maxItems": 100 },
{ "destination": "Porto, Portugal", "maxItems": 100 }
],
"minStarRating": 4,
"minReviewScore": 8
}

Country market scan with breakdown

{
"enableListingDiscovery": true,
"listingTasks": [{ "destination": "Spain", "maxItems": 200 }],
"includeMarketBreakdown": true
}

Premium shortlist

{
"enableListingDiscovery": true,
"listingTasks": [{ "destination": "Dubai, United Arab Emirates", "maxItems": 150 }],
"minStarRating": 5,
"minReviewScore": 9,
"minReviewCount": 500
}

From a destination link

{
"enableListingDiscovery": true,
"listingTasks": [{ "destination": "https://www.booking.com/city/fr/paris.html", "maxItems": 150 }]
}

API quick start

curl -X POST "https://api.apify.com/v2/acts/YOUR_ACTOR_ID/runs?token=YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"enableListingDiscovery": true,
"listingTasks": [
{ "destination": "Lisbon, Portugal", "maxItems": 100 },
{ "destination": "Barcelona, Spain", "maxItems": 100 }
],
"minStarRating": 4
}'

Dataset items: GET https://api.apify.com/v2/datasets/{datasetId}/items?format=json


LLM & MCP integration

Output is JSON Lines–friendly structured data — ideal for ChatGPT, Claude, Gemini, LangChain, LlamaIndex and custom agents.

  1. Run the Actor with the destinations and filters you need.
  2. Fetch dataset items via the Apify API or export JSON/CSV.
  3. Pass records to your LLM with a system prompt, or index them into a vector store.

Example: one property for an LLM prompt

{
"featureType": "property",
"name": "1904 Benfica Hotel FLH Hotels",
"propertyType": "Hotel",
"starRating": 4,
"reviewScore": 9.3,
"reviewCount": 1352,
"priceFrom": 199.7,
"priceDisplay": "$200",
"currency": "USD",
"district": "Santa Maria Maior",
"city": "Lisbon",
"countryCode": "PT",
"latitude": 38.7156444,
"longitude": -9.1402479,
"url": "https://www.booking.com/hotel/pt/1904-benfica-flh-hotels.html",
"searchDestination": "Lisbon, Portugal"
}

Apify MCP (Model Context Protocol)

Use the Apify MCP server so AI assistants can run this Actor from natural language, read its dataset directly in chat, and chain it with other Actors (collect → filter → score → outreach).

User: "Find 4-star-plus hotels in Lisbon with great reviews and summarise them for a sales campaign"
→ MCP runs the Actor with listingTasks=[{destination:"Lisbon, Portugal"}], minStarRating=4, minReviewScore=8
→ MCP reads dataset items
→ LLM summarises each property and drafts outreach

Connection & performance

  • Apify's built-in residential proxy (US) is enabled by default — no extra setup.
  • Parallel processing: up to 4 destinations are processed at the same time, so a multi-destination run takes a fraction of the time of processing them one after another.
  • Default memory is 512 MB, enough headroom for large runs. Increase memory for very large multi-destination jobs.
  • Records are delivered to the dataset as they are collected, so long runs do not accumulate data in memory.
  • Automatic retries with rotating connections and randomized delays keep long runs stable without any tuning.
  • A destination that cannot be loaded is skipped, so one bad destination never stops the run.
  • Collection covers several data sets per destination and adds a little extra time per destination, giving richer records without a heavy memory footprint.

Free plan & paid plans

This Actor is designed for paid Apify plans. Free-plan runs never crash or return a system error — they finish cleanly and explain the limit.

PlanWhat you get
Free planA small sample of up to 2 results per run, plus a clear log message inviting you to upgrade.
Paid plan (Bronze and above)Full, uncapped output with every feature.

The restriction is always stated transparently: the run log shows the limit and the run summary (OUTPUT) reports the paywall state (detected, isPaying, pricingTier, limited, blocked), so the upgrade path is visible without any guesswork.

Owners can tune the free sample with the FREE_TIER_MODE, FREE_TIER_MAX_ITEMS and FREE_TIER_MAX_USERS_PER_ACCOUNT environment variables (see DEVELOPMENT.md). FREE_TIER_MODE=block exports nothing instead of a sample.


Integrations

  • CRMs — push each record to HubSpot, Salesforce, Pipedrive or Airtable via webhook.
  • Automation — Zapier, Make and n8n can trigger runs and consume the dataset or webhook.
  • Slack / Teams — use webhookFormat: "slack" for instant alerts on new finds.
  • Sheets & BI — schedule runs and pull the dataset into Google Sheets, Looker Studio, Power BI or a warehouse.
  • AI agents — run through the Apify MCP server from Claude, ChatGPT or your own agent.

Who it's for

  • Sales & lead-gen teams building targeted hospitality outreach lists.
  • Travel agencies & tour operators assembling and comparing property shortlists.
  • Revenue managers & analysts benchmarking prices and ratings by market.
  • Hospitality SaaS & service providers finding prospects by destination.
  • Real-estate & short-let investors mapping property density and location.
  • Market researchers sizing destinations and tracking reputation signals.
  • Data & AI engineers feeding clean, structured JSON into pipelines and LLMs.

Limitations & compliance

  • Data is limited to what Booking.com publicly displays for each property.
  • Some destinations return fewer properties than your limit, and some fields (for example price or address) are only present when the destination provides them.
  • Prices are the lowest displayed "from" price at the time of the run and change frequently.
  • Not affiliated with, endorsed by, or sponsored by Booking.com. Use responsibly and comply with applicable laws and Booking.com's Terms of Service. Always respect rate limits and local regulations when collecting property data.

FAQ

I got fewer results than maxItems. maxItems is a ceiling. Each destination also has its own maxItems, filters reduce the pool further, and some destinations display fewer properties.

How do I collect an entire country? Set the destination to the country name (e.g. Spain) and enable Include market breakdown to also see its cities and regions with their inventory sizes.

Can I use a destination that isn't a common city? Yes — use its country name, or paste the destination's Booking.com link. Common city names are supported out of the box.

Why are some fields empty on some rows? Different destinations expose different details. Where a value isn't shown, the field is null rather than guessed.

Does the webhook replace the dataset? No. The dataset is always written. The webhook is an additional real-time push.

Can I run this on a schedule? Yes. Create an Apify Schedule with your saved input and results land in a fresh dataset each run.

Will the free plan work for a quick test? Yes — free accounts receive a small sample of 2 results and an upgrade message. Paid plans receive the full output.


Contact & custom work

Need something beyond this Actor? I build custom scrapers, data pipelines, and full-stack web applications for startups and enterprises.

Reach out for:

  • Custom Apify Actors (any website or data source)
  • Travel / hospitality / local lead-gen data projects at scale
  • LLM & MCP integrations with your data stack
  • Web apps, dashboards and automation tools

Booking Real-Time Data · by DrunkCodes