Airbnb Scraper — Listings, Prices, Reviews & Hosts avatar

Airbnb Scraper — Listings, Prices, Reviews & Hosts

Pricing

Pay per event

Go to Apify Store
Airbnb Scraper — Listings, Prices, Reviews & Hosts

Airbnb Scraper — Listings, Prices, Reviews & Hosts

Airbnb scraper API: listings by location or URL with nightly and total prices for your dates, ratings, host, amenities, photos, coordinates, plus reviews. JSON/CSV/Excel.

Pricing

Pay per event

Rating

0.0

(0)

Developer

Tristan Leroux

Tristan Leroux

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Security

Limited permissions

Share

Airbnb Scraper

Scrape Airbnb listings by location or URL with the nightly and total price for your dates, discounts, ratings, review counts, Superhost and Guest favorite flags, beds, bedrooms and bathrooms, coordinates and photos. Switch on listing details for the full description, every amenity, the host profile, house rules, cancellation terms and sub-ratings, and reviews for guest reviews with host responses — search, details and reviews in one actor, one run, one dataset. No login, no API key. Export as JSON, CSV or Excel, or pull the data through the API.

What does Airbnb Scraper do?

Airbnb Scraper reads what airbnb.com shows a visitor and turns it into clean rows:

  • Search by location — type Lisbon, Portugal, Brooklyn, NY or Lake Tahoe and get the listings of that area, page after page. Airbnb shows about 270 listings per search; for bigger areas the scraper repeats the search in nightly price ranges automatically to go well beyond that.
  • Search URLs — paste a search from airbnb.com with all your filters (property type, amenities, instant book, map area, ...) and get exactly those results.
  • Listing URLs — paste https://www.airbnb.com/rooms/... links to track specific homes.
  • Prices for your dates — with check-in and check-out you get the nightly rate, the total including fees and taxes, the crossed-out original price, the discount in percent and the full price breakdown (cleaning fee, discounts, taxes). Without dates Airbnb's suggested dates and their prices are reported per listing.
  • Guests, currency and price range — adults and children, any currency (USD, EUR, GBP, ...), minimum and maximum price per night.
  • Listing details (optional) — description, all amenities by category, host (name, ID, Superhost, verified, years hosting, response rate and time, about, languages), co-hosts, house rules, check-in and checkout times, pets and children policy, cancellation terms and availability for your dates, location description, sleeping arrangements, all photos and the six sub-ratings (cleanliness, accuracy, check-in, communication, location, value).
  • Reviews (optional) — newest first: rating, text, language, English translation, date, reviewer name and ID, length of stay and the host's response.

Use cases

  • Short-term rental investors — size up a market before you buy: nightly rates, occupancy signals, ratings and the competition per neighbourhood.
  • Hosts and property managers — benchmark your listing against nearby homes for the same dates, track competitors' prices and discounts, and see which amenities top-rated homes offer.
  • Travel and booking startups — feed live prices, photos and coordinates into a search, map or comparison product.
  • Real estate and market researchers — build datasets of supply, price levels and property types across cities and seasons.
  • Revenue and pricing teams — schedule daily runs for fixed dates and watch how prices move.
  • Data and AI teams — reviews with ratings and languages for sentiment analysis, descriptions and amenities for classification or LLM pipelines.

How much does it cost?

You pay only for the rows you get (pay-per-event). Duplicates and rows over your maxItems limit are never charged.

EventWhat you pay forFree planPaid plans (from)
listingOne listing row from a search or listing URL (price, rating, location, photos)$2.50 per 1,000$1.60 per 1,000
listing-detailOne listing row with Listing details switched on (charged instead of listing)$4.00 per 1,000$2.50 per 1,000
reviewOne guest review row$0.50 per 1,000$0.30 per 1,000

"Paid plans (from)" is the Gold-and-above price; Bronze ($2.20 / $3.50 / $0.40) and Silver ($1.90 / $3.00 / $0.35) plans sit in between. Apify also charges a tiny actor-start fee ($0.00005 per run).

Worked examples (Free plan prices):

  1. Price check of a city for one weekend — 1,000 listings in Lisbon with your dates: 1,000 × $2.50 / 1,000 = $2.50 ($1.60 on Gold and above).
  2. Competitor deep dive — 200 listings with details and their 20 newest reviews each: 200 × $4.00 / 1,000 + 4,000 × $0.50 / 1,000 = $0.80 + $2.00 = $2.80 ($1.70 on Gold and above).

