Booking.com API · $3.70/1k avatar

Booking.com API · $3.70/1k

Pricing

from $3.70 / 1,000 hotel lookups

Go to Apify Store
Booking.com API · $3.70/1k

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

Matan Rabi

Maintained by Community

Actor stats

0

Bookmarked

11

Total users

2

Monthly active users

16 hours ago

Last modified

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_country prices 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, or il and the request is priced as a visitor from that market. Run the same stay twice and compare.
  • Room-level, not one headline. /hotel returns every available room with type, meal plan, capacity, and price.
  • One shape for sold-out / not-found. available: false plus 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

  • Destination search (/search) — free-text place, dates, adults/children, currency, nightly budget, filters
  • Hotel by name (/hotel_by_name) — free-text name plus dates; optional area when the name is generic
  • Every room in one property (/hotel) — Booking.com path ID such as cy/four-seasons-limassol
  • ID resolve (/resolve) — name in, hotel_booking_id out, 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 link on every property
  • proxy_country as 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.

{
"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 ApifyClient
client = 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

ParameterTypeRequiredDefaultDescription
endpointstringyes/search/search, /hotel_by_name, /hotel, or /resolve
destinationstring/searchParisFree-text place
hotel_namestring/hotel_by_name, /resolveFree-text hotel name
areastringNarrows a generic hotel name to one city or region
hotel_booking_idstring/hotelBooking.com path ID, e.g. cy/four-seasons-limassol
checkin_datestringpriced endpointsYYYY-MM-DD
checkout_datestringpriced endpointsYYYY-MM-DD
adultsinteger2Number of adults
childreninteger0Number of children
currencystringUSDCurrency for all prices
budget_per_nightintegerMax nightly price for /search
filtersstring[][]Any of the 24 Booking.com filters (destination search)
free_cancellationbooleanfalseFor /hotel_by_name and /hotel
proxy_countrystringISO-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

CategoryFilters
Cancellationfree_cancellation
Mealsbreakfast_included, breakfast_and_lunch, breakfast_and_dinner, all_meals_included, all_inclusive
Facilitiesfree_wifi, swimming_pool, gym, parking, front_desk_24h
Review scorereview_score_7, review_score_8, review_score_9
Room facilitiesprivate_bathroom, air_conditioning
Property ratingstars_3, stars_4, stars_5
Travel grouppets_allowed, adults_only
Activitiessauna
Guest reviewsvery_good_breakfast
Paymentaccepts_online_payment

Output format

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 price drops or available flips
  • 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.

Notes

  • Results are live. A named hotel is fast; a broad destination search with several filters takes longer.
  • Dates are YYYY-MM-DD. proxy_country is a two-letter lowercase code (us, de, il).
  • budget_per_night uses the currency you set. 300 with EUR means 300 euro per night.
  • Leaving proxy_country empty 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.

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.

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