Airbnb Scraper avatar

Airbnb Scraper

Pricing

from $1.00 / 1,000 listings

Go to Apify Store
Airbnb Scraper

Airbnb Scraper

Scrape Airbnb listings by location or search link: prices for your dates, ratings, hosts, amenities, house rules, cancellation policy, coordinates, photos and availability calendar. Reads whole cities past Airbnb's 270-result limit. No login, no browser.

Pricing

from $1.00 / 1,000 listings

Rating

0.0

(0)

Developer

Steady Scrape

Steady Scrape

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

2

Monthly active users

5 days ago

Last modified

Share

What does Airbnb Scraper do?

Airbnb Scraper extracts Airbnb listings for any location or search link — with the real price for your dates, ratings, Superhost and Guest favorite badges, coordinates, photos, bedrooms and baths — and, when you want them, each listing's full page (description, every amenity, host profile, house rules, cancellation policy, category ratings) and its availability calendar with minimum nights. It talks to the same API Airbnb's own site uses: no login, no browser, no proxies, and a page of 18 listings takes about a second.

It reads whole cities. Airbnb never pages past 270 results for one search, which is why other scrapers return "243 of 2,000". This one splits the map into cells until each fits, and returns every listing in the area, once.

Why use it?

  • 🏙️ Market analysis — every listing of a city or neighborhood with price, rating and occupancy signals, for investors, property managers and revenue managers.
  • 💲 Price monitoring — schedule it with your dates to track what competitors charge for the same stay; totals include Airbnb's fees.
  • 📅 Availability and minimum-stay tracking — the calendar tells which days are bookable and the shortest stay each host accepts.
  • 🗺️ Short-term rental research — density of listings per area, share of entire homes vs rooms, Superhost ratio, hosts with many listings.
  • 🤖 Feed dashboards, sheets and AI agents — JSON, CSV or Excel, or straight into Google Sheets, Slack or Make through Apify integrations.

Features

  • ✅ By place or by link — type Lisbon, Portugal, or paste any Airbnb search link with your filters and the map area you dragged to.
  • ✅ Full coverage — beyond Airbnb's 270-result limit: the whole map area, cell by cell, each listing once.
  • ✅ Prices for your dates — total, per night, original price before discounts, currency of your choice on every run. Without dates, you get the dates Airbnb priced each listing for.
  • ✅ Filters — guests, price range, room type, bedrooms, beds, bathrooms.
  • ✅ Listing details — description, all amenities with availability, host (Superhost, verified, rating, response rate, years hosting, co-hosts), house rules, safety, cancellation policy for your dates, category ratings, rating distribution, review tags, neighborhood notes, all photos with captions, sleeping arrangement, instant book, pets.
  • ✅ Availability calendar — up to 12 months, day by day, with check-in/check-out rules and minimum/maximum nights.
  • ✅ Honest data — where Airbnb resolved your search (resolvedLocation), listings not available for your dates say so, and nothing is guessed.
  • ✅ Fair billing — you pay per listing. Searches Airbnb refuses or that return nothing are reported in the run summary and not charged; a listing found by two searches is charged once.

How to scrape Airbnb listings

  1. Click Try for free.
  2. Type locations or paste search links.
  3. Set check-in and check-out to get real prices and only available places. Choose your currency.
  4. Optionally turn on Include listing details and set Availability calendar months.
  5. Click Start and download the listings as JSON, CSV or Excel. To monitor, add a schedule.

Input example

{
"locations": ["Lisbon, Portugal"],
"searchUrls": ["https://www.airbnb.com/s/Porto--Portugal/homes?checkin=2026-11-06&checkout=2026-11-09&adults=2&price_max=150"],
"checkIn": "2026-11-06",
"checkOut": "2026-11-09",
"adults": 2,
"currency": "EUR",
"roomTypes": ["Entire home/apt"],
"maxListingsPerSearch": 0,
"fullCoverage": true,
"includeDetails": true,
"calendarMonths": 3
}

Output example

Each listing is one item in the dataset (details, calendar and photos shortened here):