The Apify Free plan includes $5 monthly credit, enough for about 2,000 listings every month.

How to use Airbnb Scraper

In Apify Console:

  1. Open Airbnb Scraper and click Try for free.
  2. Type one or more Locations (the form is prefilled with Lisbon, Portugal) and/or paste Airbnb search or listing URLs.
  3. Optionally set Check-in and Check-out dates, guests, currency and a price range.
  4. Switch on Listing details and/or Reviews if you need them, and set Max items.
  5. Click Start. 50 listings take a few seconds; 1,000 listings with dates about a minute.
  6. Open the Output tab and export the dataset as JSON, CSV, Excel or HTML.

Through the API:

  1. Get your API token in Apify Console → Settings → Integrations.
  2. Call the actor with your input JSON (see Integrations and API).
  3. Read the dataset items from the run.

Input

FieldTypeDefaultDescription
locationQueriesarray–Locations as typed on airbnb.com: Lisbon, Portugal, Brooklyn, NY, Lake Tahoe.
startUrlsarray–Airbnb search URLs (https://www.airbnb.com/s/Paris/homes?...) and/or listing URLs (https://www.airbnb.com/rooms/12345678); any Airbnb country domain.
checkIn / checkOutstring–Stay dates (YYYY-MM-DD) for exact prices. Without dates Airbnb's suggested dates are used and reported per row.
adults / childreninteger–Guests; only listings for that many guests, prices for that group.
currencystringUSDCurrency of all prices (EUR, GBP, CAD, ...).
priceMin / priceMaxinteger–Nightly price range in that currency.
includeDetailsbooleanfalseOpen every listing page: description, amenities, host, house rules, cancellation terms, sub-ratings, all photos. Billed as listing-detail.
includeReviewsbooleanfalseAdd guest reviews as separate rows (type: "review").
maxReviewsPerListinginteger20Newest reviews per listing; 0 = all.
maxItemsinteger1000Hard cap on rows for the whole run (listings plus reviews).
maxListingsPerSearchinteger0Cap per location or search URL; 0 = no cap.
splitLargeSearchesbooleantrueRepeat searches that hit Airbnb's ~270-listing cap in nightly price ranges.
proxyConfigurationobjectApify ProxyProxy settings.
debugbooleanfalseLog every request.

Example — two cities for a December weekend, two adults, prices in euros:

{
"locationQueries": ["Lisbon, Portugal", "Barcelona, Spain"],
"checkIn": "2026-12-10",
"checkOut": "2026-12-14",
"adults": 2,
"currency": "EUR",
"maxItems": 1000
}

Example — a filtered search URL and one tracked listing, with details and the 10 newest reviews:

{
"startUrls": [
"https://www.airbnb.com/s/Paris--France/homes?room_types%5B%5D=Entire%20home%2Fapt&min_bedrooms=2",
"https://www.airbnb.com/rooms/9092386"
],
"checkIn": "2026-12-17",
"checkOut": "2026-12-20",
"includeDetails": true,
"includeReviews": true,
"maxReviewsPerListing": 10,
"maxItems": 500
}

Output

One row per listing (type: "listing"), plus one row per review (type: "review") when reviews are on. Real listing row from 2026-11-05 with Listing details, shortened (photos, amenities, rules and the description cut):

{
"type": "listing",
"id": "9092386",
"url": "https://www.airbnb.com/rooms/9092386?check_in=2026-12-10&check_out=2026-12-14&adults=2",
"name": "Alfama - Amazing River View",
"title": "Entire rental unit in Lisbon, Portugal",
"propertyType": "Entire rental unit",
"roomType": "Entire home/apt",
"neighbourhood": "Santa Maria Maior",
"city": "Lisbon",
"latitude": 38.71171,
"longitude": -9.12912,
"rating": 4.93,
"reviewCount": 881,
"isSuperhost": true,
"isGuestFavorite": true,
"hostType": "Individual host",
"badges": ["Guest favorite", "Superhost"],
"bedrooms": 1,
"beds": 1,
"bathrooms": 1,
"maxGuests": 2,
"bedLabels": ["1 bedroom", "1 bed", "1 bath"],
"currency": "EUR",
"pricePerNight": 102.25,
"totalPrice": 430.77,
"originalPrice": null,
"discountPercent": null,
"nights": 4,
"priceLabel": "€431 total",
"priceBreakdown": [
{ "label": "4 nights x €102.25", "amount": 409.0 },
{ "label": "Discount from Airbnb", "amount": -10.23 },
{ "label": "Taxes", "amount": 32.0 }
],
"checkIn": "2026-12-10",
"checkOut": "2026-12-14",
"adults": 2,
"children": null,
"photos": ["https://a0.muscache.com/im/pictures/df2fd0b1-3391-49af-89e3-215fcc05018c.jpg"],
"thumbnail": "https://a0.muscache.com/im/pictures/df2fd0b1-3391-49af-89e3-215fcc05018c.jpg",
"propertyId": null,
"searchQuery": "https://www.airbnb.com/rooms/9092386",
"position": null,
"scrapedAt": "2026-11-05T09:19:04Z",
"locationName": "Santa Maria Maior, Lisbon",
"isExactLocation": false,
"subRatings": { "accuracy": 4.95, "checkin": 4.92, "communication": 4.97, "value": 4.89, "cleanliness": 4.97, "location": 4.93 },
"isNewListing": false,
"isAvailable": true,
"canInstantBook": true,
"cancellationPolicy": "Free cancellation before December 5",
"priceNote": "Your price is below the 60-day average",
"description": "This small and charming apartment fully restored, offers a wonderful view over the old rooftops of Alfama ...",
"highlights": [{ "title": "Beautiful and walkable", "description": "Guests say this area is scenic and it’s easy to get around." }],
"amenities": [{ "group": "Internet and office", "title": "Wifi", "available": true, "subtitle": null }],
"amenityNames": ["City skyline view", "River view", "Hair dryer", "Wifi", "Kitchen"],
"host": {
"id": "32293705",
"name": "António",
"isSuperhost": true,
"isVerified": true,
"rating": 4.89,
"reviewCount": 2812,
"yearsHosting": 11,
"monthsHosting": 3,
"responseRate": "100%",
"responseTime": "Responds within an hour",
"highlights": ["Speaks English and Portuguese", "Lives in Carcavelos, Portugal"],
"profileUrl": "https://www.airbnb.com/users/show/32293705",
"hostType": "INDIVIDUAL"
},
"coHosts": [{ "name": "Mariana", "isSuperhost": false }],
"houseRules": [{ "group": "House rules", "title": "Quiet hours", "description": "10:00 PM - 7:00 AM" }],
"checkInTime": null,
"checkOutTime": null,
"safetyAndProperty": ["Carbon monoxide alarm not reported", "Smoke alarm not reported", "Must climb stairs"],
"petsAllowed": false,
"childrenAllowed": false,
"locationDescription": "A few minutes walking distance you can reach many cultural and historic attractions ...",
"gettingAround": "Taxis, buses, trams and the subway are nearby. Santa Apolónia railway station is just 5 minutes walking distance.",
"sleepingArrangements": [{ "room": "Bedroom", "beds": "1 double bed" }]
}

Review row:

{
"type": "review",
"id": "1809350353139313050",
"listingId": "9092386",
"listingUrl": "https://www.airbnb.com/rooms/9092386",
"rating": 5,
"text": "Fijn verblijf, perfect voor een aantal dagen Lissabon",
"language": "nl",
"textTranslated": "Nice stay, perfect for a few days in Lisbon.",
"createdAt": "2026-11-01T10:16:10Z",
"localizedDate": "3 days ago",
"stayHighlight": "Stayed a few nights",
"reviewerName": "Valerie",
"reviewerId": "337465191",
"reviewerProfileUrl": "https://www.airbnb.com/users/show/337465191",
"reviewerTenure": "7 years on Airbnb",
"hostResponse": null,
"hostResponseDate": null,
"hostResponderName": null,
"photos": [],
"scrapedAt": "2026-11-05T09:19:05Z"
}

Field notes:

  • Listings without Listing details contain the fields up to scrapedAt; search rows also have neighbourhood and position (rank in the search). The detail fields (from locationName on) are added with Listing details.
  • totalPrice is what Airbnb shows as the total for the stay: on the default (US) proxy that is the price after discounts and before taxes ("$414 for 3 nights"); visitors from regions where Airbnb displays tax-inclusive totals get the total with taxes. priceBreakdown lists every line (nightly rate × nights, discounts, cleaning and resort fees, taxes where shown); pricePerNight is the nightly rate before fees, originalPrice the crossed-out total and discountPercent the saving against it.
  • Without dates, checkIn/checkOut are Airbnb's suggested dates for that listing and the prices refer to them. Listing URLs without dates have no price.
  • cancellationPolicy, isAvailable and canInstantBook refer to your dates.
  • roomType is one of Entire home/apt, Private room, Shared room, Hotel room; propertyType is Airbnb's own label (Apartment, Entire rental unit, Room in hotel, ...).
  • rating is null and reviewCount 0 for listings marked "New".

Integrations and API

Run the actor and get the items back in one call:

curl -X POST "https://api.apify.com/v2/acts/innolabs~airbnb-scraper/run-sync-get-dataset-items?token=YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"locationQueries": ["Lisbon, Portugal"], "checkIn": "2026-12-10", "checkOut": "2026-12-14", "maxItems": 100}'

Python with apify-client:

from apify_client import ApifyClient
client = ApifyClient("YOUR_TOKEN")
run = client.actor("innolabs/airbnb-scraper").call(
run_input={
"locationQueries": ["Barcelona, Spain"],
"checkIn": "2026-12-10",
"checkOut": "2026-12-14",
"adults": 2,
"currency": "EUR",
"includeDetails": True,
}
)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item["name"], item["neighbourhood"], item["pricePerNight"], item["totalPrice"], item["rating"])
  • Make, Zapier, n8n — use the Apify app/node to start the actor and send new listings or price drops to Google Sheets, Airtable, Slack or email.
  • Scheduling — create a schedule in Apify Console (e.g. every morning for the same dates) to keep a daily price history of a market.
  • Webhooks — trigger your pipeline when a run finishes.
  • AI agents (MCP) — connect Claude, Cursor or other MCP clients through the Apify MCP server at https://mcp.apify.com and let your agent look up Airbnb prices and reviews.

