Airbnb Search API
The Airbnb Search API returns stay listings as structured JSON. Search by destination, choose a country or language edition, and optionally specify dates, guests, price bounds, room types, property types, amenities and booking preferences. Listings include IDs, titles, ratings, review counts, photos, coordinates and displayed price details when available. Use the returned page links to continue a search within the documented pagination limits. Pass a listing ID to the Airbnb Place API for individual stay details.
Endpoint: https://api.scrapingdog.com/airbnb/search
Each successful request costs 5 credits, including a valid empty search. Requests ask for 18 listings; this is not an enforced response-array cap. The default India edition is
www.airbnb.co.in with INR. The supplied response below shows one of 18 returned listings, present in both array aliases; counts and pagination retain the full response values. The API key is replaced with APIKEY. Example dates match the supplied response; choose suitable dates for your request.API Parameters
🔑
Scrapingdog Parameters
api_keyRequiredYour Scrapingdog API key from the dashboard. Send each key once in the GET query string. Replace APIKEY only when executing requests.
Default: None
Type: String
🔍
Search
queryRequiredNonblank search text, for examplejaipur, at most 1,000 submitted characters before trimming. Leading and trailing whitespace is removed; control characters are rejected.
Default: None
Type: String
🌐
Localization
domainOptionalChoose one of the 116 supported editions. Trimmed and lowercased; an initialwww.is removed for lookup. The effective hostname addswww.to country/base domains; language subdomains remain unchanged. Supply a hostname without a scheme, path, query string or trailing slash. Locale is derived from the domain; there is no language or locale override.
Default: airbnb.co.in
Type: String enumcurrencyOptionalSupported three-letter code. Uppercased; whitespace is not trimmed. See the 69 supported currencies. Currency does not change locale.
Default: Domain-associated currency
Type: String enum
📅
Stay Dates
checkinOptionalValid calendar date in YYYY-MM-DD form. Supply together with checkout. Dates are optional, but supply both or neither. No dates are generated when omitted; the API validates calendar dates and ordering without rejecting past dates or imposing a maximum stay length.
Default: Omitted: no fixed dates
Type: Date stringcheckoutOptionalValid date strictly after checkin; must be supplied together with it.
Default: Omitted: no fixed dates
Type: Date stringflex_windowOptionalDate flexibility of plus or minus1,2,3,7or14days. Requires both checkin and checkout.
Default: Unset: exact dates if provided
Type: Integer enum
👥
Guests
adultsOptionalNon-negative whole-number count; explicit zero is preserved. Digits only; no signs, spaces, decimals or exponents.
Default: Omitted
Type: Non-negative integerchildrenOptionalNumber of children. Explicit zero is preserved. Digits only; no signs, spaces, decimals or exponents. No child-age list is required or supported.
Default: Omitted
Type: Non-negative integerinfantsOptionalNon-negative whole-number count. Digits only; no signs, spaces, decimals or exponents.
Default: Omitted
Type: Non-negative integerpetsOptionalNon-negative whole-number count. Digits only; no signs, spaces, decimals or exponents.
Default: Omitted
Type: Non-negative integer
💰
Price Filters
price_typeOptionalChoosetripfor trip price-filter mode ornightlyfor nightly price-filter mode. Values are case-sensitive and whitespace is not trimmed.
Default: trip
Type: String enummin_priceOptionalMinimum in selected currency and price mode. Use digits with an optional decimal fraction; no signs, whitespace, exponents or grouping commas.
Default: Unset
Type: Non-negative decimalmax_priceOptionalSame numeric rules; must be at least min_price when both are supplied. Use digits with an optional decimal fraction; no signs, whitespace, exponents or grouping commas.
Default: Unset
Type: Non-negative decimal
🏠
Property Filters
room_typeOptionalChooseentire_homefor an entire home/apartment orprivate_roomfor a private room. Values are case-sensitive and whitespace is not trimmed.
Default: Unset
Type: String enumproperty_typesOptionalComma-separated property IDs:1House,3Flat,2Guest house,4Hotel. Item whitespace is trimmed and duplicates are removed. Maximum 512 submitted characters.
Default: Unset
Type: Comma-separated stringbedroomsOptionalMinimum number of bedrooms. Digits only; no signs, spaces, decimals or exponents.
Default: Unset
Type: Non-negative integerbedsOptionalMinimum number of beds. Digits only; no signs, spaces, decimals or exponents.
Default: Unset
Type: Non-negative integerbathroomsOptionalMinimum bathrooms. Decimal values are accepted. Use digits with an optional decimal fraction; no signs, whitespace, exponents or grouping commas.
Default: Unset
Type: Non-negative decimal
✨
Preferences
amenitiesOptionalComma-separated amenity and accessibility IDs, for example4,8,33,34. Use positive whole numbers. Leading zeroes are normalized and duplicates are removed. Maximum 4,096 characters; control characters are rejected.
Default: Unset
Type: Comma-separated stringhost_languagesOptionalChoose from the host language codes, for exampleen,hi; trimmed, lowercased and deduplicated. These are separate from the domain locale list. Maximum 4,096 characters; no control characters. Compatibility alias:host_langugages(legacy spelling). Send only one spelling; supplying both is rejected. Responses and pagination use the canonical name. Region-tagged codes such asen-INare invalid.
Default: Unset
Type: Comma-separated stringfree_cancellationOptionalAccepts exactlytrueorfalse. Filters for flexible cancellation when enabled. Send lowercase strings in Python and PHP query encoders; native booleans may serialize to unsupported True/False or 1/0.
Default: false
Type: Boolean query textinstant_bookOptionalAccepts exactlytrueorfalse. Filters for instant booking when enabled.
Default: false
Type: Boolean query textguest_favoriteOptionalAccepts exactlytrueorfalse. Applies the guest-favorite filter when enabled.
Default: false
Type: Boolean query textself_check_inOptionalAccepts exactlytrueorfalse. Enabling adds amenity ID51to the upstream amenity selection, merging it without duplicates. The echoed amenities string remains the explicitly supplied list.
Default: false
Type: Boolean query text
📄
Pagination
pageOptionalAccepted range0–49. Start at 0 and follownext_pageor the next API URL with the same settings. Stop on empty results, null continuation, repeated pages or page 49. A nonempty page can suggest a next page even whennext_cursoris null; do not follow beyond page 49. Each request asks for 18 listings; limit and cursor are not public request controls.
Default: Initial page 0
Type: Non-negative integer
API Examples