{
"id": "1427417218567220620",
"url": "https://www.airbnb.com/rooms/1427417218567220620",
"title": "The Scenic Perch",
"placeType": "Apartment in Santa Maria Maior",
"searchLocation": "Lisbon, Portugal",
"resolvedLocation": "Lisbon",
"latitude": 38.713,
"longitude": -9.1319,
"rating": 4.86,
"reviewsCount": 84,
"isSuperhost": true,
"isGuestFavorite": true,
"badges": ["Guest favorite"],
"bedrooms": 1,
"beds": 1,
"bathrooms": 1,
"roomInfo": ["1 bedroom", "1 double bed", "1 bath"],
"price": {
"total": 351,
"originalTotal": 383,
"perNight": 127.57,
"currency": "USD",
"nights": 3,
"checkIn": "2026-11-02",
"checkOut": "2026-11-05",
"label": "$351 USD for 3 nights"
},
"freeCancellation": false,
"photos": ["https://a0.muscache.com/im/pictures/hosting/Hosting-1427417218567220620/original/d2757cb1-69dd-4a1c-961c-bc79b70b3314.png"],
"scrapedAt": "2026-09-18T02:21:47.921Z",
"details": {
"propertyType": "Entire rental unit",
"description": "Perched within the historic walls of Castelo São Jorge, this bright apartment offers elevated views over Alfama’s rooftops…",
"personCapacity": 3,
"overview": ["3 guests", "1 bedroom", "1 bed", "1 bath"],
"highlights": ["Self check-in", "Unbeatable location", "At-home coffee"],
"amenities": [{ "group": "Bathroom", "name": "Hair dryer", "available": true }, { "group": "Not included", "name": "Washer", "available": false }],
"host": {
"id": "697089575",
"name": "Jardim Do Castelo",
"isSuperhost": true,
"isVerified": true,
"reviewsCount": 298,
"rating": 4.81,
"yearsHosting": 1,
"responseRate": "100%",
"responseTime": "Responds within an hour",
"about": null,
"highlights": [],
"coHosts": []
},
"houseRules": ["Check-in after 3:00 PM", "Checkout before 11:00 AM", "Self check-in with smart lock", "3 guests maximum", "No pets", "Quiet hours (10:00 PM - 6:00 AM)", "No smoking"],
"safety": ["Carbon monoxide alarm installed", "Smoke alarm installed"],
"cancellationPolicy": "Free cancellation for 24 hours. After that, the reservation is non-refundable.",
"canInstantBook": false,
"petsAllowed": false,
"categoryRatings": { "cleanliness": 4.9, "accuracy": 4.9, "checkin": 4.7, "communication": 4.9, "location": 4.8, "value": 4.8 },
"ratingDistribution": { "1": 0, "2": 0, "3": 0, "4": 14.3, "5": 85.7 },
"reviewTags": [{ "name": "VIEW", "count": 37 }, { "name": "LOCATION", "count": 52 }],
"address": "Lisbon, Portugal",
"locationDescriptions": [],
"locationVerified": false,
"images": [{ "url": "https://a0.muscache.com/im/pictures/hosting/Hosting-1427417218567220620/original/95954831-d6ba-4e10-ae8b-723ad4cbe17b.png", "caption": null }],
"sleepingArrangement": [{ "room": "Bedroom", "beds": "1 double bed" }],
"isNewListing": false,
"availableForDates": true
},
"calendar": [{ "date": "2026-11-02", "available": true, "availableForCheckIn": true, "availableForCheckOut": true, "minNights": 2, "maxNights": 90 }],
"minNights": 2
}

Output fields

fieldmeaning
id, url, title, placeTypeThe listing, its page, its name and Airbnb's headline ("Apartment in Lisbon"; empty for map-area searches).
searchLocation, resolvedLocationWhat you searched, and where Airbnb took it (a misspelled place resolves to some city: check this).
latitude, longitudeCoordinates as the search shows them (approximate until the listing page, which is exact for verified locations).
rating, reviewsCount, isSuperhost, isGuestFavorite, badgesRating out of 5 (null for a new listing) and Airbnb's badges.
bedrooms, beds, bathrooms, roomInfoParsed from the listing summary; bedrooms is 0 for a studio and null when Airbnb does not say.
pricetotal for the stay, fees included; originalTotal before a host discount; perNight; nights; the checkIn/checkOut the price is for; null when the listing is not available for the dates.
freeCancellationWhether the search advertised free cancellation.
photosThe search's photos; details.images has all of them, with captions.
detailsWith Include listing details: see the example above. availableForDates is null without dates.
calendar, minNightsWith Availability calendar months: every day from the current month, and the smallest stay accepted on any available day.
scrapedAtUTC ISO 8601.

The run's SUMMARY record (key-value store) lists, per search, how many listings it produced, how many requests it took, where Airbnb resolved it, and any search that was refused or empty.

Limits and tips

  • Airbnb pages 270 listings per search. With Full coverage on (default), a place beyond that is read by map cells: expect a few hundred search requests for a big city. Area scale decides how far around the place's center the cells go (3 covers a city).
  • Dates change everything: with dates you get real totals and only available listings; without them Airbnb prices each listing for dates it picks, reported per listing.
  • Prices are totals for the stay, fees included, the way Airbnb shows them; perNight is Airbnb's nightly rate from the breakdown when it gives one.
  • Details and calendars cost one request each per listing; 40 listings with both took about 30 seconds.
  • A misspelled or unknown place is not an error on Airbnb: it answers with some city. resolvedLocation tells you which.

This Actor reads only data Airbnb shows publicly to anyone, without logging in, and does not collect personal data beyond what hosts publish on their listings. Scraping public data is generally legal; still, make sure your use complies with Airbnb's terms and the laws that apply to you, and use it responsibly. Read Apify's legality of web scraping guide.

Your feedback

Missing a field or a filter? Open an issue on the Issues tab: issues are answered, and the Actor is checked against the live site so it keeps working when Airbnb changes.