All scrapers

Travel

Airbnb Listing Details Scraper

airbnb.com

100% Success rate
2.1s Avg response
Bot detection + rate limiting Protection
1,099 calls Measured over

Airbnb's search results show a card per stay; the rest - the full description, the host, the six rating categories, the amenity list, the house rules, the cancellation policy and the price for your dates - lives on the listing page, which Airbnb builds from its own internal API. A dedicated plugin endpoint takes a listing id or a room URL from any Airbnb domain and returns that listing already parsed: title, description, room and property type, location with coordinates, the host (superhost flag, response rate, years hosting), the overall and per-category ratings, guests, bedrooms, beds and bathrooms, grouped amenities, the photo gallery, highlights, house rules and check-in and check-out times. Add check_in and check_out for availability, the cancellation policy and the price with its nightly breakdown in the currency you choose, and include_reviews for up to 100 guest reviews with translations. It is the single-listing companion to our Airbnb search plugin: search returns the list, this returns one stay in full.

What you can extract

  • Title, description, room type and property type, with the location and coordinates
  • Host: name, superhost and verified flags, response rate and time, years hosting and host rating
  • Overall rating plus accuracy, cleanliness, check-in, communication, location and value, the review count and the 1-5 star distribution
  • Guests, bedrooms, beds and bathrooms, sleeping arrangements and amenities grouped the way Airbnb groups them
  • Photo gallery with room labels, highlights, house rules, check-in and check-out times and safety notes
  • With stay dates: availability, the instant-book flag, the cancellation policy and the total and nightly price with its breakdown, in the currency you pick
  • Up to 100 guest reviews with rating, date, language, a translation and the host response

Dedicated endpoints

/travel/airbnb-room

Airbnb listing details

One listing by id or room URL (any Airbnb domain): title, description, roomType, propertyType, location with lat/lng, host, per-category rating, reviewsCount, guests, bedrooms, beds, bathrooms, grouped amenities, photos, highlights, houseRules and check-in and check-out times. Add check_in/check_out for available, cancellationPolicy and price (total, nightly, breakdown) in currency; add include_reviews for up to max_reviews guest reviews (1-100), ordered with reviews_sort.

How to scrape it

curl -X POST \
  -H "X-ScrapeUnblocker-Key: $SU_API_KEY" \
  "https://api.scrapeunblocker.com/travel/airbnb-room?room=35283352&check_in=2026-11-10&check_out=2026-11-13&adults=2&include_reviews=true"
import requests

resp = requests.post(
    "https://api.scrapeunblocker.com/travel/airbnb-room",
    headers={"X-ScrapeUnblocker-Key": SU_API_KEY},
    params={"room": "35283352", "check_in": "2026-11-10", "check_out": "2026-11-13", "adults": "2", "include_reviews": "true"},
)
print(resp.text)
import { ScrapeUnblockerClient } from 'scrapeunblocker';

const su = new ScrapeUnblockerClient({ apiKey: process.env.SU_API_KEY });

const listing = await su.airbnbRoom('35283352', {
  checkIn: '2026-11-10',
  checkOut: '2026-11-13',
  adults: 2,
  includeReviews: true,
});
console.log(listing);

Requests are POST and take their parameters in the query string. Browser rendering always happens - there is no flag to enable.

Example response

