Booking.com Hotel Scraper avatar

Booking.com Hotel Scraper

Pricing

from $2.00 / 1,000 results

Go to Apify Store
Booking.com Hotel Scraper

Booking.com Hotel Scraper

Extract hotel data from Booking.com: name, price, rating (0-10), review count, star rating, location, amenities, free cancellation status. Search any destination with check-in/out dates. Multi-currency support. Ideal for travel analytics, price monitoring, hospitality research.

Pricing

from $2.00 / 1,000 results

Rating

0.0

(0)

Developer

cloud9

cloud9

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

2

Monthly active users

2 days ago

Last modified

Share

Extract hotel listings from Booking.com with comprehensive data including prices, ratings, amenities, and location details.

Features

  • Flexible Search: Search by destination name or paste a Booking.com search URL
  • Rich Data Extraction: Name, price, rating, review count, stars, location, amenities, images
  • Pagination Support: Automatically scrapes multiple pages up to your specified limit
  • Rate Limiting: Built-in delays to avoid overwhelming the server
  • Error Handling: Retry logic and graceful error recovery
  • Multiple Selectors: Falls back to JSON-LD data if HTML parsing fails

Input Parameters

FieldTypeRequiredDescription
searchUrlStringNoFull Booking.com search URL (overrides other search fields)
destinationStringNo*City, region, or hotel name (e.g., "Tokyo", "Paris")
checkInStringNoCheck-in date (YYYY-MM-DD format)
checkOutStringNoCheck-out date (YYYY-MM-DD format)
adultsIntegerNoNumber of adults (default: 2)
roomsIntegerNoNumber of rooms (default: 1)
currencyStringNoCurrency code: USD, EUR, GBP, JPY, AUD, CAD (default: USD)
minPriceIntegerNoMinimum price per night
maxPriceIntegerNoMaximum price per night
starsIntegerNoMinimum star rating (1-5)
sortByStringNoSort order: popularity, price, review_score, distance
maxResultsIntegerNoMaximum number of hotels (default: 100)

*Either searchUrl or destination is required

Output Structure

{
"name": "Hotel Name",
"price": 150,
"currency": "USD",
"rating": 8.5,
"reviewScore": 8.5,
"reviewCount": 1234,
"reviewText": "Excellent",
"stars": 4,
"address": "123 Main Street",
"city": "Tokyo",
"country": "Japan",
"distanceFromCenter": "1.2 km from center",
"url": "https://www.booking.com/hotel/...",
"imageUrl": "https://...",
"amenities": ["Free WiFi", "Pool", "Restaurant"],
"freeCancellation": true,
"breakfastIncluded": false,
"checkIn": "2024-03-15",
"checkOut": "2024-03-17"
}

Usage Examples

{
"destination": "Tokyo",
"checkIn": "2024-06-01",
"checkOut": "2024-06-05",
"adults": 2,
"maxResults": 50
}

Advanced Search with Filters

{
"destination": "Paris",
"checkIn": "2024-07-10",
"checkOut": "2024-07-15",
"adults": 2,
"rooms": 1,
"currency": "EUR",
"minPrice": 100,
"maxPrice": 300,
"stars": 4,
"sortBy": "review_score",
"maxResults": 100
}

Using Direct URL

{
"searchUrl": "https://www.booking.com/searchresults.html?ss=London&checkin=2024-08-01&checkout=2024-08-05",
"maxResults": 75
}

Development

Local Testing

# Install dependencies
npm install
# Build TypeScript
npm run build
# Run locally
npm start

Deploy to Apify

# Login to Apify
apify login
# Initialize actor (first time)
apify init
# Push to Apify platform
apify push

Technical Details

Rate Limiting

  • 2-3 second delay between page requests
  • Exponential backoff on retry (2s, 4s, 6s)
  • Random User-Agent rotation to appear as different browsers

Parsing Strategy

  1. Primary: HTML parsing with cheerio using multiple selector strategies
  2. Fallback: JSON-LD structured data extraction
  3. Retry Logic: 3 attempts with exponential backoff

Pagination

  • Booking.com displays ~25 results per page
  • Uses offset parameter for pagination
  • Automatically stops when no more results found

Data Quality

  • Validates required fields (name, URL)
  • Safely extracts numeric values from formatted text
  • Handles missing data gracefully with undefined values

Limitations

  • Booking.com may block excessive requests - respect rate limits
  • Some fields may not be available for all hotels
  • Prices and availability change frequently
  • Requires valid dates for accurate pricing

License

MIT

Support

For issues or questions, please open an issue on the repository.