Airbnb Scraper
Pricing
from $2.00 / 1,000 results
Airbnb Scraper
Scrape Airbnb listings by destination. Get titles, descriptions, full photo galleries, ratings, prices per night, amenities, room layout, and deep links - ready for travel research, market analysis, and price tracking.
Pricing
from $2.00 / 1,000 results
Rating
0.0
(0)
Developer
Xtractoo
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
0
Monthly active users
8 days ago
Last modified
Categories
Share
Scrape Airbnb listings for any destination and get back the full picture of each property — descriptions, photo galleries, ratings, amenities, room layout, prices, locations, and deep links — all in clean structured JSON.
Whether you are a travel analyst tracking the short-term-rental market, an investor sizing up a destination, a vacation-rental host benchmarking competition, or a developer building a property-search experience, this actor gives you the data you need without the bother of building and maintaining a scraper yourself.
What you can do with it
- Market & investment research — pull all listings for a city and analyze price distributions, occupancy signals, property types, and amenity prevalence.
- Competitive benchmarking — see exactly how comparable properties present themselves: title, photos, amenities, and pricing.
- Lead generation — build property-owner / property-manager lists for outreach.
- Price tracking — schedule the actor to run on a fixed cadence and feed the dataset into your BI stack.
- Travel content & comparison sites — power your own search UI with fresh listings, photos, and ratings.
- Data products — feed a dataset into AI / LLM pipelines that need real-world travel inventory.
Why use this actor
- No Airbnb account required — runs entirely on public data; nothing to sign in to, nothing to keep alive.
- No CAPTCHAs to solve — you give it a destination, it gives you data.
- Rich detail per listing — 30+ structured fields, including the full photo gallery (often 60+ photos) and the full amenities list grouped by category.
- Stable JSON output — fixed schema, ready to feed straight into your warehouse, spreadsheet, or notebook.
- Pay only for results — straightforward per-record pricing on the Apify platform.
How it works
- You give the actor a destination ("Bali, Indonesia"), optional check-in / check-out dates, guests, currency, and how many results you want.
- The actor searches Airbnb for that destination and collects every listing on the result pages.
- For each listing, it visits the listing's detail page and merges in the deeper data — descriptions, photos, amenities, room breakdown, and exact ratings.
- Records are written to the run's dataset one by one and available immediately in the Apify console (JSON, CSV, Excel, XML).
The actor handles pagination, retries, and proxy rotation automatically — you do not need to configure anything beyond your destination.
Input
The minimum input is a destination — everything else has sensible defaults.
{"mode": "search","location": "Bali, Indonesia","adults": 2,"currency": "USD","max_results": 100,"enrich_from_pdp": true,"proxy": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"]}}
| Field | Type | Required | Description |
|---|---|---|---|
mode | string | yes | search to scrape a destination, listings to fetch a specific list of room IDs |
location | string | for search | The destination as you would type it in the Airbnb search box |
check_in / check_out | string | no | ISO YYYY-MM-DD dates — adds availability + accurate pricing |
adults | integer | no | Number of adult guests (default 2) |
currency | string | no | ISO 4217 currency for prices (default USD) |
max_results | integer | no | Hard cap on records pushed (default 100) |
listing_ids | array | for listings | Airbnb numeric room IDs to fetch directly |
enrich_from_pdp | boolean | no | If true (default), each result is enriched with the full detail page |
proxy | object | no | Apify proxy configuration; residential recommended |
Sample output
One record per listing. Real data from a Bali search run:
{"id": "1641776406624726380","url": "https://www.airbnb.com/rooms/1641776406624726380","title": "SIGMA Treehouse — Private Sauna & Sunset Views","property_type": "Treehouse","description_short": "Private jungle treehouse in Munduk, North Bali, with sunset views at cloud level. Slow down with a private sauna, bathtub for two, outdoor fire pit, and cozy movie nights with a projector. Just a 15-minute walk to the nearest waterfall, with many more nearby. Designed for couples or solo travelers seeking peace, nature, and privacy.","person_capacity": 2,"bedrooms": 1,"beds": 1,"bathrooms": 1,"bathroom_type": "private","rating": 5,"rating_count": 2,"is_new_listing": false,"primary_image_url": "https://a0.muscache.com/im/pictures/hosting/Hosting-1641776406624726380/original/af6ae7ab-3625-423c-ac5f-704db237f3ac.jpeg","photo_count": 62,"photo_urls": ["https://a0.muscache.com/im/pictures/hosting/Hosting-1641776406624726380/original/af6ae7ab-3625-423c-ac5f-704db237f3ac.jpeg","https://a0.muscache.com/im/pictures/hosting/Hosting-1641776406624726380/original/3cf6f5db-4a6d-437e-8866-40628b4212b1.jpeg","https://a0.muscache.com/im/pictures/hosting/Hosting-1641776406624726380/original/193839fe-c76b-498f-b9f8-f052ca5810b9.jpeg","...59 more"],"amenity_count": 54,"amenities": ["Mountain view","Valley view","Bathtub","Hair dryer","Outdoor shower","Hot water","...48 more"],"amenities_grouped": [{"group": "Scenic views","items": [{ "title": "Mountain view", "available": true, "icon": "SYSTEM_VIEW_MOUNTAIN" },{ "title": "Valley view", "available": true, "icon": "SYSTEM_VIEW_MOUNTAIN" }]},{"group": "Bathroom","items": [{ "title": "Bathtub", "available": true, "icon": "SYSTEM_BATHTUB" },{ "title": "Bidet", "available": true, "icon": "SYSTEM_TOILET_BIDET" },{ "title": "Hot water", "available": true, "icon": "SYSTEM_HOT_WATER" }]}],"price_per_night": 5029,"price_qualifier": "for 5 nights","currency": "USD","lat": -8.2593,"lng": 115.0704,"android_deeplink": "airbnb://rooms/1641776406624726380","ios_deeplink": "airbnb://rooms/1641776406624726380"}
Output schema
Every result has the same fields. Unset fields are null.
| Field | Type | Description |
|---|---|---|
id | string | Airbnb numeric room ID |
url | string | Canonical listing URL |
title | string | Listing title as shown on Airbnb |
property_type | string | "Entire cabin", "Treehouse", "Private room", etc. |
description_short | string | Hero description |
description_long | string | Full description (when available) |
meta_description | string | SEO description shown on Google |
person_capacity | integer | Maximum guests |
bedrooms / beds / bathrooms | numbers | Room breakdown |
bathroom_type | string | private / shared / half / standard |
rating | number | Overall guest rating (0–5) |
rating_count | integer | Number of reviews |
is_new_listing | boolean | True if Airbnb classifies it as new |
primary_image_url | string | Hero photo URL |
photo_urls | string[] | Every photo URL from the listing gallery |
photo_count | integer | Length of photo_urls |
amenities | string[] | Flat list of available amenities |
amenities_grouped | object[] | Same amenities organised by Airbnb's groups, with icon names |
amenity_count | integer | Length of amenities |
price_per_night | number | Price as shown for the searched stay |
price_qualifier | string | The label Airbnb shows (e.g. "for 5 nights") |
currency | string | ISO 4217 |
lat / lng | numbers | Listing coordinates |
subtitle | string | Search-card subtitle |
android_deeplink / ios_deeplink | strings | Open-in-app links |
Tips
- Start with a small
max_results(3–10) to validate inputs, then scale up. - Set
enrich_from_pdp: falseif you only need basic search-card fields and want a faster, cheaper run. - Combine with the Apify Schedule feature to run nightly price snapshots for a destination.
