HasData is an independent service and is not affiliated with, endorsed by, or sponsored by Airbnb. Airbnb is a trademark of its respective owner. This API works with publicly available data only.
Get Your API Key
Sign in at hasdata.com, go to your account settings, and copy your API key. All requests must include your key in thex-api-key header.
Request Cost and API Credits
Each request to the Airbnb Listing Scraper API consumes API Credits from your account balance.- Cost per request: 5 API Credits
- Credits are deducted only for successful requests.
- Your total available credits depend on your active plan.
You can use your credits across all HasData APIs. The same credit balance is shared platform-wide.
Unused credits do not roll over. Any remaining credits expire at the end of the current billing period.
Make Your First Request
curl --request GET -G \
--url 'https://api.hasdata.com/scrape/airbnb/listing' \
--data-urlencode 'location=New York' \
--data-urlencode 'checkIn=2026-09-20' \
--data-urlencode 'checkOut=2026-09-24' \
--data-urlencode 'neLat=40.8' \
--data-urlencode 'neLng=-73.9' \
--data-urlencode 'swLat=40.6' \
--data-urlencode 'swLng=-74.1' \
--header 'Content-Type: application/json' \
--header 'x-api-key: <your-api-key>'
hasdata airbnb-listing \
--location 'New York' \
--check-in 2026-09-20 \
--check-out 2026-09-24 \
--ne-lat 40.8 \
--ne-lng -73.9 \
--sw-lat 40.6 \
--sw-lng -74.1
const axios = require('axios').default;
const options = {
method: 'GET',
url: 'https://api.hasdata.com/scrape/airbnb/listing',
params: {
location: 'New York',
checkIn: '2026-09-20',
checkOut: '2026-09-24',
neLat: '40.8',
neLng: '-73.9',
swLat: '40.6',
swLng: '-74.1'
},
headers: {'Content-Type': 'application/json', 'x-api-key': '<your-api-key>'}
};
try {
const { data } = await axios.request(options);
console.log(data);
} catch (error) {
console.error(error);
}
import requests
url = "https://api.hasdata.com/scrape/airbnb/listing"
querystring = {"location":"New York","checkIn":"2026-09-20","checkOut":"2026-09-24","neLat":"40.8","neLng":"-73.9","swLat":"40.6","swLng":"-74.1"}
headers = {
"Content-Type": "application/json",
"x-api-key": "<your-api-key>"
}
response = requests.get(url, headers=headers, params=querystring)
print(response.json())
<?php
$params = [
"location" => "New York",
"checkIn" => "2026-09-20",
"checkOut" => "2026-09-24",
"neLat" => "40.8",
"neLng" => "-73.9",
"swLat" => "40.6",
"swLng" => "-74.1",
];
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.hasdata.com/scrape/airbnb/listing?" . http_build_query($params),
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-api-key: <your-api-key>",
],
]);
$response = curl_exec($curl);
curl_close($curl);
echo $response;
OkHttpClient client = new OkHttpClient();
HttpUrl url = HttpUrl.parse("https://api.hasdata.com/scrape/airbnb/listing")
.newBuilder()
.addQueryParameter("location", "New York")
.addQueryParameter("checkIn", "2026-09-20")
.addQueryParameter("checkOut", "2026-09-24")
.addQueryParameter("neLat", "40.8")
.addQueryParameter("neLng", "-73.9")
.addQueryParameter("swLat", "40.6")
.addQueryParameter("swLng", "-74.1")
.build();
Request request = new Request.Builder()
.url(url)
.get()
.addHeader("Content-Type", "application/json")
.addHeader("x-api-key", "<your-api-key>")
.build();
Response response = client.newCall(request).execute();
using System.Net.Http;
using System.Web;
var client = new HttpClient();
var query = HttpUtility.ParseQueryString(string.Empty);
query["location"] = "New York";
query["checkIn"] = "2026-09-20";
query["checkOut"] = "2026-09-24";
query["neLat"] = "40.8";
query["neLng"] = "-73.9";
query["swLat"] = "40.6";
query["swLng"] = "-74.1";
var url = $"https://api.hasdata.com/scrape/airbnb/listing?{query}";
var request = new HttpRequestMessage(new HttpMethod("GET"), url);
request.Headers.Add("x-api-key", "<your-api-key>");
using var response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
var content = await response.Content.ReadAsStringAsync();
Console.WriteLine(content);
require 'net/http'
require 'uri'
uri = URI("https://api.hasdata.com/scrape/airbnb/listing")
params = {
"location" => "New York",
"checkIn" => "2026-09-20",
"checkOut" => "2026-09-24",
"neLat" => "40.8",
"neLng" => "-73.9",
"swLat" => "40.6",
"swLng" => "-74.1",
}
uri.query = URI.encode_www_form(params)
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
request = Net::HTTP::Get.new(uri)
request["Content-Type"] = 'application/json'
request["x-api-key"] = '<your-api-key>'
response = http.request(request)
puts response.read_body
use reqwest::blocking::Client;
fn main() -> Result<(), Box<dyn std::error::Error>> {
let client = Client::new();
let res = client
.get("https://api.hasdata.com/scrape/airbnb/listing")
.query(&[("location", "New York")])
.query(&[("checkIn", "2026-09-20")])
.query(&[("checkOut", "2026-09-24")])
.query(&[("neLat", "40.8")])
.query(&[("neLng", "-73.9")])
.query(&[("swLat", "40.6")])
.query(&[("swLng", "-74.1")])
.header("Content-Type", "application/json")
.header("x-api-key", "<your-api-key>")
.send()?
.text()?;
println!("{}", res);
Ok(())
}
package main
import (
"fmt"
"io"
"net/http"
"net/url"
)
func main() {
params := url.Values{}
params.Set("location", "New York")
params.Set("checkIn", "2026-09-20")
params.Set("checkOut", "2026-09-24")
params.Set("neLat", "40.8")
params.Set("neLng", "-73.9")
params.Set("swLat", "40.6")
params.Set("swLng", "-74.1")
u := "https://api.hasdata.com/scrape/airbnb/listing?" + params.Encode()
req, _ := http.NewRequest("GET", u, nil)
req.Header.Add("Content-Type", "application/json")
req.Header.Add("x-api-key", "<your-api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}
API Parameters
| Parameter | Default Value | Required | Description |
|---|---|---|---|
location | New York | No | The location to search for listings. Required unless a full map bounding box (neLat, neLng, swLat, swLng) is provided. |
checkIn | 2026-09-20 | Yes | The check-in date for the listings. |
checkOut | 2026-09-24 | No | The check-out date for the listings. |
adults | - | No | Number of adults. |
children | - | No | Number of children. |
infants | - | No | Number of infants. |
pets | - | No | Number of pets. |
neLat | 40.8 | No | North-east corner latitude of the map bounding box. When all four bounding-box coordinates are provided, listings are searched within the box instead of by location. |
neLng | -73.9 | No | North-east corner longitude of the map bounding box. |
swLat | 40.6 | No | South-west corner latitude of the map bounding box. |
swLng | -74.1 | No | South-west corner longitude of the map bounding box. |
nextPageToken | - | No | The token used to retrieve the next page of results. |