Search Destinations
curl --request GET \
--url https://scrapebadger.com/v1/booking/destinationsimport requests
url = "https://scrapebadger.com/v1/booking/destinations"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://scrapebadger.com/v1/booking/destinations', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://scrapebadger.com/v1/booking/destinations",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://scrapebadger.com/v1/booking/destinations"
req, _ := http.NewRequest("GET", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://scrapebadger.com/v1/booking/destinations")
.asString();require 'uri'
require 'net/http'
url = URI("https://scrapebadger.com/v1/booking/destinations")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_body{
"query": "<string>",
"count": 123,
"destinations": [
{
"dest_id": "<string>",
"dest_type": "<string>",
"name": "<string>",
"label": "<string>",
"city": "<string>",
"region": "<string>",
"country": "<string>",
"country_code": "<string>",
"property_count": 123,
"hotel_count": 123,
"home_count": 123,
"latitude": 123,
"longitude": 123,
"image_url": "<string>"
}
]
}Search
Search Destinations
Resolve free text to Booking.com destination ids — cities, districts, airports, landmarks and regions, with GPS and country.
GET
/
v1
/
booking
/
destinations
Search Destinations
curl --request GET \
--url https://scrapebadger.com/v1/booking/destinationsimport requests
url = "https://scrapebadger.com/v1/booking/destinations"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://scrapebadger.com/v1/booking/destinations', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://scrapebadger.com/v1/booking/destinations",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://scrapebadger.com/v1/booking/destinations"
req, _ := http.NewRequest("GET", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://scrapebadger.com/v1/booking/destinations")
.asString();require 'uri'
require 'net/http'
url = URI("https://scrapebadger.com/v1/booking/destinations")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_body{
"query": "<string>",
"count": 123,
"destinations": [
{
"dest_id": "<string>",
"dest_type": "<string>",
"name": "<string>",
"label": "<string>",
"city": "<string>",
"region": "<string>",
"country": "<string>",
"country_code": "<string>",
"property_count": 123,
"hotel_count": 123,
"home_count": 123,
"latitude": 123,
"longitude": 123,
"image_url": "<string>"
}
]
}Turn free text into exact Booking destinations. Works on prefixes, so
amsterd already resolves. Each result carries a dest_id and dest_type
pair you can pass to /search to
target an exact area instead of relying on free-text geocoding.
Query Parameters
string
required
Free-text destination, including prefixes — e.g.
amsterd, Rome,
Charles de Gaulle.integer
default:"8"
Destinations to return. Maximum
20.string
default:"en-us"
Locale for names and labels, e.g.
fr, de.Response
string
Echo of the requested text.
integer
Destinations returned.
Destination[]
Matching destinations, best match first.
Show Destination
Show Destination
string
One of
CITY, DISTRICT, AIRPORT, LANDMARK, REGION.string
Destination name, e.g.
Amsterdam.string
Full label, e.g.
Amsterdam, Noord-Holland, Netherlands.string
Parent city, or
null.string
Region or province, or
null.string
Country name.
string
ISO country code, e.g.
nl.integer
Total bookable properties in this destination —
hotel_count + home_count.
This is Booking’s own inventory count and is the right number to size a crawl
against; total_results on /search is an estimate and moves between
identical calls.integer
Hotels, hostels, guesthouses and similar in this destination.
integer
Apartments, villas and other entire-home listings in this destination.
number
number
string
Destination photo URL, or
null.The two-step workflow: resolve here once, cache the
dest_id + dest_type,
then pass both to /search on every
subsequent query. That pins the search to exactly the city, district or
airport you meant — free-text location re-geocodes each time and can drift
to a same-named place in another country.Example
const res = await fetch(
"https://scrapebadger.com/v1/booking/destinations?" +
new URLSearchParams({ query: "amsterd", limit: "5" }),
{ headers: { "X-API-Key": process.env.SCRAPEBADGER_API_KEY } },
);
const { destinations } = await res.json();
const city = destinations.find((d) => d.dest_type === "CITY");
import requests
res = requests.get(
"https://scrapebadger.com/v1/booking/destinations",
headers={"X-API-Key": "YOUR_API_KEY"},
params={"query": "amsterd", "limit": 5},
)
destinations = res.json()["destinations"]
city = next(d for d in destinations if d["dest_type"] == "CITY")
curl "https://scrapebadger.com/v1/booking/destinations?query=amsterd&limit=5" \
-H "X-API-Key: YOUR_API_KEY"
Response
{
"query": "amsterd",
"count": 3,
"destinations": [
{
"dest_id": "-2140479",
"dest_type": "CITY",
"name": "Amsterdam",
"label": "Amsterdam, Noord-Holland, Netherlands",
"city": "Amsterdam",
"region": "Noord-Holland",
"country": "Netherlands",
"country_code": "nl",
"latitude": 52.3731,
"longitude": 4.8922,
"image_url": "https://cf.bstatic.com/xdata/images/city/600x600/688884-amsterdam.jpg"
},
{
"dest_id": "-2140558",
"dest_type": "AIRPORT",
"name": "Amsterdam Schiphol Airport",
"label": "Amsterdam Schiphol Airport, Netherlands",
"city": "Haarlemmermeer",
"region": "Noord-Holland",
"country": "Netherlands",
"country_code": "nl",
"latitude": 52.3105,
"longitude": 4.7683,
"image_url": null
},
{
"dest_id": "1926",
"dest_type": "DISTRICT",
"name": "Amsterdam City Centre",
"label": "Amsterdam City Centre, Amsterdam, Netherlands",
"city": "Amsterdam",
"region": "Noord-Holland",
"country": "Netherlands",
"country_code": "nl",
"latitude": 52.3728,
"longitude": 4.8936,
"image_url": null
}
]
}
Each destinations request costs 3 credits. Failed requests are not charged.
⌘I

