Skip to content

Guide

How to get hotel prices by hotel name

Published September 5, 2026

Short answer: POST hotel_by_name on booking-live-api.p.rapidapi.com takes the plain property name plus checkin_date and checkout_date, no property ID and no catalogue sync. It returns a live Booking.com rate and a matched_name field so you can confirm what the name actually resolved to before you trust the price.

Most hotel APIs want an ID. So the first thing you build is not the feature, it is a mapping layer: a property catalogue, a sync job to keep it fresh, and a fuzzy matcher for the day someone types "the Hilton by the airport". That is a week of work standing between you and one price.

You can skip it. The lookup takes the name.

How do you make the request?

curl -X POST "https://booking-live-api.p.rapidapi.com/hotel_by_name" \
  -H "Content-Type: application/json" \
  -H "x-rapidapi-host: booking-live-api.p.rapidapi.com" \
  -H "x-rapidapi-key: $RAPIDAPI_KEY" \
  -d '{
    "hotel_name": "Duplo Charme Boutique Hotel",
    "checkin_date": "2026-11-18",
    "checkout_date": "2026-11-21",
    "adults": 2,
    "currency": "EUR"
  }'

Required: hotel_name, checkin_date, checkout_date. Optional: adults, children, currency, proxy_country, free_cancellation, and area when the name is generic. With area set, the search runs as "name, area" while the name matching still uses only the name you gave.

Two things that bite on the first attempt. The endpoint is POST only, so a GET returns 405. And on the destination search the field is destination, not location, which 400s with a message that says exactly that.

A key comes from the RapidAPI listing, free plan included, and it covers every endpoint on this page.

What does the response contain?

A real answer to the request above, run on 2026-09-04. Rates move, so yours will differ.

{
  "name": "Duplo Charme Boutique Hotel",
  "matched_name": "Duplo Charme Boutique Hotel",
  "available": true,
  "price_string": "€ 206",
  "price": 206,
  "review_score": 8.3,
  "review_count": 3930,
  "room_type": "Standard Double Room",
  "link": "https://www.booking.com/hotel/pt/duplo-charme-boutique.html",
  "nights": 3,
  "adults": 2,
  "children": null
}

matched_name is the whole point of the design. It is the property the text actually resolved to, so you can compare it to what you asked for before you trust the number. If a user types a name that resolves to a different hotel two streets away, you find out in the response instead of in a support ticket.

price is the total for the stay in the currency you asked for, not a nightly rate. nights is there so you can divide. price_string is the same number formatted the way Booking.com shows it, for display only.

What should you handle?

available can be false. Sold out and priced are both normal answers. A false value is not an error and should not go down your error path, but it also must not be stored as a price of zero.

Names are ambiguous and the API says so rather than guessing quietly. Pass area for anything generic. Read matched_name every time. If your product lets users type free text, show them the matched name in the UI.

Rates are live, so they are perishable. Every call hits Booking.com at request time, which is why the number is real. It is also why caching it for a day turns a real price into a wrong one.

One stay per call. This endpoint takes one property and one date pair. There is no date-range expansion here, so pricing a week of check-in dates is a request per date.

If you need every room type in one property rather than the headline rate, that is a different call: see every room rate for one hotel.

Type the name, get the rate

Live Booking.com rates with no property ID and no catalogue to sync, plus matched_name so you can verify the match. Free tier, no card.

Free tier: 10 requests/month. No card to try.