For AI agents: a documentation index is available at /llms.txt
Skip to main content

Scrape Booking.com Hotel Listings

Pull hotel names, prices, ratings, and locations from Booking.com search results.

Prerequisites

Steps

Booking.com runs aggressive bot detection, including fingerprint checks, CAPTCHAs, and dynamic content that loads differently for automated requests. The examples below navigate directly to a pre-formed search URL and extract hotel listing data. All three tabs route through stealth mode and a residential proxy, which is what makes them work where plain requests don't.

Selector stability

Booking.com updates its markup regularly and may show a currency or location modal on first load. If selectors return empty results, check whether an overlay modal appeared and update the CSS selectors to match the current DOM structure.

Send the BQL mutation over HTTP to the stealth endpoint. No browser library or BQL IDE required.

View Full Code on GitHub

1. Send the request

curl -X POST \
"https://production-sfo.browserless.io/stealth/bql?token=YOUR_API_TOKEN_HERE&proxy=residential&proxyCountry=us" \
-H "Content-Type: application/json" \
-d '{
"query": "mutation ScrapeBooking { goto(url: \"https://www.booking.com/searchresults.html?ss=New+York&checkin=2026-09-01&checkout=2026-09-02&group_adults=2\", waitUntil: networkIdle) { status } hotels: mapSelector(selector: \"[data-testid='\''property-card'\'']\") { name: mapSelector(selector: \"[data-testid='\''title'\'']\") { innerText } price: mapSelector(selector: \"[data-testid='\''price-and-discounted-price'\'']\") { innerText } rating: mapSelector(selector: \"[data-testid='\''review-score'\'']\") { innerText } location: mapSelector(selector: \"[data-testid='\''address'\'']\") { innerText } } }",
"variables": {}
}'

2. Check the output

{
"data": {
"goto": { "status": 200 },
"hotels": [
{
"name": [{ "innerText": "The Manhattan Hotel" }],
"price": [{ "innerText": "$189" }],
"rating": [{ "innerText": "8.5" }],
"location": [{ "innerText": "Midtown Manhattan, New York" }]
},
{
"name": [{ "innerText": "Brooklyn Heights Suites" }],
"price": [{ "innerText": "$142" }],
"rating": [{ "innerText": "7.9" }],
"location": [{ "innerText": "Brooklyn Heights, New York" }]
}
]
}
}

Next steps