FAQ

The scraper only reads pages that Airbnb shows to every visitor without logging in; it does not book, message hosts or access private data. Reviews contain reviewers' first names as published by Airbnb; handle personal data according to the GDPR and your local laws. Check Airbnb's terms for how you use the data. This actor is not affiliated with or endorsed by Airbnb.

How many listings can I get for a city?

Airbnb itself shows at most about 270 listings per search. With Split large areas by price (on by default) the scraper repeats the search in about 15 nightly price ranges and halves the ranges that are still full; duplicates are removed. In our tests one run for Lisbon, Portugal returned 8,000 listings (about 12 minutes). You can also add search URLs for smaller areas (neighbourhoods, map areas) or several locations.

Why do prices differ from what I see in my browser?

Prices depend on dates, number of guests, currency and the country Airbnb thinks you are in (taxes and fee display rules differ by region). Set Check-in, Check-out, Adults and Currency to get the price for your stay. Without dates, each listing comes with Airbnb's suggested dates, so rows can have different dates.

Do I need proxies or an Airbnb account?

No account is needed. The default Apify Proxy works; when a request is refused the scraper switches IP and retries automatically.

Can I scrape a single listing or my competitors' listings?

Yes, paste listing URLs (https://www.airbnb.com/rooms/...) into Airbnb URLs. With dates you get the price, availability and cancellation terms for that stay; switch on Listing details for the full listing page and Reviews for its reviews.

How are reviews sorted and how many can I get?

Newest first. Max reviews per listing limits them per listing (20 by default, 0 = all). Reviews in other languages come with Airbnb's English translation in textTranslated.

What happens with listings that no longer exist?

They are reported in the log and in the run's SUMMARY record ("listing not found") and the run continues with the other inputs. Failed inputs are never charged.

Limits

  • About 270 listings per search (Airbnb's limit); price splitting raises this for large areas but cannot guarantee every listing of a huge city.
  • Search rows without dates show Airbnb's suggested dates and prices for them; bedroom, bed and bath counts appear on search rows when dates are set, and always with Listing details.
  • Listing URLs without dates have no price.
  • checkInTime/checkOutTime are filled only when the host lists them among the house rules.
  • Host profiles beyond what the listing page shows (other listings of the host, full review history) and availability calendars for months ahead are not included.
  • Experiences and services are not scraped, only stays (homes and hotels).