{
  "id": "35283352",
  "url": "https://www.airbnb.com/rooms/35283352",
  "title": "Cozy studio close to Champs Elysées & Eiffel tower",
  "subtitle": "Entire rental unit in Paris, France",
  "description": "Welcome to our cozy studio apartment in the heart of Paris equipped with everything you might need for rest and refuge amidst a busy Parisian...",
  "roomType": "Entire home/apt",
  "propertyType": "Entire rental unit",
  "location": {
    "address": "Paris, Île-de-France, France",
    "country": "France",
    "lat": 48.87202,
    "lng": 2.28852,
    "isExact": false
  },
  "host": {
    "name": "Moutaz",
    "isSuperhost": true,
    "isVerified": true,
    "yearsHosting": 7,
    "rating": 4.89,
    "reviewsCount": 202,
    "responseRate": 100,
    "responseTime": "Responds within a few hours"
  },
  "rating": {
    "overall": 4.9,
    "accuracy": 4.93,
    "cleanliness": 4.86,
    "checkin": 4.95,
    "communication": 4.98,
    "location": 4.97,
    "value": 4.86
  },
  "reviewsCount": 176,
  "isGuestFavorite": true,
  "guests": 2,
  "bedrooms": 0,
  "beds": 2,
  "bathrooms": 1,
  "amenities": [
    {
      "group": "Bathroom",
      "items": [
        { "name": "Hair dryer", "available": true },
        { "name": "Cleaning products", "available": true }
      ]
    }
  ],
  "photos": [
    {
      "url": "https://a0.muscache.com/im/pictures/hosting/Hosting-U3RheVN1cHBseUxpc3Rpbmc6MzUyODMzNTI%3D/original/5866c4a9-69d2-4f85-ba36-c7bce31ca45b.jpeg",
      "caption": null,
      "room": "Living area"
    }
  ],
  "houseRules": ["Self check-in with lockbox", "2 guests maximum", "No pets"],
  "checkIn": "Check-in after 2:00 PM",
  "checkOut": "Checkout before 11:00 AM",
  "cancellationPolicy": {
    "summary": "Free cancellation for 24 hours. After that, the reservation is non-refundable. Review this host's full policy for details."
  },
  "available": true,
  "canInstantBook": true,
  "price": {
    "total": 502.0,
    "totalText": "$502",
    "nightly": 167.11,
    "nightlyText": "$167.11",
    "nights": 3,
    "currency": "USD",
    "qualifier": "for 3 nights",
    "breakdown": [
      { "label": "3 nights x $167.11", "amount": 501.33, "amountText": "$501.33" }
    ]
  },
  "reviews": [
    {
      "id": "1783949263908511671",
      "rating": 5,
      "text": "Logement très bien situé avec toutes les commodités. Moutaz répond rapidement.",
      "translatedText": "Very well-located accommodation with all amenities. Moutaz responds quickly.",
      "language": "fr",
      "date": "2026-09-27T09:08:44Z",
      "stayDetail": "Stayed a few nights",
      "author": { "name": "Yvan", "location": "North Hatley, Canada", "profileUrl": "..." },
      "response": null
    }
  ],
  "reviewsCollected": 3,
  "source": "api",
  "warnings": []
}

Read the API docs

Frequently asked questions

Is it legal to scrape Airbnb listings?

Collecting publicly available listing data - descriptions, amenities, ratings and prices - is lawful in many jurisdictions, but the rules depend on your country, the data you collect and how you use it. Host names and guest reviews can be personal data, so follow the privacy rules that apply to you. ScrapeUnblocker returns the public listing; what you collect and how you use it is your decision.

How do I scrape an Airbnb listing without getting blocked?

Airbnb uses bot detection and rate limiting. The /travel/airbnb-room plugin reads the listing from Airbnb's own listing data through ScrapeUnblocker's exits, with no browser render on the normal path. When Airbnb changes its internal query, the plugin reads the live room page once, learns the new query and carries on; if the query still fails, it answers from the room page itself and lists the missing fields in warnings. In ScrapeUnblocker's benchmark it returned the listing on 100% of 1,099 calls with different listings, about 2.1s per call.

What data do I get for each listing?

The title, the description and its language, room and property type, the address, country and coordinates, and the host: name, superhost and verified flags, response rate and time, years hosting and the host's own rating. Then the overall rating with the six category ratings (accuracy, cleanliness, check-in, communication, location, value), the review count, the 1-5 star distribution and review tags, the Guest favorite flag, guests, bedrooms, beds, bathrooms and sleeping arrangements, grouped amenities, every photo with its room label, highlights, house rules, check-in and check-out times and safety notes. With dates you also get availability, the instant-book flag, the cancellation policy and the price.

Do I need an Airbnb API or account?

No. Airbnb does not offer a public API for listing data, and the plugin needs no Airbnb account or login: send a listing id such as 35283352, or a room URL from any Airbnb domain, with your ScrapeUnblocker key and get the listing back as JSON. Use our Airbnb search plugin (/travel/airbnb) to find the listing ids for a city, then this plugin to read each one in full.

Can I get the price for my dates, in my currency?

Yes. Pass check_in and check_out (YYYY-MM-DD) with adults, children, infants and pets, and the response adds availability, the cancellation policy and the price: the total, the nightly rate, the number of nights, Airbnb's breakdown and the rate options Airbnb offers, such as non-refundable or refundable. currency sets the ISO currency (default USD) and locale the language of Airbnb's texts, such as de or pt-BR; host-written text and reviews come back translated when Airbnb has a translation.

How much does it cost to scrape Airbnb listings?

Each call is one request, with or without dates, and with up to 100 reviews in the same call. 1 request = 1 credit, EUR 1.00 per 1,000 on pay as you go, down to about EUR 0.55 per 1,000 on the Ultimate plan. Blocks and timeouts are not billed, and the free trial includes 500 requests with no card.

Related scrapers

Start scraping this site today

Free tier included. No credit card required to test it.