Hotel Search API: How to Find Hotels by Location and Get IDs, Prices, and Ratings

Denis Gramm, StayAPI
By Denis Gramm, StayAPI · · 12 min read

I hope you enjoy reading this blog post. If you want our team to help you with hotel data integration, click here.

Quick summary

This guide maps every hotel search API route: the official partner programs, GDS inventory, and third-party data APIs, with live Booking.com, Google, TripAdvisor, and chain-site examples.

Hotel Search API: How to Find Hotels by Location and Get IDs, Prices, and Ratings — StayAPI

A hotel search API takes a place and a pair of dates and returns a list of hotels: an ID for each one, a name, a location, a rating, and a headline price for the stay.
That list is the starting point of almost every hotel data project, because every other call (rates, reviews, photos) needs a hotel ID first.
The catch is that the official search APIs were built for companies that sell rooms.
Booking.com's search sits inside a partner program, Google's "Hotel APIs" are a feed for hoteliers rather than a search, and the GDS options return distribution inventory instead of what travelers see.
This guide sorts the routes by who can actually use them, then shows the two-step search flow on Booking.com, Google Travel, TripAdvisor, and chain sites, with real responses from this week.

Key Takeaways

  • Search is discovery; it stops at the headline price. A search call returns hotel IDs, coordinates, ratings, and the cheapest rate for the stay. Room-level rates are a second call.
  • Official search APIs are gated by business model. Booking.com's Demand API and Expedia's Rapid API go to approved travel sellers; Google's hotel APIs let hotels push prices to Google and don't search anything.
  • The GDS route works but shows a different inventory. Amadeus's self-service search is free to test, and it returns GDS-contracted rates rather than the prices on consumer sites.
  • Third-party data APIs cover the read side. One key to a hotel data API returns search results from Booking.com, Google Travel, TripAdvisor, and chain sites, each with the ID that unlocks the platform's other endpoints.
  • Most searches are two calls. Resolve the place to a destination ID first, then search it, so "Lisbon" can mean the city, the city center district, or the airport, and you choose.

What a Hotel Search API Actually Returns

What a Hotel Search API Actually Returns — StayAPI

Search endpoints answer one question: which hotels exist here, for these dates, and roughly what do they cost.
The answer comes back as one record per property, and the most valuable field in each record is the ID.
Here's what a single Booking.com search result looked like this week for Lisbon, two nights in October:

Field Example Value What It Means
hotel_id 4045490 The key for the prices, reviews, and details endpoints
name "Maxime Boutique Hotel Avenida da Liberdade" Display name
star_rating 3 Official star class, null for unclassified stays
price.display "US$359" Headline price for the whole stay, before room choice
price.before_discount "US$448" The struck-through price when a deal is active
rating.score / rating.review_count 8.8 / 3625 Guest score on the platform's own scale and its sample size
distance "0.4 miles" Distance from the destination's center point
latitude / longitude 38.718, -9.145 For maps and radius filters on your side

What search doesn't return matters as much.
There's no room breakdown, no cancellation policy, and no review text; those live behind the ID on the rates and reviews endpoints.
Treat the headline price as a sorting signal rather than a quote.
It's the cheapest bookable room for the search parameters, and the room-level call is where the real rate plan detail lives.

The Official Search APIs and Who Gets Them

The Official Search APIs and Who Gets Them — StayAPI

Every major platform exposes a search API to someone.
The question is whether that someone is you.

Route Who Gets Access What Search Returns The Catch
Booking.com Demand API Approved travel sellers and affiliates Live availability across Booking.com's inventory Application reviewed against your distribution business
Expedia Group Rapid API Companies that sell travel, under agreement Shopping across Expedia Group properties Revenue projections, not data projects
Amadeus Self-Service Hotel Search Anyone, online signup GDS-contracted properties and rates Test data in the sandbox; production is pay per call
Google Hotel APIs Hotels and their connectivity partners Nothing; it's a feed for pushing your prices to Google There's no search endpoint for developers
Bed banks (Hotelbeds class) Contracted resellers Wholesale inventory with availability Contract and volume commitments

Two of these deserve a closer look because searchers keep landing on them.
Booking.com's Demand API accommodations endpoints do search, check availability, and even retrieve reviews, and they're excellent if you're building a booking site.
Our Booking.com API guide covers who clears the approval bar; side projects and data teams generally don't.
Amadeus is the one official API for hotel search that anyone can sign up for.
The Self-Service hotel APIs include a hotel list and a hotel search, with free test quotas, and our Amadeus API guide explains the inventory difference: GDS rates aren't the prices on Booking.com or a hotel's own site, so market comparisons built on them drift.
If your job is a booking flow, pick a row above and apply.
If your job is reading what the public sites show, the rest of this guide is the route.

