Airbnb data, ready when you are.
Listings, prices for a stay and reviews from Airbnb.
- See the price before every call
- Pay only for records that come back
- No subscription. Your balance never expires
What you can get.
- $0.0018per recordTry it →
Listings
Full cards for up to ten listings by URL or room id, priced for a stay. Nightly and total price, availability, ratings by category, amenities, house rules, cancellation policy, host.
- $0.0018per recordTry it →
Reviews
Reviews for up to ten listings. Text, rating, date, host response.
What the data looks like.
| title | propertyType | roomType | capacity | location | ratingOverall | reviewsCount | pricePerNight | currency | hostName | hostIsSuperhost | amenities | listingId | listingUrl | details |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Sunny loft near the old town | Entire loft | Entire home | 3 | Lisbon, Portugal | 4.92 | 214 | 118 | USD | Inês | true |
| 4266698829 | https://www.airbnb.com/sunny-loft-near-the-old-town-1000 |
|
| Quiet garden studio | Entire guest suite | Entire home | 2 | Bengaluru, India | 4.85 | 96 | 42 | USD | Meera | false |
| 4179722422 | https://www.airbnb.com/quiet-garden-studio-1001 |
|
| Beach cabin with a view | Entire cabin | Entire home | 4 | Byron Bay, Australia | 4.97 | 302 | 260 | USD | Jack | true |
| 414104026 | https://www.airbnb.com/beach-cabin-with-a-view-1002 |
|
For developers
API reference.
One endpoint, POST /v1/airbnb. Open an operation to see its fields.
Listingslistings
Full cards for up to ten listings by URL or room id, priced for a stay. Nightly and total price, availability, ratings by category, amenities, house rules, cancellation policy, host.
| Field | Type | Meaning |
|---|---|---|
| subjects * | list of string · 1-10 items | Listing URLs or room ids. |
| stay | object | |
| stay.checkIn | string · YYYY-MM-DD | First night, YYYY-MM-DD. Only read together with checkOut. |
| stay.checkOut | string · YYYY-MM-DD | Departure day, YYYY-MM-DD, after checkIn. |
| stay.adults | integer · 1-16 | Guests aged 13+; the nightly price depends on the party. |
| stay.children | integer · 0-10 | Guests aged 2-12. |
| stay.infants | integer · 0-5 | Guests under 2; usually not counted toward the listing's capacity. |
| stay.pets | integer · 0-5 | Pets, where the listing allows them; adds the pet fee to the total. |
| stay.currency | string · ISO 4217 | ISO 4217 code the prices come back in ("USD", "INR", "EUR"). |
| stay.locale | string · ≤10 chars | Language tag for titles and descriptions ("en-US", "fr-FR"). |
Response fields, each row of data
| Field | Type |
|---|---|
| listingId | string |
| listingUrl | string |
| title | string |
| propertyType | string |
| roomType | string |
| capacity | integer |
| summaryDetails | list of string |
| description | string |
| location | string |
| locationSubtitle | string |
| locationPath | string |
| latitude | number |
| longitude | number |
| neighborhoodNotes | any |
| ratings | any |
| ratingOverall | number |
| reviewsCount | integer |
| highlights | any |
| amenities | any |
| houseRules | any |
| cancellationPolicy | string |
| available | boolean |
| stay | string |
| currency | string |
| totalPriceText | string |
| pricePerNightText | string |
| baseSubtotalText | string |
| priceQualifier | string |
| totalPrice | number |
| pricePerNight | number |
| host | any |
| hostName | string |
| hostIsSuperhost | boolean |
| coHosts | any |
| images | any |
| thumbnail | string |
| details | object |
Every field is present on every row: a value the source had nothing for is null, an empty list is []. details is always the last field: everything else the source sent for that row, under our own field names. Its keys depend on the source that answered, so read them defensively; it is {} when there is nothing more.
curl -X POST https://apiforagents.dev/v1/airbnb \
-H "Authorization: Bearer $AFA_KEY" \
-H "Content-Type: application/json" \
-d '{"op":"listings","subjects":["https://www.airbnb.com/rooms/<room-id>"],"stay":{"checkIn":"2027-03-12","checkOut":"2027-03-15","adults":2,"currency":"USD"}}'Example response rows
[
{
"title": "Sunny loft near the old town",
"propertyType": "Entire loft",
"roomType": "Entire home",
"capacity": 3,
"location": "Lisbon, Portugal",
"ratingOverall": 4.92,
"reviewsCount": 214,
"pricePerNight": 118,
"currency": "USD",
"hostName": "Inês",
"hostIsSuperhost": true,
"amenities": [
"Wifi",
"Kitchen",
"Washer"
],
"listingId": "4266698829",
"listingUrl": "https://www.airbnb.com/sunny-loft-near-the-old-town-1000",
"details": {}
},
{
"title": "Quiet garden studio",
"propertyType": "Entire guest suite",
"roomType": "Entire home",
"capacity": 2,
"location": "Bengaluru, India",
"ratingOverall": 4.85,
"reviewsCount": 96,
"pricePerNight": 42,
"currency": "USD",
"hostName": "Meera",
"hostIsSuperhost": false,
"amenities": [
"Wifi",
"Air conditioning"
],
"listingId": "4179722422",
"listingUrl": "https://www.airbnb.com/quiet-garden-studio-1001",
"details": {}
}
]An example to show the shape. The rows show the most used fields; a live row carries every field in the table above.
Reviewsreviews
Reviews for up to ten listings. Text, rating, date, host response.
| Field | Type | Meaning |
|---|---|---|
| subjects * | list of string · 1-10 items | Listing URLs or room ids. |
| locale | string · ≤10 chars | Language tag the review text is returned in ("en-US"); reviews in other languages come translated. |
| limit | integer · 1-100 |
Response fields, each row of data
| Field | Type |
|---|---|
| reviewId | string |
| reviewText | string |
| translatedText | string |
| originalLanguage | string |
| rating | number |
| postedDate | string |
| highlight | string |
| highlightType | string |
| hostResponse | string |
| hostId | string |
| hostName | string |
| hostProfileUrl | string |
| reviewerUserId | string |
| reviewerName | string |
| reviewerProfile | string |
| reviewerAvatar | string |
| reviewerLocation | string |
| reviewerTenure | string |
| details | object |
Every field is present on every row: a value the source had nothing for is null, an empty list is []. details is always the last field: everything else the source sent for that row, under our own field names. Its keys depend on the source that answered, so read them defensively; it is {} when there is nothing more.
curl -X POST https://apiforagents.dev/v1/airbnb \
-H "Authorization: Bearer $AFA_KEY" \
-H "Content-Type: application/json" \
-d '{"op":"reviews","subjects":["https://www.airbnb.com/rooms/<room-id>"],"locale":"en-US","limit":25}'Example response rows
[
{
"reviewerName": "Hannah",
"reviewerLocation": "Berlin, Germany",
"rating": 5,
"reviewText": "Spotless, bright and a 2-minute walk to everything.",
"postedDate": "2026-10-08",
"hostName": "Inês",
"hostResponse": null,
"reviewId": "3422556718",
"hostId": "84440075",
"hostProfileUrl": "https://www.airbnb.com/hannah-1000",
"reviewerUserId": "1660453336",
"details": {}
},
{
"reviewerName": "Arjun",
"reviewerLocation": "Pune, India",
"rating": 5,
"reviewText": "Host replied in minutes. Would stay again.",
"postedDate": "2026-09-30",
"hostName": "Inês",
"hostResponse": null,
"reviewId": "3672073992",
"hostId": "558151567",
"hostProfileUrl": "https://www.airbnb.com/arjun-1001",
"reviewerUserId": "598161622",
"details": {}
}
]An example to show the shape. The rows show the most used fields; a live row carries every field in the table above.
Historyhistoryfree
Stored price/rating series of listings already held. Free.
| Field | Type | Meaning |
|---|---|---|
| subjects * | list of string · 1-10 items | |
| metric | enum | price_per_night · total_price · rating_overall · reviews_count |
| days | integer · 1-730 |