Airbnb Scraper: Prices, Calendar, Reviews avatar

Airbnb Scraper: Prices, Calendar, Reviews

Pricing

from $3.20 / 1,000 listings

Go to Apify Store
Airbnb Scraper: Prices, Calendar, Reviews

Airbnb Scraper: Prices, Calendar, Reviews

Scrape Airbnb by location, by pasted search URL or by room ID, with no login. Get nightly and total price in one currency, ratings, amenities, house rules, coordinates, host profiles, a 12-month availability calendar and reviews with host replies. JSON, CSV, Excel, API; empty runs cost $0.

Pricing

from $3.20 / 1,000 listings

Rating

5.0

(3)

Developer

Automation Craft

Automation Craft

Maintained by Community

Actor stats

0

Bookmarked

23

Total users

10

Monthly active users

13 days ago

Last modified

Share

Airbnb Scraper: Prices, Calendar, Reviews

This Airbnb scraper collects listing data three ways with one actor: search a location, paste a search URL, or give room URLs or listing IDs. Turn on only the parts you need, details, availability calendar, reviews, host profile, and pay only for what is actually delivered.

Quick start

  1. Type a location (for example Lisbon, Portugal), or paste an Airbnb search URL, or paste room URLs and bare listing IDs.
  2. Optionally set check-in and check-out dates so prices are exact for that stay.
  3. Pick your currency and press Start. Results land in the dataset as clean JSON, ready to download as CSV or Excel or to read over the Apify API.

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, because 19-digit IDs break in spreadsheets and JS tools otherwise) and a canonical room URL that opens.
  • Title, name, coordinates, rating and review count, badges (for example Guest favorite), photos.
  • With details on (default): description, structured amenities by category, house rules, sub-ratings (cleanliness, location, value and the rest), capacity, and the host: ID, name, profile URL, superhost status, rating average and count, years hosting.
  • Calendar add-on: up to 12 months of per-day availability, check-in eligibility, and min or max nights.
  • Reviews add-on: newest first, with 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.

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 cannot 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." }

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 and 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 (for example "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 about 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 three or four 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 about 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: it remembers what previous runs with the same input already returned and outputs only new listings. New listings cost, repeats do not.
  • No browser under the hood. Pure HTTP against Airbnb's own APIs: fast (a 3-listing detailed run takes about 20 seconds), cheap, and stable.

How much does it cost to scrape Airbnb?

You pay per event, so a run costs exactly what it delivers. These are the current prices; Apify Store tiers take 10% off (Silver) or 20% off (Gold) every result event. The Actor start event is the same for everyone.

EventFree and BronzeSilver (10% off)Gold (20% off)
Actor Start$0.005$0.005$0.005
Search result$0.001$0.0009$0.0008
Listing$0.004$0.0036$0.0032
Calendar$0.002$0.0018$0.0016
Review$0.0005$0.00045$0.0004
Host profile$0.002$0.0018$0.0016

Worked examples at the Free and Bronze prices:

  • 100 search cards (fast mode, scrapeDetails off): $0.105
  • 100 fully detailed listings: $0.505
  • 100 detailed listings plus calendar plus 20 reviews each: $1.705

Reviews are about 10x cheaper than the category leader ($0.0005 against $0.005).

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, for stay-accurate nightly and total pricing
currency / localeOutput currency (ISO code) and language
adults to pets, 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 to 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

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 Galapagos, unicode and ambiguous queries, pasted URLs, bare IDs, every add-on, and every $0-fairness path. The release you are running passed 36 of 36.

FAQ

This actor collects only publicly visible data: no login, nothing behind authentication. It returns no host emails or phone numbers. You are responsible for making sure your own use complies with your local regulations and with Airbnb's terms.

Does Airbnb have a public API for listings and prices?

Airbnb publishes no open listings API for general use. This actor talks over plain HTTP to the same public endpoints that power airbnb.com, with no login and no browser, which is why a 3-listing detailed run finishes in about 20 seconds.

How do I get Airbnb availability calendar data?

Turn on includeCalendar and set calendarMonths (1 to 12). Each listing then carries per-day availability, check-in eligibility, and min or max nights. The calendar holds availability only; for stay prices set checkIn and checkOut instead.

Can I get a host's email or phone number from Airbnb?

No. Airbnb does not publish host contact details, so this actor never returns them. You do get the host ID, name, profile URL, superhost status, rating average and count, years hosting, and with the host profile add-on the about text, verifications and stats.

How do I scrape Airbnb listings for market research?

Run a location query with your dates and currency, leave scrapeDetails on, and turn on fullCoverage to collect past Airbnb's ~280-result cap for a whole city. Add includeCalendar for occupancy work and includeReviews for guest sentiment. For a weekly supply watch, schedule the run with monitoringMode on so only unseen listings are delivered and charged.

Why does this Actor run with limited permissions?

Least privilege. The actor only reads and writes its own storages: the run's dataset and key-value store, plus one named key-value store it creates itself to hold the monitoring-mode memory between runs. It needs nothing else on your account.

More data tools by Automation Craft

Built on the MIT-licensed pyairbnb by John Balvin, vendored and hardened (geo-domain fallback, retry and backoff, cap-beating map recursion, deterministic currency).