Hotel Search API Example: Booking.com in Two Calls

Hotel Search API Example: Booking.com in Two Calls — StayAPI

Third-party hotel data APIs read the public search pages of each platform and return them as documented endpoints, no partner agreement involved.
StayAPI's Booking.com search works this way, and it's a two-step flow because Booking.com organizes everything by destination ID.
Step one turns a place name into that ID:

curl -X GET "https://api.stayapi.com/v1/booking/destinations/lookup?query=Lisbon" \
  -H "x-api-key: YOUR_API_KEY"
{
  "success": true,
  "query": "Lisbon",
  "normalized_query": "Lisbon, Lisbon Region, Portugal",
  "dest_id": -2167973,
  "dest_type": "CITY",
  "suggestions": [
    { "dest_id": -2167973, "dest_type": "CITY", "label": "Lisbon, Lisbon Region, Portugal" },
    { "dest_id": 989, "dest_type": "DISTRICT", "label": "Lisbon City Centre, Lisbon, Lisbon Region, Portugal" },
    { "dest_id": 101, "dest_type": "AIRPORT", "label": "Humberto Delgado Airport, Lisbon, Lisbon Region, Portugal" }
  ]
}

The suggestions are the point of the extra call.
"Lisbon" resolves to the city by default, but the same query offers the city center district and the airport, and a comp-set search around the airport is a different list than a search across the whole city.
Step two searches the destination for your dates:

curl -X GET "https://api.stayapi.com/v1/booking/search?dest_id=-2167973&dest_type=CITY&checkin=2026-10-06&checkout=2026-10-08&adults=2&rows_per_page=25" \
  -H "x-api-key: YOUR_API_KEY"

The response (truncated to one hotel):

{
  "success": true,
  "data": {
    "hotels": [
      {
        "hotel_id": "4045490",
        "name": "Maxime Boutique Hotel Avenida da Liberdade",
        "star_rating": 3,
        "distance": "0.4 miles",
        "latitude": 38.71833447459589,
        "longitude": -9.145319386577626,
        "price": { "amount": 358.73, "currency": "USD", "display": "US$359", "before_discount": "US$448" },
        "rating": { "score": 8.8, "review_count": 3625, "display": "Excellent" },
        ...
      }
    ],
    "pagination": { "current_page": 1, "per_page": 5, "total_pages": 2, "has_next_page": true }
  }
}

Page through with offset and rows_per_page (up to 100 per page), and cache the destination IDs, since Lisbon's won't change.
Full parameters are in the destinations lookup documentation and the Booking.com search documentation, and the free destination lookup tool runs step one in a browser.
One limit, stated plainly: search results reflect what a signed-out visitor sees for those exact parameters.
Change the guest count or the currency and the headline prices move with them.

Searching Google Travel and TripAdvisor

Searching Google Travel and TripAdvisor — StayAPI

The same StayAPI key covers two more search surfaces, each with its own ID system.
Google Travel search takes a plain query and returns an entity_token per hotel, which is the durable key for Google's prices, photos, and review-summary endpoints:

curl -X GET "https://api.stayapi.com/v1/google_travel/search?query=Lisbon&check_in=2026-10-06&check_out=2026-10-08&limit=10" \
  -H "x-api-key: YOUR_API_KEY"
{
  "success": true,
  "query": "Lisbon",
  "results": [
    {
      "name": "Hyatt Regency Lisbon",
      "entity_token": "ChoI4cjBy-KGurGyARoNL2cvMTFtdnFfdncydhAB",
      "rating": 4.4,
      "review_count": 1052,
      "hotel_class": { "label": "5-star hotel", "stars": 5 },
      "price": { "formatted": "$267", "value": 267.38 },
      ...
    }
  ],
  "has_more": true
}

Google's list is the broadest of the three (vacation rentals and guesthouses appear beside hotels), and the price is Google's lowest partner offer for the stay.
Our Google Hotels API guide explains where those offers come from.
TripAdvisor follows the Booking.com pattern: resolve the place first, then search.
A geo search for "Lisbon" returns geo ID 189158 for the city (and 3874225 for the wider district), and the search call adds a sort order:

curl -X GET "https://api.stayapi.com/v1/tripadvisor/search?geo_id=189158&check_in=2026-10-06&check_out=2026-10-08&adults=2&limit=10&sort=BEST_VALUE" \
  -H "x-api-key: YOUR_API_KEY"
{
  "success": true,
  "geo_id": 189158,
  "hotels": [
    {
      "location_id": 1859127,
      "name": "LX Boutique Hotel",
      "rating": 4.5,
      "review_count": 2256,
      "price": { "minimum": 135, "maximum": 486 },
      "property_type": "HOTEL",
      "neighborhood": "Bairro Alto, Bica & Cais do Sodré",
      ...
    }
  ]
}

