Airbnb Scraper: Every Listing, Prices With Fees, Calendar avatar

Airbnb Scraper: Every Listing, Prices With Fees, Calendar

Pricing

from $0.40 / 1,000 listings

Go to Apify Store
Airbnb Scraper: Every Listing, Prices With Fees, Calendar

Airbnb Scraper: Every Listing, Prices With Fees, Calendar

Scrape every Airbnb listing of a city or map area, past the 280-per-search limit: total stay price with fees, rating, beds, coordinates, photos. Add the 12-month availability calendar and the listing page (amenities, host, rules). By place, search URL or listing ID.

Pricing

from $0.40 / 1,000 listings

Rating

0.0

(0)

Developer

Alexis Morain

Alexis Morain

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

15 hours ago

Last modified

Share

What does Airbnb Scraper do?

Airbnb Scraper returns every listing Airbnb shows for a city or a map area, not just the 280 that one search on airbnb.com lets you page through. Give it a place name, an Airbnb search URL or listing IDs. Each listing comes with its total stay price, cleaning and service fees included, its rating, beds and bathrooms, coordinates and photos. Turn on two options to add the full listing page (description, amenities, host, house rules, ratings by category) and the 12-month availability calendar.

It works as an Airbnb API alternative: no login, no browser, plain HTTP on the same API the Airbnb website calls.

The 280 listings limit, measured

An Airbnb search stops at 7 pages of 40 listings, whatever the area holds ("Over 1,000 homes within map area"). The order also shifts between pages, so those 280 rows hold duplicates. This Actor splits the map into smaller areas until Airbnb serves each one in full, and returns each listing once.

Area, 27 October 2026Airbnb announcesOne Airbnb searchThis Actor, full coverageRun time
Annecy, FranceOver 1,000 homes244 unique (280 rows, 36 duplicates)3,730 unique37 s
Paris, FranceOver 1,000 homes280 at most42,835 unique4 min 22 s
A map area in Vincennes304 homes280 at most306 unique31 s

Every run writes the proof in its SUMMARY record: for each input, the count Airbnb announced in each map cell read in full, and how many distinct listings those cells served. In Paris, cells announcing 41,758 listings served 42,724.

Why scrape Airbnb?

  • Short-term rental investors and analysts: size the supply of a city, find the neighborhoods with the most listings, compare prices per night and occupancy from the calendar.
  • Property managers and hosts: watch competitors around your listings, their prices for your dates, their minimum stays and how full their calendar is.
  • Market research and tourism boards: count listings by type, by Superhost status, by rating, across a whole city.
  • Monitoring: schedule a daily run in New listings only mode and get only the listings that appeared since the last run, with a Slack or Discord message.

What you get on top of a plain search:

  • ✅ Full coverage past the 280 cap, duplicates removed before they are charged
  • ✅ Total stay price with fees for your dates, plus the price per night and the discount when there is one
  • ✅ Availability calendar, 1 to 12 months, day by day, with availability rates for the next 30, 90 and 365 days
  • ✅ Listing page details: description, every amenity, host, house rules, ratings by category, all photos
  • ✅ Three ways in: place name, Airbnb search URL with its map and filters, or listing URL / ID for pipelines
  • ✅ Filters that Airbnb applies on its side: price per night, type of place, bedrooms, beds, bathrooms, guests, pets, Instant Book, Guest favorites

As an Apify Actor, it runs on a schedule, from the API, or from Make, Zapier, n8n and other integrations, with proxy rotation and run monitoring included.

What data can Airbnb Scraper extract?

FieldTypeDescription
id, urlstringAirbnb listing ID and page
namestringListing name
latitude, longitudenumberLocation (Airbnb may offset it, see isExactLocation)
totalPrice, pricePerNight, nightsnumberTotal stay price with fees, price per night, number of nights
originalTotalPricenumberPrice before the discount, when shown
rating, reviewsCountnumberAverage rating out of 5 and number of reviews
isSuperhost, isGuestFavoritebooleanBadges
bedrooms, beds, bathroomsnumberRoom facts from the search card
freeCancellation, promotionsboolean, arrayFree cancellation and other price messages
photosarrayPhoto URLs
propertyType, roomType, personCapacitystring, numberFrom the listing page (details)
description, amenities, houseRules, highlightsstring, arrayFrom the listing page (details)
hostobjectHost first name, ID, Superhost, verified, years hosting, rating, reviews
categoryRatingsobjectCleanliness, accuracy, check-in, communication, location, value
calendarobjectAvailable days and rate in the next 30, 90 and 365 days, minimum stay, first available check-in
calendarDaysarrayEvery day: available, minimum and maximum nights, check-in and check-out possible

How to scrape Airbnb listings

  1. Open the Actor and type a place in Places, for example Lisbon, Portugal. Or paste an Airbnb search URL from your browser after moving the map to the area you want.
  2. Optional: set Check-in and Check-out to get the total price of that stay, fees included, and add guests or filters.
  3. Leave Full coverage on. Set Max listings per search to the number you need, or 0 for the whole area.
  4. Optional: turn on Add listing details and Add availability calendar.
  5. Click Start. Download the results as JSON, CSV or Excel, or read them from the API.

For a list of known listings, paste their URLs or IDs in Listing URLs or IDs: each one returns its full listing page and, with dates, the stay price.

How much will it cost to scrape Airbnb?

You pay per listing returned, and only once per listing in a run. Prices on the Free plan, lower on paid plans:

