Search Stays
curl --request GET \
--url https://scrapebadger.com/v1/airbnb/searchimport requests
url = "https://scrapebadger.com/v1/airbnb/search"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://scrapebadger.com/v1/airbnb/search', 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/airbnb/search",
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/airbnb/search"
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/airbnb/search")
.asString();require 'uri'
require 'net/http'
url = URI("https://scrapebadger.com/v1/airbnb/search")
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,
"next_page_cursor": "<string>",
"listings": [
{
"room_id": "<string>",
"name": "<string>",
"title": "<string>",
"rating": 123,
"review_count": 123,
"rating_label": "<string>",
"price": {
"label": "<string>",
"price": "<string>",
"qualifier": "<string>",
"amount": 123,
"currency": "<string>",
"original_price": "<string>"
},
"badges": [
"<string>"
],
"latitude": 123,
"longitude": 123,
"images": [
"<string>"
],
"listing_url": "<string>"
}
]
}Endpoints
Search Stays
Search Airbnb stays by place name or map bounding box — with dates, guest counts, price, bedrooms, beds, bathrooms and room-type filters.
GET
/
v1
/
airbnb
/
search
Search Stays
curl --request GET \
--url https://scrapebadger.com/v1/airbnb/searchimport requests
url = "https://scrapebadger.com/v1/airbnb/search"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://scrapebadger.com/v1/airbnb/search', 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/airbnb/search",
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/airbnb/search"
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/airbnb/search")
.asString();require 'uri'
require 'net/http'
url = URI("https://scrapebadger.com/v1/airbnb/search")
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,
"next_page_cursor": "<string>",
"listings": [
{
"room_id": "<string>",
"name": "<string>",
"title": "<string>",
"rating": 123,
"review_count": 123,
"rating_label": "<string>",
"price": {
"label": "<string>",
"price": "<string>",
"qualifier": "<string>",
"amount": 123,
"currency": "<string>",
"original_price": "<string>"
},
"badges": [
"<string>"
],
"latitude": 123,
"longitude": 123,
"images": [
"<string>"
],
"listing_url": "<string>"
}
]
}Search Airbnb for stays. Target an area either with free-text
location
(geocoded server-side) or with a precise map bounding box
(ne_lat / ne_lng / sw_lat / sw_lng, all four together). Page through
results by feeding next_page_cursor back as cursor.
Query Parameters
Free-text place, geocoded server-side — e.g.
Paris, France, Lisbon,
Trastevere, Rome. Provide either location or the bounding-box
parameters below.Response
Listing cards for this page.
Show Listing
Show Listing
Example
const res = await fetch(
"https://scrapebadger.com/v1/airbnb/search?" +
new URLSearchParams({
location: "Paris, France",
check_in: "2026-09-12",
check_out: "2026-09-15",
adults: "2",
price_max: "250",
room_type: "Entire home/apt",
currency: "EUR",
}),
{ headers: { "X-API-Key": process.env.SCRAPEBADGER_API_KEY } },
);
const data = await res.json();
import requests
res = requests.get(
"https://scrapebadger.com/v1/airbnb/search",
headers={"X-API-Key": "YOUR_API_KEY"},
params={
"location": "Paris, France",
"check_in": "2026-09-12",
"check_out": "2026-09-15",
"adults": 2,
"price_max": 250,
"room_type": "Entire home/apt",
"currency": "EUR",
},
)
data = res.json()
curl "https://scrapebadger.com/v1/airbnb/search?location=Paris%2C%20France&check_in=2026-09-12&check_out=2026-09-15&adults=2&price_max=250¤cy=EUR" \
-H "X-API-Key: YOUR_API_KEY"
Response
{
"query": "Paris, France",
"count": 18,
"next_page_cursor": "eyJzZWN0aW9uX29mZnNldCI6MCwiaXRlbXNfb2Zmc2V0IjoxOCwidmVyc2lvbiI6MX0=",
"listings": [
{
"room_id": "48291736",
"name": "Rental unit in Paris",
"title": "Sunlit Haussmannian flat near Canal Saint-Martin",
"rating": 4.87,
"review_count": 214,
"rating_label": "4.8 (214)",
"price": {
"label": "€172 per night",
"price": "€172",
"qualifier": "per night",
"amount": 172,
"currency": "EUR",
"original_price": "€215"
},
"badges": ["Guest favorite"],
"latitude": 48.8721,
"longitude": 2.3648,
"images": [
"https://a0.muscache.com/im/pictures/miso/Hosting-48291736/original/2c8f1a44-living.jpeg",
"https://a0.muscache.com/im/pictures/miso/Hosting-48291736/original/8e3b7d19-bedroom.jpeg"
],
"listing_url": "https://www.airbnb.com/rooms/48291736"
},
{
"room_id": "1029384756",
"name": "Condo in Paris",
"title": "Quiet studio in Le Marais with balcony",
"rating": 4.92,
"review_count": 88,
"rating_label": "4.9 (88)",
"price": {
"label": "€139 per night",
"price": "€139",
"qualifier": "per night",
"amount": 139,
"currency": "EUR",
"original_price": null
},
"badges": [],
"latitude": 48.8566,
"longitude": 2.3622,
"images": [
"https://a0.muscache.com/im/pictures/miso/Hosting-1029384756/original/44a1c9f0-studio.jpeg"
],
"listing_url": "https://www.airbnb.com/rooms/1029384756"
}
]
}
Each search request costs 8 credits. Failed requests are not charged.