The location_id is TripAdvisor's key for reviews and details, the same number our TripAdvisor location ID guide shows how to read off a URL.
Sort options are BEST_VALUE, TRAVELER_RANKED, PRICE_LOW_TO_HIGH, and PRICE_HIGH_TO_LOW, and the price comes back as a range across booking partners rather than one number.
Parameters for both are in the Google Travel search documentation and the TripAdvisor search documentation.

Searching Chain Sites by Coordinates

Searching Chain Sites by Coordinates — StayAPI

Chain websites have their own search, and it's usually a radius around a point rather than a destination ID.
IHG's is the cleanest example: latitude, longitude, radius in miles, and every IHG brand comes back in one schema.

curl -X GET "https://api.stayapi.com/v1/ihg/search?latitude=38.7223&longitude=-9.1393&radius_miles=5&limit=10" \
  -H "x-api-key: YOUR_API_KEY"

Five miles around central Lisbon returned three properties across three brands: Convent Square Lisbon (Vignette Collection, code LISCS), Hotel Indigo Principe Real (LISPD), and the Holiday Inn Express on Avenida da Liberdade (LISAL).
Each record carries a brand object, a rating with its review count, and the hotel code that the rooms endpoint needs.
The other chains vary in shape.
Hilton search takes either a query or coordinates and returns property status alongside metadata: the Waldorf Astoria Admiralty Arch in London came back with open: false and an opening date of 2026-12-01, which is how you catch openings before they hit the OTAs.
Wyndham searches by coordinates with a radius, Accor by coordinates with a live best offer per hotel, and Radisson by place name.
Our IHG API guide walks through the full search-then-rooms flow, and the IHG search documentation lists the parameters.

Which Search Endpoint for Which Job

Your Job Endpoint The Key You Get Back
Market list with OTA prices and guest scores Booking.com destinations lookup, then search hotel_id
Broadest coverage, including rentals Google Travel search entity_token
Traveler-ranked list with price ranges TripAdvisor geo search, then search location_id
Every property of one chain near a point IHG, Hilton, Wyndham, Accor, or Radisson search Chain hotel code
One known hotel across every platform Meta search (name in, platform links out) Platform URLs

The last row is the hotel-matching problem: you already know the hotel and need its ID on each site.
That's a different tool from search, and our hotel mapping guide covers it.
For a one-off list of a few dozen hotels, the free search tools below do the job without code.
The API earns its place when the search runs on a schedule or feeds a database.

Getting Started

  1. Try the free hotel search tool with a city you know. It runs the multi-platform search in a browser and shows the response shape before you write code.
  2. Sign up at stayapi.com. Free tier, no credit card, no partner application.
  3. Run the destination lookup for your markets once and store the IDs.
  4. Run the search calls above with your own dates, and keep the hotel_id, entity_token, or location_id from each result. Those keys drive the rates and reviews endpoints.
  5. Schedule the search and pipe the JSON into your database, Google Sheets, Power BI, or no-code platforms like N8N and Make.com. For market-scale searches across many cities, book a demo call.

FAQ

Is there a free hotel search API?

Free access comes in three shapes: free tiers of commercial data APIs (StayAPI's covers the first requests with no card), the Amadeus test environment (free quotas, test data), and open datasets that don't search live at all.
Our free hotel API guide compares them with the exact catch for each.

What's the difference between a hotel search API and a hotel booking API?

A search API returns a list of hotels with IDs and headline prices for a destination and dates.
A booking API lets you reserve a room, which needs a partner agreement and a payment flow; search results from a data API can't be booked through it.

Can I search hotels by coordinates?

Yes.
Chain endpoints (IHG, Wyndham, Accor) take latitude, longitude, and a radius directly, and OTA searches return coordinates per hotel so you can filter by distance on your side.

How do I get a hotel ID from search results?

Every search result carries the platform's own key: hotel_id on Booking.com, entity_token on Google Travel, location_id on TripAdvisor, and a hotel code on chain sites.
Store it with the result; it's stable, and every other endpoint for that platform takes it as input.

Does Google have a hotel search API?

Google publishes Hotel APIs for hoteliers and their connectivity partners to send prices and content to Google, and they don't expose a search.
Third-party data APIs read Google Travel's public search results instead, returning an entity token per hotel.

Ship in 3 days

Ready to simplify your hotel data?

Join other developers using StayAPI to build the next generation of travel applications. Get started for free today.