curl "https://api.scrapingdog.com/airbnb/search?api_key=APIKEY&query=jaipur&domain=airbnb.co.in¤cy=INR&checkin=2026-11-20&checkout=2026-11-25&price_type=trip&page=0"
import requests params = { "api_key": "APIKEY", "query": "jaipur", "domain": "airbnb.co.in", "currency": "INR", "checkin": "2026-11-20", "checkout": "2026-11-25", "price_type": "trip", "page": 0, } response = requests.get("https://api.scrapingdog.com/airbnb/search", params=params, timeout=70) response.raise_for_status() data = response.json() print(data["places"]) print(data["next_page"])
const axios = require('axios'); axios.get('https://api.scrapingdog.com/airbnb/search', { params: { api_key: 'APIKEY', query: 'jaipur', domain: 'airbnb.co.in', currency: 'INR', checkin: '2026-11-20', checkout: '2026-11-25', price_type: 'trip', page: 0, }, timeout: 70000, }).then(({ data }) => { console.log(data.places); console.log(data.next_page); }).catch(error => console.error(error.response?.data ?? error.message));
<?php $params = [ 'api_key' => 'APIKEY', 'query' => 'jaipur', 'domain' => 'airbnb.co.in', 'currency' => 'INR', 'checkin' => '2026-11-20', 'checkout' => '2026-11-25', 'price_type' => 'trip', 'page' => 0, ]; $ch = curl_init('https://api.scrapingdog.com/airbnb/search?' . http_build_query($params)); curl_setopt_array($ch, [CURLOPT_RETURNTRANSFER => true, CURLOPT_TIMEOUT => 70]); $body = curl_exec($ch); if ($body === false) { throw new RuntimeException(curl_error($ch)); } $status = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); if ($status !== 200) { throw new RuntimeException("HTTP $status: $body"); } $data = json_decode($body, true, 512, JSON_THROW_ON_ERROR); print_r($data['places']);
require 'net/http' require 'uri' require 'json' url = URI('https://api.scrapingdog.com/airbnb/search') url.query = URI.encode_www_form( api_key: 'APIKEY', query: 'jaipur', domain: 'airbnb.co.in', currency: 'INR', checkin: '2026-11-20', checkout: '2026-11-25', price_type: 'trip', page: 0 ) http = Net::HTTP.new(url.host, url.port) http.use_ssl = true http.read_timeout = 70 response = http.get(url.request_uri) raise "HTTP #{response.code}: #{response.body}" unless response.is_a?(Net::HTTPSuccess) data = JSON.parse(response.body) puts JSON.pretty_generate(data.fetch('places'))
import java.net.URI; import java.net.URLEncoder; import java.net.http.HttpClient; import java.net.http.HttpRequest; import java.net.http.HttpResponse; import java.nio.charset.StandardCharsets; import java.time.Duration; public class Main { public static void main(String[] args) throws Exception { String apiKey = URLEncoder.encode("APIKEY", StandardCharsets.UTF_8); String query = URLEncoder.encode("jaipur", StandardCharsets.UTF_8); String url = "https://api.scrapingdog.com/airbnb/search?api_key=" + apiKey + "&query=" + query + "&domain=airbnb.co.in¤cy=INR" + "&checkin=2026-11-20&checkout=2026-11-25&price_type=trip&page=0"; HttpRequest request = HttpRequest.newBuilder(URI.create(url)) .timeout(Duration.ofSeconds(70)).GET().build(); HttpResponse<String> response = HttpClient.newHttpClient() .send(request, HttpResponse.BodyHandlers.ofString()); if (response.statusCode() != 200) { throw new RuntimeException("HTTP " + response.statusCode() + ": " + response.body()); } System.out.println(response.body()); } }
{
"search_metadata": {
"status": "Success",
"airbnb_url": "https://www.airbnb.co.in/s/homes?query=jaipur¤cy=INR&checkin=2026-11-20&checkout=2026-11-25&price_filter_input_type=2",
"total_time_taken": 1.53
},
"search_parameters": {
"engine": "airbnb",
"query": "jaipur",
"domain": "www.airbnb.co.in",
"locale": "en-IN",
"currency": "INR",
"checkin": "2026-11-20",
"checkout": "2026-11-25",
"price_type": "trip",
"free_cancellation": false,
"instant_book": false,
"guest_favorite": false,
"self_check_in": false,
"page": 0,
"limit": 18
},
"search_information": {
"total_results": 1000,
"query_displayed": "jaipur",
"results_returned": 18,
"total_results_text": "Over 1,000 homes in Jaipur",
"total_results_is_approximate": true
},
"total_time_taken": 1.53,
"total_results": 18,
"total_available": 1000,
"total_available_text": "Over 1,000 homes in Jaipur",
"total_available_is_approximate": true,
"next_cursor": null,
"next_page": 1,
"scrapingdog_pagination": {
"current": "https://api.scrapingdog.com/airbnb/search?api_key=APIKEY&query=jaipur&domain=www.airbnb.co.in¤cy=INR&checkin=2026-11-20&checkout=2026-11-25&price_type=trip&free_cancellation=false&instant_book=false&guest_favorite=false&self_check_in=false&page=0",
"next": "https://api.scrapingdog.com/airbnb/search?api_key=APIKEY&query=jaipur&domain=www.airbnb.co.in¤cy=INR&checkin=2026-11-20&checkout=2026-11-25&price_type=trip&free_cancellation=false&instant_book=false&guest_favorite=false&self_check_in=false&page=1"
},
"organic_results": [
{
"position": 1,
"listing_id": "965075981702341405",
"place_id": "965075981702341405",
"title": "Room in Jaipur",
"name": "Aluda Haveli - blue room",
"link": "https://www.airbnb.co.in/rooms/965075981702341405",
"description": "Aluda Haveli - blue room",
"rating": 4.9,
"rating_text": "4.9 (132)",
"reviews": 132,
"gps_coordinates": {
"latitude": 26.92034,
"longitude": 75.82251
},
"coordinates": {
"latitude": 26.92034,
"longitude": 75.82251
},
"thumbnail": "https://a0.muscache.com/im/pictures/miso/Hosting-965075981702341405/original/d40c1fe6-a460-4d85-82ee-5a412b7b0152.jpeg",
"images": [
"https://a0.muscache.com/im/pictures/miso/Hosting-965075981702341405/original/d40c1fe6-a460-4d85-82ee-5a412b7b0152.jpeg",
"https://a0.muscache.com/im/pictures/miso/Hosting-965075981702341405/original/77bb0eb3-91e5-4c8a-bb74-cf43c3f353d9.jpeg",
"https://a0.muscache.com/im/pictures/miso/Hosting-965075981702341405/original/cb248251-4328-45c0-bef2-ae838691f1c4.jpeg",
"https://a0.muscache.com/im/pictures/miso/Hosting-965075981702341405/original/2d7d9c08-b653-4a9b-ab44-45971a6ee2a9.jpeg",
"https://a0.muscache.com/im/pictures/miso/Hosting-965075981702341405/original/14232f0a-ee38-4faa-be87-5cdd6e8a5a36.jpeg",
"https://a0.muscache.com/im/pictures/miso/Hosting-965075981702341405/original/35fee9e4-bc9c-4fed-ab63-c9b722c2d2f4.jpeg"
],
"badges": [
"Guest favourite"
],
"price": "₹12,780",
"extracted_price": 12780,
"currency": "INR",
"price_qualifier": "for 5 nights",
"price_details": {
"display": "₹12,780",
"qualifier": "for 5 nights"
},
"price_breakdown": [
{
"description": "5 nights x ₹2,556.00",
"price": "₹12,780.00",
"extracted_price": 12780
}
],
"price_accessibility_label": "₹12,780 for 5 nights",
"details": [
"1 bed",
"1 bathroom"
],
"beds": 1,
"bathrooms": 1,
"highlights": [
"Free cancellation"
],
"free_cancellation": true
}
],
"places": [
{
"position": 1,
"listing_id": "965075981702341405",
"place_id": "965075981702341405",
"title": "Room in Jaipur",
"name": "Aluda Haveli - blue room",
"link": "https://www.airbnb.co.in/rooms/965075981702341405",
"description": "Aluda Haveli - blue room",
"rating": 4.9,
"rating_text": "4.9 (132)",
"reviews": 132,
"gps_coordinates": {
"latitude": 26.92034,
"longitude": 75.82251
},
"coordinates": {
"latitude": 26.92034,
"longitude": 75.82251
},
"thumbnail": "https://a0.muscache.com/im/pictures/miso/Hosting-965075981702341405/original/d40c1fe6-a460-4d85-82ee-5a412b7b0152.jpeg",
"images": [
"https://a0.muscache.com/im/pictures/miso/Hosting-965075981702341405/original/d40c1fe6-a460-4d85-82ee-5a412b7b0152.jpeg",
"https://a0.muscache.com/im/pictures/miso/Hosting-965075981702341405/original/77bb0eb3-91e5-4c8a-bb74-cf43c3f353d9.jpeg",
"https://a0.muscache.com/im/pictures/miso/Hosting-965075981702341405/original/cb248251-4328-45c0-bef2-ae838691f1c4.jpeg",
"https://a0.muscache.com/im/pictures/miso/Hosting-965075981702341405/original/2d7d9c08-b653-4a9b-ab44-45971a6ee2a9.jpeg",
"https://a0.muscache.com/im/pictures/miso/Hosting-965075981702341405/original/14232f0a-ee38-4faa-be87-5cdd6e8a5a36.jpeg",
"https://a0.muscache.com/im/pictures/miso/Hosting-965075981702341405/original/35fee9e4-bc9c-4fed-ab63-c9b722c2d2f4.jpeg"
],
"badges": [
"Guest favourite"
],
"price": "₹12,780",
"extracted_price": 12780,
"currency": "INR",
"price_qualifier": "for 5 nights",
"price_details": {
"display": "₹12,780",
"qualifier": "for 5 nights"
},
"price_breakdown": [
{
"description": "5 nights x ₹2,556.00",
"price": "₹12,780.00",
"extracted_price": 12780
}
],
"price_accessibility_label": "₹12,780 for 5 nights",
"details": [
"1 bed",
"1 bathroom"
],
"beds": 1,
"bathrooms": 1,
"highlights": [
"Free cancellation"
],
"free_cancellation": true
}
]
}