Last updated

Search for attractions 3.2 Beta

Learn how to use the /attractions/search endpoint to find and retrieve attractions that match travellers’ preferences, locations, and date ranges.


→ Use the /attractions/search endpoint to retrieve a list of attractions available within a given location or set of filters.

This endpoint returns real-time availability and up-to-date prices for our travel experiences inventory.

If you choose to cache our attractions inventory (/attractions/details), use the /attractions/search endpoint to retrieve live availability and the latest prices before displaying them to your travellers. See the Cache static data guide for more details.

How it works

The request defines search parameters to find attractions. The response returns a list of matching attractions and metadata about the search results.

Example use case:

Retrieve attractions in the Netherlands and Belgium available between 18–20 September 2026, filtered by minimum review score and supported languages.

{
  "currency": "EUR",
  "countries": ["nl", "be"],
  "dates": {
    "start_date": "2026-09-18",
    "end_date": "2026-09-20"
  },
  "filters": {
    "rating": {
      "minimum_review_score": 4.2,
      "minimum_review_count": 100
    },
    "supported_languages": ["en", "es", "fr", "de"]
  },
  "rows": 50,
  "sort": {
    "by": "most_popular"
  }
}

Search inputs

FieldRequiredFormatDescription
currencystringYesISO 4217 code (e.g. EUR)
start_datestringYesYYYY-MM-DD
end_datestringYesYYYY-MM-DD
citiesarray of integers NoMax 5 items
countriesarray of stringsNoISO 3166-1 alpha-2, max 3 items
coordinatesobjectNolatitude, longitude (optional radius in km)
Filters:
rating.minimum_review_score numberNo0–5
rating.minimum_review_countintegerNo≥0
supported_languagesarray of stringsNoIETF BCP 47 tags
Pagination/sorting:
rowsintegerNo10–100, multiple of 10, default 20
pagestringNoPagination token
sort.bystringNohighest_review_score

highest_weighted_review_score

lowest_price_first

most_popular

nearest_location

trending

  • Only one of cities, countries, or coordinates should be used per request.
  • start_date must be ≤ end_date.
  • Maximum number of items: 5 cities, 3 countries.

Example - Filters

Filters help tailor results to traveller preferences and quality indicators.

"filters": {
  "rating": {
    "minimum_review_score": 4.0,
    "minimum_review_count": 50
  },
  "supported_languages": ["en", "de"]
}

Example - Pagination and sorting

"rows": 50,
"sort": {
  "by": "lowest_price_first"
},
"page": "eyJhbGciOiJIUzI1NiJ9..."

See the pagination guide for more details.

Response

The response contains a list of matching attractions and metadata about the search:

{
  "request_id": "01fr9ez700exycb98w90w5r9sh",
  "data": [
    {
      "id": "PRTcWzDlwXjP",
      "badges": ["best_seller"],
      "categories": ["museums_arts_culture"],
      "duration": "PT2H",
      "photos": [
        {"url": "https://cf.bstatic.com/xdata/images/xphoto/500x375/170335205.jpg"}
      ],
      "locations": [
        {
          "address": "Museumstraat 1",
          "city": 2140479,
          "coordinates": {"latitude": 52.360043, "longitude": 4.885177},
          "country": "nl",
          "post_code": "1071 XX",
          "type": "attraction"
        }
      ],
      "long_description": "Discover Dutch art and history at the Rijksmuseum...",
      "name": "Rijksmuseum Admission",
      "ratings": {"number_of_reviews": 3250, "score": 4.8},
      "supported_languages": ["en-gb", "nl"],
      "url": {"web": "https://www.booking.com/attractions/nl/pr0dwcibnsiu-rijksmuseum-admission.html"}
    }
  ],
  "metadata": {"next_page": "eyJhbGciOiJIUzI1NiJ9...", "total_results": 128}
}

When no data is returned

If the search returns no attractions:

  • Check if the date range or location has no available products.
  • Review filters — overly strict rating or language filters can exclude all results.
  • Verify that city and country IDs are valid and supported.

If you still receive empty results, try broadening the search criteria or temporarily removing filters.


Best practices

✅ Optimise for performance:

  • Limit rows to 20–50 for faster responses.
  • Use pagination tokens instead of fetching all data at once.

✅ Deliver relevant results:

  • Combine geographic (coordinates) and qualitative (rating) filters.
  • Use sort.by based on your traveller experience (e.g. most_popular for discovery, lowest_price_first for value).

✅ Maintain consistency:

Important note on product coverage

Not all attractions or experiences visible on the Booking.com website are available via the Demand API. This is by design, the API is intended to deliver a consistent and integrator-friendly subset of experiences optimised for connected trip solutions.


Curious to know more?