Airbnb Scraper — Listings, Prices, Calendar & Reviews avatar

Airbnb Scraper — Listings, Prices, Calendar & Reviews

Pricing

Pay per event

Go to Apify Store
Airbnb Scraper — Listings, Prices, Calendar & Reviews

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

Automation Craft

Maintained by Community

Actor 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

  1. Type a location (e.g. Lisbon, Portugal) — or paste an Airbnb search URL, or paste room URLs/IDs.
  2. Optionally set check-in/check-out dates so prices are exact for that stay.
  3. 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. fullCoverage recursively 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

FieldWhat it does
locationQueriesFree-text places, geocode-checked (["Lisbon, Portugal"])
searchUrlsAny airbnb.com/s/... URL — every URL filter is honored as-is
roomUrlsOrIdshttps://www.airbnb.com/rooms/12345 or bare 12345
checkIn / checkOutExact dates → stay-accurate nightly + total pricing
currency / localeOutput currency (ISO code) and language
adultspets, priceMin/Max, placeType, minBedrooms/Beds/Bathrooms, amenityIdsSearch filters. Price is per night — the conversion to Airbnb's stay-total filter is handled for you
scrapeDetailsON = full records; OFF = fast cheap search cards
includeCalendar + calendarMonthsAvailability calendar (1–12 months)
includeReviews + maxReviewsPerListingReviews, newest first
includeHostDetailsExtended host profile
maxListingsStop after N listings (0 = no limit)
fullCoverageCollect past the ~280 cap via map splitting
monitoringModeOutput 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)

EventPrice
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).