Airbnb Listings Scraper
Pricing
$3.20 / 1,000 listing scrapeds
Airbnb Listings Scraper
🔥 Airbnb data, NO login! Scrape listings by location or URL — 70+ fields each: price/night, total price, fees, rating + breakdown, reviews, room type, host & superhost, amenities, house rules, coordinates, all photos & URL. Fast and reliable — pay only per listing.
Pricing
$3.20 / 1,000 listing scrapeds
Rating
0.0
(0)
Developer
Bruno
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
18 days ago
Last modified
Categories
Share
Scrape Airbnb listings for any location — with optional check-in/check-out dates and guest count — without a headless browser. The actor sends a browser-grade HTTP request (via got-scraping, routed through Apify Proxy residential IPs) to Airbnb's own search page, then parses the JSON data Airbnb embeds in the page itself to pull out structured listing data. Optionally it also opens each listing's detail page to add amenities, host info, room counts and the rating breakdown.
Why it's useful
Airbnb doesn't have a public listings-search API. This actor gets the same data a browser sees — title, property/room type, full price breakdown, rating, reviews, photos, coordinates, host and amenities — directly from Airbnb's own pages, for any city or region.
Input
{"location": "Barcelona, Spain","checkIn": "2026-06-01","checkOut": "2026-06-07","adults": 2,"maxItems": 30,"enrichDetails": true,"detailEnrichLimit": 50,"currency": "USD"}
location— required. A place name, exactly as you'd type it into Airbnb's search box.checkIn/checkOut— optional,YYYY-MM-DD. Omit for a dates-agnostic search.adults— number of guests (default 2).maxItems— how many listings to return (default 30). The actor follows Airbnb's own pagination cursors across a few pages if needed to reach this count.enrichDetails— defaulttrue. Also opens each listing's detail page to add amenities, host, room counts, rating breakdown, neighborhood and more (one extra request per listing). Setfalsefor a fast, search-only scrape.detailEnrichLimit— cap on how many listings get enriched (default 50); the rest still return all search-card fields.detailConcurrency— how many detail pages to fetch in parallel (default 5).currency— 3-letter code Airbnb should display prices in (default USD).proxyConfiguration— Apify Proxy config; residential is strongly recommended.
Output (per listing)
{"query_location": "Lisbon, Portugal","checkIn": "2026-06-01","checkOut": "2026-06-07","adults": 2,"currency": "USD","id": "15629885","graphqlId": "RGVtYW5kU3RheUxpc3Rpbmc6MTU2Mjk4ODU=","propertyId": null,"name": "Apartment in Lisbon","title": "Apartment in Lisbon","subtitle": "Romantic and cosy studio in the heart of Lisbon.","listingName": "Romantic and cosy studio in the heart of Lisbon.","propertyType": "Serviced apartment","roomType": "entire_home","area": "Lisbon","neighborhood": "Campo de Ourique, Lisbon","price_per_night_display": "$85.60 USD","price_per_night": 85.6,"price_total_display": "$428 USD","price_total": 428,"price_original_display": "$535 USD","price_original": 535,"price_is_discounted": true,"price_qualifier": "total","price_currency": "USD","nights": 5,"cleaning_fee": 35,"taxes_and_fees": 42.1,"service_fee": null,"price_breakdown": [{ "description": "5 nights x $85.60 USD", "amount_display": "$428 USD", "amount": 428 },{ "description": "Taxes and fees", "amount_display": "$42.10 USD", "amount": 42.1 }],"rating": 4.94,"rating_text": "4.94 (321)","reviewsCount": 321,"isSuperhost": true,"isGuestFavorite": true,"badges": ["Guest favorite"],"badgeTypes": ["TOP_X_GUEST_FAVORITE"],"photos": ["https://a0.muscache.com/im/pictures/.../a.jpeg", "..."],"photoCount": 11,"thumbnail": "https://a0.muscache.com/im/pictures/.../a.jpeg","paymentMessages": [],"latitude": 38.7188,"longitude": -9.1576,"url": "https://www.airbnb.com/rooms/15629885","detailsEnriched": true,"personCapacity": 2,"bedrooms": 0,"beds": 1,"bathrooms": 1,"bathroomsText": "1 bath","roomTypeText": "Entire serviced apartment","amenities": ["Kitchen", "Fast wifi – 804 Mbps", "Dedicated workspace", "Elevator", "..."],"amenitiesCount": 50,"host": {"name": "João","id": "32870127","isSuperhost": true,"isVerified": true,"reviewsCount": 2523,"rating": 4.91,"yearsHosting": 10,"responseRate": "Response rate: 100%","responseTime": "Responds within an hour"},"host_name": "João","host_id": "32870127","hostHighlights": ["Speaks English, French, Portuguese, and Spanish", "Lives in Lisbon, Portugal"],"ratingBreakdown": { "cleanliness": 4.9, "accuracy": 4.9, "checkin": 4.9, "communication": 5.0, "location": 4.9, "value": 4.9 },"locationSummary": "A market hall, leafy squares...","isExactLocation": true}
Fields under detailsEnriched are added only when enrichDetails is on (and the listing is within detailEnrichLimit). All search-card fields are always present.
How it works
Airbnb's server-rendered pages embed the full response as JSON in a <script> tag (id="data-deferred-state-0"). The actor:
- Fetches the search page with a browser-like TLS fingerprint/headers through a rotating residential proxy session, retrying with a fresh session up to 5 times if the response looks blocked (captcha page, small body, 403/429/503).
- Locates and
JSON.parses the embedded state, then walks the parsed object generically to find the search-results array (by the known key name, then by shape), so small upstream changes don't break extraction outright. It supports both the currentdemandStayListingcard shape and the olderlistingshape. - Follows Airbnb's own pagination cursors for a few pages to reach
maxItems. - If
enrichDetailsis on, fetches each listing's detail page (PDP) in parallel and merges in amenities, host, room counts, rating breakdown, neighborhood and more. A failed/blocked detail fetch never drops the listing — it just comes back withdetailsEnriched: false.
If every retry still looks blocked, the actor honestly reports { location, error: "blocked (needs residential proxy)" } instead of fabricating data. If the page loads but the JSON shape changed enough that no listings array can be found, it reports that specific diagnosis instead.
Notes
- No headless browser — faster and cheaper than a browser-based scraper.
- Unofficial: this reads Airbnb's own pages, not a published API, so results depend on Airbnb not having changed its page structure.
- Charges per listing returned (
listingevent). Detail-page enrichment does not add charges.
⭐ Enjoying this Actor?
A quick rating/review helps others find it. Want neighborhood/amenity filters or more listing-detail fields added? Open a ticket on the Issues tab.