Airbnb Scraper
Pricing
from $1.00 / 1,000 results
Airbnb Scraper
Scrape Airbnb listings for any city, search link or listing link, no login or cookies. Get nightly and stay prices, hosts, amenities, photos, ratings, availability calendar and guest reviews. Bulk inputs and filters. Clean JSON for pricing and market research.
Pricing
from $1.00 / 1,000 results
Rating
0.0
(0)
Developer
Data WiKi
Maintained by CommunityActor stats
0
Bookmarked
9
Total users
3
Monthly active users
3 days ago
Last modified
Categories
Features
Share
🚀 What is Airbnb Scraper?
Airbnb Scraper is an Apify Actor that collects public Airbnb listings for any place, search link or listing link: prices, hosts, amenities, photos, ratings, availability and guest reviews. It needs no Airbnb account, login or cookies, saves each listing as soon as it is ready, and exports the data as JSON, CSV or Excel.
- Airbnb scraper no login: the Actor reads only pages any visitor can see, so you need no account, cookies or API key.
- Bulk input: mix place names, Airbnb search links, listing links and listing ids in one run.
- Dated prices: every price states its check-in date, check-out date and number of nights.
- Calendar and reviews on request: the Actor also works as an Airbnb availability calendar scraper when you switch the calendar on, and it adds guest reviews if you want them.
- Repeat runs: start it from a schedule or an API call and compare the results over time.
💡 Click Try for free, type a place such as
Lisbon, Portugal, press Start, and open the Output tab.
📊 What data can you extract from Airbnb?
Airbnb Scraper works as an Airbnb data extractor: every listing becomes one row, shown as 11 tables in the Output tab (Overview, Pricing, Ratings, Hosts, Location, Description, Amenities, Photos, Availability, Reviews, Run info) and exportable as JSON, CSV, Excel, HTML or XML. The main fields are below.
| Field | Description | Example |
|---|---|---|
id, url | Listing id and link | 12345678 |
title, propertyLabel, roomType, propertyType | Name and kind of place | Bright apartment near the river |
bedrooms, beds, bathrooms, personCapacity | Size of the place | 2 |
price | Label, perNight, total, nights, checkIn, checkOut, originalAmount | 120 per night |
rating | guestSatisfaction, reviewsCount and category ratings (accuracy, cleanliness, checking, communication, location, value) | 4.9 |
host, coHosts | Public host details such as name, rating, years hosting, response rate | yearsHosting: 6 |
description, highlights, sleepingArrangements, houseRules | Listing text and rules | Two bedrooms, sleeps 4 |
amenityList, amenities | Amenities as a list and by group | Wifi |
images, thumbnail | Cover photo and all photos | image link |
coordinates, locationLabel, locationDescriptions | Where the listing is | 38.72, -9.14 |
badges, isSuperHost, isGuestFavorite | Badges shown by Airbnb | true |
availability | Share of days not bookable (unavailablePct, unavailablePctNext30, unavailablePctNext90), nextAvailableDate, typicalMinNights, day list | 62.5 |
reviews, reviewsTotal | Guest reviews and their total | 5 |
searchQuery, resolvedPlace, scrapedAt, warnings | Where the row came from, when it was saved, notes | 2026-10-26T10:00:00Z |
⚠️ With Full listing details switched off, a row holds only what the search results show (id, link, title, photos, coordinates, rating, bedrooms, beds, bathrooms, badges and price). The other detail fields are then absent from the row, not empty.
Host data stays limited to public profile details, which is all an Airbnb host scraper can see. A separate Reviews table holds one row per guest review, and the Inputs overview holds one row per input with its status.
💡 Use cases for Airbnb data
- Track prices over time: run the same places and dates on a schedule as an Airbnb price tracker, and save each run to compare.
- Compare competitors: line up price, rating, amenities and photos of nearby listings for an Airbnb competitor analysis of your own place.
- Research a market: collect listings by area as Airbnb market research data. Repeat the search per neighbourhood and season for short term rental market analysis.
- Estimate occupancy: the calendar share of days that are not bookable gives an Airbnb occupancy rate estimate you can compare between areas.
- Plan revenue and investment: combine
price.perNightwithavailability.unavailablePctin your own sheet for an Airbnb revenue estimate. The Actor does not calculate revenue, and the same columns can feed an Airbnb investment property analysis. - Compare vacation rental pricing: collect vacation rental pricing data for the same dates across places and room types.
- Analyse guest feedback: export the Reviews table and run your own Airbnb review sentiment analysis on the comments.
- Build datasets: keep the rows as short term rental data for dashboards. You can also use them as Airbnb data for machine learning in your own models.
🛠️ How to scrape Airbnb listings
This Airbnb scraper Apify Actor runs in the Apify Console, so there is nothing to install. As an Airbnb data scraper it needs only the places you want to cover.
- Create a free Apify account.
- Open Airbnb Scraper in the Apify Store.
- Add places, Airbnb search links, listing links or listing ids under Places, search links & listing links.
- Set dates, guests, currency, filters and the extras you want (details, calendar, reviews).
- Click Start and watch the log: each saved listing appears as a line.
- Open the Output tab and download the data as JSON, CSV or Excel, or read it with the API.
How to web scrape Airbnb for one city
Enter the city and country (for example Austin, Texas), set maxItems to the number of listings you want, and add checkIn and checkOut if you need exact stay prices. The resolvedPlace field then shows which place Airbnb matched.
How to scrape Airbnb reviews
Switch on includeReviews, choose maxReviews and reviewsSort, and run. You can scrape Airbnb reviews for each listing, and every review also lands in the separate Reviews table.
💰 How much does it cost to scrape Airbnb?
Airbnb Scraper uses pay-per-event pricing: you pay for each listing saved in the main dataset. As an Airbnb price scraper it bills by saved listing, not by field. Prices below are the Actor's public prices; see the Pricing tab for current rates.
- Results (
main_result): charged per listing saved. Full details, calendar and reviews do not change the price, rows in the Reviews table and the Inputs overview are not charged, and duplicate listings are skipped and not billed. - Dataset item (
apify-default-dataset-item): $0.00001 per result saved in the default dataset (the same on every plan tier), which is $0.01 per 1,000 results. - Actor start (
apify-actor-start): $0.00005 per event, one event per GB of memory. The Actor is set to 1024 MB (1 GB), so the start fee is $0.00005 per run.
| Plan tier | main_result per result | main_result per 1,000 results |
|---|---|---|
| Free | $0.0025 | $2.50 |
| Bronze | $0.0020 | $2.00 |
| Silver | $0.0015 | $1.50 |
| Gold, Platinum, Diamond | $0.0010 | $1.00 |
Example: 200 listings on the Free tier cost 200 x $0.0025 = $0.50 for results, plus 200 x $0.00001 = $0.002 for dataset items, plus the $0.00005 start fee, so $0.50205 in total. The same run on the Gold tier costs 200 x $0.0010 = $0.20, plus $0.002, plus $0.00005, so $0.20205.
Apify platform usage (compute) is billed on top of the events above. A maximum cost per run in Apify stops the run cleanly and keeps the listings already saved.
⬇️ Input
The only required field is Places, search links & listing links (urls), one entry per line. Everything else is optional. This example reads 20 listings from one city with full details:
{"urls": ["Lisbon, Portugal"],"maxItems": 20,"adults": 2,"currency": "USD","includeDetails": true}
Open the Input tab for every option. These are the main fields:
| Field | What it does |
|---|---|
urls | Place names, Airbnb search links, listing links or listing ids (digits). Anything else is marked invalid in the Inputs overview and does not stop the run. Non-Latin place names are not understood: write Tokyo, Japan or paste a search link. |
maxItems | One total across all places and search links (default 10). 0 means every listing Airbnb shows. Listing links are not counted against it, but each saved listing is charged. |
checkIn, checkOut | YYYY-MM-DD. Set both for exact stay prices and only listings free on those dates. A single date is ignored, check-out must be after check-in, and a check-in in the past stops the run with an input message. |
adults, children, infants, pets | Adults 1 to 16 (default 2); the others 0 to 10 (default 0). |
currency | Any 3-letter code, default USD. |
priceMin, priceMax | Per night, in the chosen currency; 0 means no limit. A minimum above the maximum is rejected. |
minBedrooms, minBeds, minBathrooms | 0 means any. |
roomType | any, entire_home, private_room, shared_room or hotel_room. Airbnb ignores the shared-room filter for logged-out searches, so check roomType in the rows. |
includeDetails | Default on; one extra page is read per listing. Turn it off for a fast overview. |
includeCalendar, calendarMonths | Adds the Airbnb availability calendar, 1 to 12 months ahead (default 12). |
includeReviews, maxReviews, reviewsSort | Guest reviews; maxReviews 0 means all; sort newest, best, highest or lowest. |
proxyConfiguration | Optional. Runs start without a proxy and switch to a proxy when needed. |
💡 Keep
maxItemslow for a first test run.
⬆️ Output
The scraped results are shown as a dataset in the Storage tab. The table view is for convenience and doesn't show all the fields. Export as JSON, CSV, Excel, HTML or XML, and pick the fields before exporting.
The example below is one row from a dated city search with calendar and reviews switched on. All names and numbers are fictional and only show the shape of a row.
{"id": "12345678","url": "https://www.airbnb.com/rooms/12345678","title": "Bright apartment near the river","roomType": "Entire home/apt","personCapacity": 4,"bedrooms": 2,"beds": 2,"bathrooms": 1,"isSuperHost": true,"rating": { "guestSatisfaction": 4.9, "reviewsCount": 120, "cleanliness": 4.9, "location": 4.8 },"price": { "label": "$480 for 4 nights", "perNight": 120, "total": 480, "nights": 4, "checkIn": "2027-03-10", "checkOut": "2027-03-14" },"host": { "name": "Example Host", "isSuperHost": true, "rating": 4.9, "yearsHosting": 6 },"availability": { "unavailablePct": 62.5, "nextAvailableDate": "2027-03-01" },"reviews": [ { "createdAt": "2026-09-02", "rating": 5, "text": "Great stay.", "reviewer": { "name": "Sample Guest" } } ],"resolvedPlace": "Lisbon, Portugal","scrapedAt": "2026-10-26T10:00:00Z"}
Good to know about the rows:
- Each listing is one row, so a single run gives you an Airbnb listings dataset to load into your own database.
- Join the main table and the Reviews table on the listing id to get an Airbnb listings and reviews dataset.
- Every guest review is its own row, which is what you expect from an Airbnb reviews scraper: rating, text, date, language, reviewer first name and location, and the host reply.
- Run one place per input to get Airbnb market data by city.
rating.checkingis the Check-in category rating.availableForDatesandunavailableReasonare filled only for listing links when you set dates.searchQueryandresolvedPlaceare not set for listing links.
⚠️ Limitations and error handling
- English only: text comes back in English, and non-Latin place names are not understood.
- Public data only: private content, messages and bookings are not read. There are no email or phone fields.
- Booked or blocked: the calendar says a day is not bookable, not whether a guest booked it or the host blocked it.
- No dates: Airbnb prices a stay length it picks itself; each
pricestates the check-in, check-out and nights it covers. - Long stays: stays over 90 nights may have no price.
- Large areas: big places are searched in more detail, so runs with
maxItemsset to0take longer. If Airbnb has no more listings for your filters, you get fewer rows thanmaxItems, and a note says so. - Spend limit: the run stops cleanly when your maximum cost per run is reached and keeps the saved listings.
- Occupancy figures: treat them as estimates, and compare each Airbnb occupancy rate by city only for the same calendar months.
The Inputs overview shows one row per input.
| Status | Meaning |
|---|---|
ok | Listings were found and saved. |
failed | The input could not be used. For example: not a place, Airbnb search link, listing link or listing id. |
skipped | Not searched because the listing limit was reached, or not saved because the run stopped at its limit. |
not saved | A listing input produced no row. |
The final status message reads N listings saved, Nothing collected - <reason>, or No listings matched - check the place and your filters. Input problems stop the run with Input problem: <what to change>. The SUMMARY record holds totals, the per-input status and notices.
🔌 Integrating Airbnb Scraper with other apps
Airbnb Scraper runs on the Apify platform, so you can start it from the Apify API, put it on a schedule, call a webhook when a run finishes and connect the dataset to Apify integrations such as Make, Zapier or Google Sheets.
Start it from your own code through the Apify API, as you would any Airbnb scraper API. Python users can call it with the apify-client package for an Airbnb scraper Python workflow, and the API tab has a ready snippet. With the calendar on, each row carries availability for the places you picked.
The Actor has no change-detection mode. For an Airbnb price history tracker, save each scheduled run and compare rows by id and scrapedAt.
AI agents can also run it through the hosted Apify MCP server, see the MCP integration docs.
🔗 Other Actors by data_wiki
The Actors below cover other websites, not Airbnb. They are listed because their data can sit next to rental research, and none of them reads Airbnb or travel data.
| Actor | What it extracts | When to use it |
|---|---|---|
| Facebook Marketplace listings scraper | Marketplace listings with prices, photos, locations and property specs | When you want local sale or rental ads next to your Airbnb rows |
| Facebook group posts scraper | Public group posts, comments and Buy & Sell listings | When you research what a community says about a destination |
| LinkedIn profile scraper for company research | Public LinkedIn profile data without cookies | When you look up companies or people around the rental market |
| OpenRouter provider uptime and latency data | Provider prices, speed and uptime for each OpenRouter model | You compare AI providers instead of stays |
| Tripadvisor hotel review scraper | Reviews, ratings, owner replies and place details for Tripadvisor hotels, restaurants, attractions and tours | When you want what guests write about hotels next to your Airbnb market research |
| Hotel guest reviews from Tripadvisor | One row per review of a hotel, restaurant, attraction or tour, with place details in each row | When you want hotel guest feedback next to your Airbnb research |
| Tripadvisor hotel, restaurant and attraction data | Hotels, restaurants and attractions by keyword or city: rating, rank, price range, amenities | When you compare nearby hotels with the rentals you collected |
Data source: Airbnb.
⚖️ Is it legal to scrape Airbnb?
Airbnb Scraper only extracts data that Airbnb shows to any visitor and does not read private data such as messages or bookings. Results can still contain personal data: guest reviews carry first names and places, and host profiles carry names. Collect it only with a legitimate reason, consider GDPR and Airbnb's terms, and consult a lawyer if unsure. Read more about the legality of web scraping and ethical web scraping.
❓ FAQ
Can you scrape Airbnb without a login?
Yes. The Actor reads only public information, so you need no Airbnb account, cookies or API key. Anything behind a login is not available.
How does Airbnb Scraper work?
You give it places, search links or listing links plus optional dates and filters. It reads the public pages for each input, saves each listing as soon as it is ready, and fills the Reviews table and the Inputs overview alongside. As an Airbnb web scraper it needs no software on your side.
How to scrape Airbnb data in bulk?
The Airbnb listings scraper takes as many places, search links and listing links as you like, one per line. maxItems is one total across all places and search links, so set it high enough, or to 0 for every listing Airbnb shows.
How much does it cost?
You pay per saved listing, from $1.00 to $2.50 per 1,000 depending on your plan tier, plus $0.01 per 1,000 dataset items and $0.00005 per run to start. See the cost section for the full table.
Why am I getting fewer results than expected?
Airbnb may have no more listings for your filters in the area it searched. Loosen price, bedroom or room type filters, check the spelling, or add the country. The Inputs overview shows how many listings each input found.
Why does a price cover a different number of nights than I expected?
Without dates, Airbnb picks a stay length itself. Each price states its own nights. Set both dates for exact stay prices.
Can I export Airbnb listings to Excel?
Yes. Download the dataset as Excel, CSV, JSON, HTML or XML from the Output tab, then open it for your own Airbnb data analysis.
Do I need proxies?
No. Runs start without a proxy and switch to a proxy when needed. You can add your own proxy settings in Proxy configuration.
Can I use Airbnb Scraper through MCP?
Yes. The hosted Apify MCP server (https://mcp.apify.com) lets AI agents find an Actor with search-actors, check it with fetch-actor-details and run it with call-actor.
💬 Your feedback
Found a bug or need another field? Open an issue on the Actor's Issues tab. Need a custom solution? Contact hello.datawiki@gmail.com.