Airbnb Scraper — Listings, Prices, Calendar & Reviews
Pricing
Pay per event
Airbnb Scraper — Listings, Prices, Calendar & Reviews
Scrape Airbnb by location, search URL, or room URL/ID in one actor. Nightly + total price in your chosen currency, 12-month availability calendar, reviews with host replies (newest first), host profiles. Fair pay-per-event: $0 on zero results.
Pricing
Pay per event
Rating
5.0
(3)
Developer
Automation Craft
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
11 days ago
Last modified
Categories
Share
Get Airbnb data three ways with one actor: search a location, paste a search URL, or give room URLs / listing IDs. Turn on only the data you need — details, availability calendar, reviews, host profile — and pay only for what is actually delivered.
Quick start
- Type a location (e.g.
Lisbon, Portugal) — or paste an Airbnb search URL, or paste room URLs/IDs. - Optionally set check-in/check-out dates so prices are exact for that stay.
- Pick your currency and run. Results land in the dataset as clean JSON.
A 3-night, 2-adult search of Lisbon with full details costs about half a cent per listing.
What you get
Every listing record includes:
- Prices that are correct: nightly rate AND stay total with the fee breakdown, always in the currency you selected — never silently switched to the proxy country's currency. If Airbnb shows only a stay total, the nightly rate is computed for you. Verified across 13 currencies (USD, EUR, GBP, INR, JPY, BRL, MXN, AUD, THB, ZAR, AED, TRY, KRW).
- Working links: listing ID (as a string — 19-digit IDs break in spreadsheets and JS tools otherwise) and a canonical room URL that opens.
- Title, name, coordinates, rating + review count, badges (e.g. Guest favorite), photos.
- With details on (default): description, structured amenities by category, house rules, sub-ratings (cleanliness, location, value…), capacity, and the host: ID, name, profile URL, superhost status, rating average/count, years hosting.
- Calendar add-on: up to 12 months of per-day availability, check-in eligibility, and min/max nights.
- Reviews add-on: newest first — rating, date, text, reviewer, and the host's reply when one exists.
- Host profile add-on: the host's about text, verification status, and stats.
What this actor does NOT do
Honesty up front, so there are no surprises:
- No emails or phone numbers. Airbnb does not show host contact details publicly; any actor claiming otherwise is guessing from third-party sources.
- Calendar shows availability, not prices. Per-day prices are not in Airbnb's calendar API. For stay pricing, set check-in/check-out dates.
- One currency per run. All prices come back in the currency you select (deterministic). There is no "each listing in its own local currency" mode.
- Flexible-date searches (e.g. "weekend in August") work by pasting the search URL from airbnb.com. The structured inputs cover exact dates only.
- Homes only. Experiences and Services are not scraped.
- A single Airbnb search returns at most ~280 listings — that is Airbnb's cap, not ours. Turn on Full coverage to go past it (see below).
Why this one over the alternatives
- One actor, whole job. The market leader splits search, room URLs, and reviews across 3–4 separate actors — most rated under 3 stars. Here everything is one input form.
- Beats the ~280-result cap.
fullCoveragerecursively splits the map into sub-areas until the whole city is collected. Verified live: 397 unique Porto listings in a single run, where a plain search stops at ~280. - Fair pay-per-event, enforced in code and verified by tests:
- Location not recognized → clear status record, $0
- Search returns nothing → status record, $0
- A listing page fails to load → status record, $0
- Charges always equal delivered data, never attempts.
- Monitoring mode for scheduled runs: remembers what previous runs (same input) already returned and outputs only new listings — new listings cost, repeats don't.
- No browser under the hood. Pure HTTP against Airbnb's own APIs: fast (a 3-listing detailed run takes ~20 s), cheap, and stable.
Inputs at a glance
| Field | What it does |
|---|---|
locationQueries | Free-text places, geocode-checked (["Lisbon, Portugal"]) |
searchUrls | Any airbnb.com/s/... URL — every URL filter is honored as-is |
roomUrlsOrIds | https://www.airbnb.com/rooms/12345 or bare 12345 |
checkIn / checkOut | Exact dates → stay-accurate nightly + total pricing |
currency / locale | Output currency (ISO code) and language |
adults…pets, priceMin/Max, placeType, minBedrooms/Beds/Bathrooms, amenityIds | Search filters. Price is per night — the conversion to Airbnb's stay-total filter is handled for you |
scrapeDetails | ON = full records; OFF = fast cheap search cards |
includeCalendar + calendarMonths | Availability calendar (1–12 months) |
includeReviews + maxReviewsPerListing | Reviews, newest first |
includeHostDetails | Extended host profile |
maxListings | Stop after N listings (0 = no limit) |
fullCoverage | Collect past the ~280 cap via map splitting |
monitoringMode | Output only listings not seen in previous runs |
Example output
{"type": "listing","id": "1547194623602171394","url": "https://www.airbnb.com/rooms/1547194623602171394","title": "Apartment in Lisbon","price": { "nightly": 136.33, "total": 409.0, "nights": 3, "currency": "EUR","breakdown": [{ "description": "3 nights x €126.4", "amount": 379.09 }] },"rating": { "value": 4.91, "reviewCount": 32 },"subRatings": { "cleanliness": 4.88, "location": 4.97, "value": 4.91 },"coordinates": { "latitude": 38.71989, "longitude": -9.12956 },"host": { "id": "8361172", "name": "Camila And Cynthia", "isSuperhost": true,"ratingAverage": 4.86, "yearsHosting": 10,"profileUrl": "https://www.airbnb.com/users/show/8361172" },"amenities": [{ "title": "Kitchen and dining", "values": ["..."] }],"calendar": [{ "month": 8, "year": 2026,"days": [{ "date": "2026-08-01", "available": true, "minNights": 2 }] }],"reviews": [{ "rating": 5, "date": "2026-07-08T15:41:10Z", "text": "...","reviewer": { "name": "Ana" }, "hostReply": null }],"sourceQuery": "Alfama, Lisbon"}
When something can't be delivered you get a status record instead of a silent nothing — and no charge:
{ "type": "status", "status": "location_not_found", "sourceQuery": "Xyzzyland","message": "Airbnb does not recognize this location. No charge was made for it." }
Pricing (pay per event)
| Event | Price |
|---|---|
| Actor start | $0.005 |
| Search result card | $0.001 |
| Listing details | $0.004 |
| Availability calendar (per listing) | $0.002 |
| Review | $0.0005 |
| Host profile add-on | $0.002 |
Worked examples:
- 100 search cards (fast mode): $0.105
- 100 fully detailed listings: $0.505
- 100 detailed listings + calendar + 20 reviews each: $1.81
Reviews are ~10× cheaper than the category leader ($0.0005 vs $0.005).
Tested
Every feature path is verified by a 36-scenario live acceptance suite before each release: 6 continents, 13 currencies, 8 languages, big-city pagination, full-coverage map splitting, tiny villages, the Galápagos, unicode and ambiguous queries, pasted URLs, bare IDs, every add-on, and every $0-fairness path. The release you're running passed 36/36.
FAQ
Is scraping Airbnb legal? This actor collects only publicly visible data — no login, nothing behind authentication. Make sure your use complies with your local regulations and Airbnb's terms.
A field changed / something broke? Airbnb ships changes regularly. Open an issue in the Issues tab — fast fixes and honest answers are the point of this actor.
Built on the MIT-licensed pyairbnb by John Balvin — vendored and hardened (geo-domain fallback, retry/backoff, cap-beating map recursion, deterministic currency).