Airbnb Scraper: Every Listing, Prices With Fees, Calendar
Pricing
from $0.40 / 1,000 listings
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
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
15 hours ago
Last modified
Categories
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 2026 | Airbnb announces | One Airbnb search | This Actor, full coverage | Run time |
|---|---|---|---|---|
| Annecy, France | Over 1,000 homes | 244 unique (280 rows, 36 duplicates) | 3,730 unique | 37 s |
| Paris, France | Over 1,000 homes | 280 at most | 42,835 unique | 4 min 22 s |
| A map area in Vincennes | 304 homes | 280 at most | 306 unique | 31 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?
| Field | Type | Description |
|---|---|---|
id, url | string | Airbnb listing ID and page |
name | string | Listing name |
latitude, longitude | number | Location (Airbnb may offset it, see isExactLocation) |
totalPrice, pricePerNight, nights | number | Total stay price with fees, price per night, number of nights |
originalTotalPrice | number | Price before the discount, when shown |
rating, reviewsCount | number | Average rating out of 5 and number of reviews |
isSuperhost, isGuestFavorite | boolean | Badges |
bedrooms, beds, bathrooms | number | Room facts from the search card |
freeCancellation, promotions | boolean, array | Free cancellation and other price messages |
photos | array | Photo URLs |
propertyType, roomType, personCapacity | string, number | From the listing page (details) |
description, amenities, houseRules, highlights | string, array | From the listing page (details) |
host | object | Host first name, ID, Superhost, verified, years hosting, rating, reviews |
categoryRatings | object | Cleanliness, accuracy, check-in, communication, location, value |
calendar | object | Available days and rate in the next 30, 90 and 365 days, minimum stay, first available check-in |
calendarDays | array | Every day: available, minimum and maximum nights, check-in and check-out possible |
How to scrape Airbnb listings
- 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. - Optional: set Check-in and Check-out to get the total price of that stay, fees included, and add guests or filters.
- Leave Full coverage on. Set Max listings per search to the number you need, or 0 for the whole area.
- Optional: turn on Add listing details and Add availability calendar.
- 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:
| Event | Free plan | Gold 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.
Is it legal to scrape Airbnb?
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.