EventFree planGold plan and above
Listing from a search$1.00 per 1,000$0.40 per 1,000
Detailed listing (listing page and/or calendar, or a listing read by URL or ID)$2.00 per 1,000$0.80 per 1,000
Run start$0.002$0.002

Examples at Free plan prices: 1,000 listings of a city cost $1. The whole of Paris, 42,835 listings, costs about $43 ($17 on Gold). The same 1,000 listings with their calendar and listing page cost $2. A detailed listing is charged instead of a plain one, not on top of it. If the listing page and the calendar both fail to load, the row is charged as a plain listing.

Set Max listings per search or a maximum charge per run to stay within a budget: the run stops cleanly when it is reached and keeps what it already returned.

Input

See the Input tab for every option. The points worth knowing:

  • Places are turned into a map area with OpenStreetMap. A city name gives the city limits. For a precise area, move the Airbnb map and paste the search URL instead.
  • Search URLs keep their map area, dates, guests and filters. The filters of this form only fill what the URL does not set.
  • Prices without dates: Airbnb picks a stay on its own, shown in priceDates. Set dates to compare listings on the same stay.
  • Currency: every price of the run is in the currency you choose, as Airbnb converts it.
{
"locations": ["Lisbon, Portugal"],
"checkIn": "2026-12-04",
"checkOut": "2026-12-07",
"adults": 2,
"roomTypes": ["entire_home"],
"maxListingsPerSearch": 0,
"includeCalendar": true,
"currency": "EUR"
}

Output

You can download the dataset in various formats such as JSON, HTML, CSV, or Excel. A listing from a search with dates:

{
"input": "Vincennes",
"id": "775314634015847773",
"url": "https://www.airbnb.com/rooms/775314634015847773",
"name": "Bright and comfortable apartment",
"latitude": 48.85,
"longitude": 2.4337,
"rating": 4.89,
"reviewsCount": 258,
"isSuperhost": true,
"beds": 1,
"bathrooms": 1,
"roomSummary": ["1 queen bed", "1 bath"],
"totalPrice": 350,
"originalTotalPrice": 428,
"pricePerNight": 116.67,
"nights": 3,
"priceLabel": "€350 for 3 nights, originally €428",
"freeCancellation": true,
"checkIn": "2026-12-04",
"checkOut": "2026-12-07",
"currency": "EUR"
}

With details and calendar, the same row also carries:

{
"propertyType": "Entire rental unit",
"personCapacity": 2,
"categoryRatings": {"cleanliness": 4.8, "accuracy": 4.9, "checkin": 5, "communication": 5, "location": 4.9, "value": 4.8},
"amenities": ["Wifi", "Kitchen", "Free washer – In unit"],
"host": {"id": "123456789", "name": "Ana", "isSuperhost": true, "yearsHosting": 4, "rating": 4.89, "reviewsCount": 258},
"calendar": {
"next30": {"days": 30, "available": 13, "availabilityRate": 0.433},
"next90": {"days": 90, "available": 73, "availabilityRate": 0.811},
"minNightsMostCommon": 2,
"firstAvailableCheckin": "2026-11-08"
},
"calendarDays": [{"date": "2026-11-08", "available": true, "minNights": 2, "maxNights": 1125, "availableForCheckin": true, "availableForCheckout": false}]
}

The SUMMARY record of the run's key-value store gives, for each input, its status, the count Airbnb announced, the listings served by the map cells, the cells and pages read and the duplicates skipped.

Tips and advanced options

  • Monitoring new listings: set Run mode to New listings only and schedule the task daily. The Actor remembers what it returned for this input and charges only new listings. A listing counts as new the first time this input sees it, so one that was hidden from search during earlier runs shows up as new when it comes back.
  • Webhook: add a Slack or Discord incoming webhook URL to get a message at the end of each run that returned something.
  • Speed: a city of 4,000 listings takes under a minute, Paris about 5 minutes. The listing page and the calendar each add one request per listing, so a detailed run is slower.
  • Pipelines: the listing URL / ID mode reads one listing per request, for tools that already know which listings they want.

FAQ, disclaimers and support

Does it return every listing that exists in a city?

It returns every listing Airbnb shows in search for that area and those filters. Listings that are unlisted, snoozed, or not available for your dates (when you set dates) are not in Airbnb's search, so they are not in the results either.

Why are some calendar days unavailable?

Airbnb does not say whether an unavailable day is booked or blocked by the host. The availability rate is therefore an upper bound of occupancy, not an occupancy figure. Airbnb does not show nightly prices in the calendar: the price of a stay comes from the search or the listing page for your dates.

Why do some listings go past my maximum price?

The price filters are applied by Airbnb, exactly as on the website. Airbnb compares its own base nightly price, so a few listings can show a price per night a little above your maximum once discounts and fees are counted. Filter pricePerNight or totalPrice in the dataset if you need a hard limit.

Why is the location a little off?

Airbnb shifts the coordinates of many listings for privacy until a booking is made. isExactLocation (with details) tells which ones are exact.

Our Actors are ethical and do not extract any private user data, such as email addresses, gender, or location. They only extract what the user has chosen to share publicly. We therefore believe that our Actors, when used for ethical purposes by Apify users, are safe. However, you should be aware that your results could contain personal data, such as a host's first name and profile picture. Personal data is protected by the GDPR in the European Union and by other regulations around the world. You should not scrape personal data unless you have a legitimate reason to do so. If you're unsure whether your reason is legitimate, consult your lawyers.

Something is wrong or missing?

Open an issue in the Issues tab: it gets an answer quickly. To call the Actor from your own code, see the API tab.