Booking.com API · $3.70/1k
Pricing
from $3.70 / 1,000 hotel lookups
Booking.com API · $3.70/1k
Booking.com API for live hotel rates as JSON. Search a destination, look a hotel up by name (hotel_by_name), or list every room. proxy_country prices the same stay as a visitor from that market. For travel apps, rate-parity checks, price alerts, and AI agents.
Pricing
from $3.70 / 1,000 hotel lookups
Rating
0.0
(0)
Developer
Matan Rabi
Maintained by CommunityActor stats
0
Bookmarked
11
Total users
2
Monthly active users
16 hours ago
Last modified
Categories
Share
Booking.com API
Live Booking.com hotel rates and availability as JSON. Look a hotel up by name (
hotel_by_name), search a destination, or list every room in a property.proxy_countryprices the same stay as a visitor from that market.
This Actor is the Apify Store door for FlightPowers. The same live backend is also billed as an HTTP API on RapidAPI and as a hosted MCP server. Pick the door that matches your stack; the payload is the same.
Same product, three doors
- This Actor (pay-per-event on Apify)
- RapidAPI listing of the same backend
- Hosted MCP:
https://hotels.flightpowers.com/mcp
Why this Booking.com API
Booking.com does not ship a public hotel-rates API for general use. The official Partner / Demand APIs require an approved OTA contract. What you need instead is the guest-facing rate, as JSON, without hunting for a property ID.
- hotel_by_name. Pass the name a person would type. Name resolution is built in. No property-ID scavenger hunt for a one-off check.
- proxy_country. Booking.com quotes different rates by point of sale. Set
de,us, oriland the request is priced as a visitor from that market. Run the same stay twice and compare. - Room-level, not one headline.
/hotelreturns every available room with type, meal plan, capacity, and price. - One shape for sold-out / not-found.
available: falseplus nulls. Your parser does not branch on an error format. - 24 real Booking.com filters on destination search (meals, facilities, review thresholds, stars, cancellation, payment).
Features
Search
- Destination search (
/search) — free-text place, dates, adults/children, currency, nightly budget, filters - Hotel by name (
/hotel_by_name) — free-text name plus dates; optionalareawhen the name is generic - Every room in one property (
/hotel) — Booking.com path ID such ascy/four-seasons-limassol - ID resolve (
/resolve) — name in,hotel_booking_idout, so later checks skip name matching
Result quality
- Flat JSON for search and by-name rows (name, numeric price, review score, image, booking link)
- Direct Booking.com
linkon every property proxy_countryas a two-letter ISO code; empty is the global pool, not a market pin- Live rates — nothing is served from a cache
Usage examples
Dates below are in late 2026 so a Console try-run still has inventory. Swap them for your own.
Example 1 — Paris destination search
{"endpoint": "/search","destination": "Paris","checkin_date": "2026-12-01","checkout_date": "2026-12-05","adults": 2,"currency": "EUR","budget_per_night": 300,"filters": ["free_cancellation", "review_score_8"]}
Example 2 — hotel by name
{"endpoint": "/hotel_by_name","hotel_name": "Ritz Paris","checkin_date": "2026-12-01","checkout_date": "2026-12-05","currency": "EUR"}
Example 3 — rate parity via proxy_country
Run the same body more than once, changing only proxy_country (us, de, il).
{"endpoint": "/hotel_by_name","hotel_name": "Ritz Paris","checkin_date": "2026-12-01","checkout_date": "2026-12-05","currency": "EUR","proxy_country": "de"}
Example 4 — every room in one property
{"endpoint": "/hotel","hotel_booking_id": "cy/four-seasons-limassol","checkin_date": "2026-12-01","checkout_date": "2026-12-05","adults": 2,"free_cancellation": true}
Python
from apify_client import ApifyClientclient = ApifyClient("<YOUR_APIFY_TOKEN>")run = client.actor("mtnrabi/booking-real-time-api").call(run_input={"endpoint": "/search","destination": "Paris","checkin_date": "2026-12-01","checkout_date": "2026-12-05","adults": 2,"currency": "EUR",})for hotel in client.dataset(run["defaultDatasetId"]).list_items().items:print(hotel.get("name"), hotel.get("price_string"), hotel.get("review_score"), hotel.get("link"))
JavaScript
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });const run = await client.actor('mtnrabi/booking-real-time-api').call({endpoint: '/hotel_by_name',hotel_name: 'Ritz Paris',checkin_date: '2026-12-01',checkout_date: '2026-12-05',currency: 'EUR',});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items[0]);
REST
curl -X POST "https://api.apify.com/v2/acts/mtnrabi~booking-real-time-api/run-sync-get-dataset-items" \-H "Content-Type: application/json" \-H "Authorization: Bearer $APIFY_TOKEN" \-d '{"endpoint": "/search","destination": "Paris","checkin_date": "2026-12-01","checkout_date": "2026-12-05","adults": 2,"currency": "EUR"}'
Input parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
endpoint | string | yes | /search | /search, /hotel_by_name, /hotel, or /resolve |
destination | string | /search | Paris | Free-text place |
hotel_name | string | /hotel_by_name, /resolve | Free-text hotel name | |
area | string | Narrows a generic hotel name to one city or region | ||
hotel_booking_id | string | /hotel | Booking.com path ID, e.g. cy/four-seasons-limassol | |
checkin_date | string | priced endpoints | YYYY-MM-DD | |
checkout_date | string | priced endpoints | YYYY-MM-DD | |
adults | integer | 2 | Number of adults | |
children | integer | 0 | Number of children | |
currency | string | USD | Currency for all prices | |
budget_per_night | integer | Max nightly price for /search | ||
filters | string[] | [] | Any of the 24 Booking.com filters (destination search) | |
free_cancellation | boolean | false | For /hotel_by_name and /hotel | |
proxy_country | string | ISO-2. Empty is not a market pin |
/search needs a destination and dates. /hotel_by_name needs a name and dates. /hotel needs an ID and dates. /resolve needs only a name.
The 24 filters
| Category | Filters |
|---|---|
| Cancellation | free_cancellation |
| Meals | breakfast_included, breakfast_and_lunch, breakfast_and_dinner, all_meals_included, all_inclusive |
| Facilities | free_wifi, swimming_pool, gym, parking, front_desk_24h |
| Review score | review_score_7, review_score_8, review_score_9 |
| Room facilities | private_bathroom, air_conditioning |
| Property rating | stars_3, stars_4, stars_5 |
| Travel group | pets_allowed, adults_only |
| Activities | sauna |
| Guest reviews | very_good_breakfast |
| Payment | accepts_online_payment |
Output format
Destination search
One dataset row per property.
{"name": "Kremlin Palace","price_string": "US$2,434","price": 2434,"review_score": 8.4,"review_count": 701,"room_type": "Superior Double or Twin Room","location": "2.9 km from downtown","image_url": "https://cf.bstatic.com/xdata/images/hotel/square240/501059778.webp?k=...","link": "https://www.booking.com/hotel/tr/kremlin-palace.html?..."}
One hotel by name
Same fields plus available, nights, adults, children. Sold out or not found returns this shape with "available": false and nulls.
Every room in one property
{"hotel_booking_id": "it/boffenigoboutiquegarda","checkin_date": "2026-05-01","checkout_date": "2026-05-10","booking_url": "https://www.booking.com/hotel/it/boffenigoboutiquegarda.html?...","rooms": [{"room_type": "Classic Double Room","room_economy": "Exceptional breakfast included","guests": 2,"price_as_number": 2511,"price": "€ 2,511"}]}
Hotel ID lookup
{"hotel_name": "Kremlin Palace Antalya","hotel_booking_id": "tr/kremlin-palace","matched_name": "Kremlin Palace"}
Cache that ID and call /hotel on every later check.
Use cases
- Rate-parity monitoring: same room, same dates, different
proxy_country - Competitive-set tracking for revenue managers
- Hotel price alerts when
pricedrops oravailableflips - AI travel agents that need a rate and a booking link in one hop
- Metasearch pages that cannot reconstruct a Booking.com URL
- Destination sweeps across a date range for demand charts
Integrations
Schedules. Save the input as a Task and run it on a cron. Each run appends a dataset.
Webhooks. On ACTOR.RUN.SUCCEEDED, fetch the dataset.
Automation. Use Apify connectors in n8n, Make, or Zapier.
Clients. Use apify-client for Python or JavaScript.
MCP and AI agents
Hosted FlightPowers MCP:
https://hotels.flightpowers.com/mcp
This Actor via Apify MCP:
https://mcp.apify.com/?tools=actors,docs,mtnrabi/booking-real-time-api
Also available as a hosted HTTP API
The same backend is optional on RapidAPI and on the product playground. This Actor does not require those doors.
- Product: https://flightpowers.com
- RapidAPI listing: https://rapidapi.com/mtnrabi/api/booking-live-api
Notes
- Results are live. A named hotel is fast; a broad destination search with several filters takes longer.
- Dates are
YYYY-MM-DD.proxy_countryis a two-letter lowercase code (us,de,il). budget_per_nightuses the currency you set.300withEURmeans 300 euro per night.- Leaving
proxy_countryempty is not the same as setting one. Empty uses the global residential pool. Setting a country pins the request to that market.
Frequently asked questions
Is there a Booking.com API?
There is no public Booking.com API you can get a key for as a general developer. The official Partner / Demand APIs require an approved OTA (online travel agency) contract and are aimed at resellers, not at anyone who just needs the guest-facing rate. This Actor reads the public site and returns live public rates as JSON — destination search, hotel_by_name, room lists, and proxy_country geo-pricing. It is not Booking.com's Partner API and it does not book, hold, or ticket.
Does Booking.com have a public API I can get a key for?
No. Use this Actor on Apify (pay-per-event, one hotel_search per run) or the RapidAPI listing of the same backend.
How do I check a hotel by name?
Set endpoint to /hotel_by_name and pass hotel_name plus dates. Add area when the name is generic. For repeated checks, /resolve once, cache hotel_booking_id, then call /hotel.
How do I compare prices by country?
Set proxy_country and run the same body more than once (us, de, il, …). Differences are real point-of-sale quotes.
Why available: false?
Sold out for those dates, or the name did not match. Same shape on purpose. Widen dates or add area.
How much does one search cost?
Pay-per-event. The primary event is one hotel_search per run, plus a small Actor-start fee. The Store pricing tab is authoritative.
Can Claude or Cursor call this as MCP?
Yes. Point an MCP client at https://hotels.flightpowers.com/mcp, or at the Apify MCP URL above to run this Actor.
Featured tasks
One-click clones on this Actor (created 2026-09-01):
- Paris hotels (Dec 2026 dates)
- Ritz Paris by hotel_by_name
- Ritz Paris rates from Germany (
proxy_country)
After you clone a task, save it and put it on a schedule if you want a rate history.
Related
- Google Flights API (verdict + X-Search-Status): https://apify.com/mtnrabi/google-flights-real-time-api
- Product: https://flightpowers.com
- RapidAPI: https://rapidapi.com/mtnrabi/api/booking-live-api
- Hosted MCP: https://hotels.flightpowers.com/mcp
Using this Actor? A rating helps other developers find it. Found a bug or need a field? Open an issue with the input you used and the output you got.
Last Updated: 2026.09.01