Airbnb API endpoint
Searches public Airbnb stays for a location, with optional check-in and check-out dates, adult count, currency and page. Pass `ne_lat`, `ne_lng`, `sw_lat` and `sw_lng` to bound the search to a map area. Each result has the listing id, title, URL, location and coordinates, price and price per night, rating, review count, host, and the Superhost and Guest Favorite flags.
/airbnb/searchQuery parameters: location is required. check_in, check_out, adults, page, and currency are optional. For more relevant map-bounded search, also pass ne_lat, ne_lng, sw_lat, sw_lng, and optionally zoom.
Supply all four map bounds together. Zero is a valid coordinate, including an equator or Greenwich edge. Latitudes must be finite numbers in [-90, 90], longitudes in [-180, 180], with ne_lat > sw_lat and ne_lng > sw_lng. Split a dateline-crossing area into separate boxes ending at 180 and starting at -180. Missing, empty, non-finite, reversed, or zero-area query bounds return invalid parameters before an upstream request.
Returns Airbnb public stay search results.
page is 1-based. Pages after the first follow the opaque page cursors Airbnb advertises for the same search; requesting a page beyond that advertised range returns an empty results array. Search and map cards can overlap between pages, so repeated cards alone do not indicate that the search grid is finished. The advertised page range describes Airbnb's current ranked search results and does not guarantee that every listing in a map area is returned.
| Field | Filled in, of 40 checked | Values in the sample |
|---|---|---|
| id | 40 | |
| title | 40 | “Little Something” and 39 other values |
| url | 40 | airbnb.com |
| image | 40 | a0.muscache.com |
| price | 40 | 362 to 8,119, median 2,020 |
| price_per_night | 40 | 65 to 1,490, median 346.4 |
| currency | 40 | USD in all 40 |
| rating | 36 | 4.65 to 5, median 4.84 |
| review_count | 36 | 7 to 2,003, median 153 |
| location | 40 | “Little Something” and 26 other values |
| latitude | 40 | |
| longitude | 40 | |
| is_superhost | 7 | true in 7 of 7 |
| is_guest_favorite | 16 | true in 16 of 16 |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| location | string | Yes | Location | New York, NY | |
| check_in | string | No | Check-in date | ||
| check_out | string | No | Check-out date | ||
| adults | integer | No | Adult guests | ||
| page | integer | No | 1-based page | ||
| currency | string | No | Currency for bounded map search | ||
| ne_lat | number | No | Northeast latitude for bounded map search | ||
| ne_lng | number | No | Northeast longitude for bounded map search | ||
| sw_lat | number | No | Southwest latitude for bounded map search | ||
| sw_lng | number | No | Southwest longitude for bounded map search | ||
| zoom | integer | No | Map zoom for bounded map search | ||
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/airbnb/search?location=New+York%2C+NY&page=1" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"location": "New York, NY",
"page": 1,
"results": [
{
"id": "964337233639659839",
"title": "Cozy & Calm Studio",
"url": "https://www.airbnb.com/rooms/964337233639659839",
"image": "https://a0.muscache.com/image.jpeg",
"price": 717,
"rating": 4.47,
"review_count": 96,
"location": "Apartment in Union City",
"latitude": 40.77525,
"longitude": -74.02586
}
]
}
}Request schema
No body schema
Response schema
#/definitions/airbnb.SearchResponse
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| location | string | No | New York, NY | Location that was searched. | ||
| page | integer | No | 1 | Page number returned. | ||
| results | array | No | Listings on this page. | |||
| results[].host | string | No | Host name, when the search card shows it. | |||
| results[].host_id | string | No | 65056940 | Airbnb id of the host. Use it with the host endpoint. | ||
| results[].id | string | No | 12345678 | Airbnb listing (room) id. Use it with the room endpoints. | ||
| results[].image | string | No | URL of the listing's main photo. | |||
| results[].is_guest_favorite | boolean | No | IsGuestFavorite reports whether the listing carries an Airbnb Guest Favorite badge (including its "top N%" variants). Like IsSuperhost it comes from the search card's badges[] and renders inconsistently, so a true value is reliable but a false/absent value is not — downstream aggregates treat the rate as an observed lower bound. | |||
| results[].is_superhost | boolean | No | True when the listing carries the Superhost badge. | |||
| results[].latitude | number | No | Latitude of the listing. | |||
| results[].location | string | No | Location text shown for the listing. | |||
| results[].longitude | number | No | Longitude of the listing. | |||
| results[].price | number | No | Price shown on the search card. With check-in and check-out dates it is the total for the stay; without dates it is Airbnb's display figure, not a nightly rate. | |||
| results[].price_per_night | number | No | 148 | PricePerNight is the per-night price for the queried stay (search total ÷ nights), set only when check_in+check_out are supplied. It amortizes any fixed fees across the stay, so a longer window yields a tighter base-rate estimate. Without dates the `price` field is an unstable "from"/display figure, not a nightly rate. | ||
| results[].rating | number | No | Average guest rating. | |||
| results[].review_count | integer | No | Number of guest reviews. | |||
| results[].title | string | No | Listing title as shown on the search card. | |||
| results[].url | string | No | Link to the listing on Airbnb. |
| Status | Description | Schema |
|---|---|---|
| 400 | Bad Request | #/definitions/app.Response |
| 429 | Too Many Requests | #/definitions/app.Response |
| 503 | Service Unavailable | #/definitions/app.Response |
Use environment variables for secrets and keep Crawlora API keys server-side.
curl -X GET "https://api.crawlora.net/api/v1/airbnb/search?location=New+York%2C+NY&page=1" \
-H "x-api-key: $CRAWLORA_API_KEY"