Airbnb Scraper — Listings & Reviews
Pricing
from $0.76 / 1,000 results
Airbnb Scraper — Listings & Reviews
Scrape Airbnb by city, search URL or listing URL. Prices, all six rating sub-scores, amenities, host portfolio size, reviews and 12-month availability calendars. Price-range splitting passes the 240-listing cap.
Pricing
from $0.76 / 1,000 results
Rating
0.0
(0)
Developer
Unfenced Group
Maintained by CommunityActor stats
1
Bookmarked
2
Total users
1
Monthly active users
10 hours ago
Last modified
Categories
Share
Airbnb Scraper

Extract Airbnb listings anywhere in the world — prices, ratings and every sub-score, amenities, host portfolios, guest reviews and 12-month availability calendars. Give it a city, not a list of URLs. No browser, no API key, no login required.
Why this scraper?
🔎 You don't need listing URLs
Give it a city or a search URL. Price-range splitting walks past Airbnb's 240-listing cap and enumerates the full market.
⭐ Complete rating data
Overall rating, review count, and all six sub-scores — accuracy, cleanliness, communication, location, check-in, value.
🏢 Host portfolio intelligence
Total listings managed per host, host rating, response rate and time, co-hosts. Identify professional operators, not just private hosts. Included — not a separate charge.
📅 Availability calendars
Up to 12 months per listing: available, bookable, check-in/check-out eligibility, minimum and maximum nights.
💬 Guest reviews
Review text, rating, date, language, reviewer, and the host's response.
🔁 Incremental monitoring
Track a market over time. Listings seen in previous runs are skipped, with a 60-day memory.
🌍 92 languages and regions
Titles, descriptions, amenities, house rules and cancellation terms in the language you ask for — from de-AT to ja-JP to es-419.
Input parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
locationQueries | array | [] | Cities or regions to search, e.g. ["Paris, France"]. Uses price-range splitting to pass the 240-listing cap. |
startUrls | array | [] | Airbnb search URLs. Apply filters in your browser first, then paste — all filters are preserved. |
listingUrls | array | [] | Individual listing URLs, e.g. https://www.airbnb.com/rooms/12345678. |
checkIn / checkOut | string | (empty) | YYYY-MM-DD. Enables date-specific pricing in search and location mode. |
adults | integer | 2 | Number of adult guests. Affects pricing and availability. |
currency | string | USD | ISO 4217 code, e.g. EUR, GBP, JPY. |
locale | string | en-US | Language and region for listing content — 92 options, from en-GB and de-AT to ja-JP, zh-TW and es-419. |
priceMin / priceMax | integer | (empty) | Nightly price bounds. Also seed the price-range splitting. |
minBedrooms / minBeds / minBathrooms | integer | (empty) | Minimum room counts. |
skipDetailPages | boolean | false | Fast mode — search-card data only. Much faster and cheaper for large-scale price monitoring. |
includeReviews | boolean | false | Collect guest reviews per listing. |
maxReviewsPerListing | integer | 50 | Cap on reviews per listing. |
includeHostProfile | boolean | false | Add host portfolio size, location and bio. One request per host, cached across the run. |
calendarMonths | integer | 0 | Months of availability to fetch per listing (0–12). |
monitoringMode | boolean | false | Only return listings not seen in previous runs. |
maxResults | integer | 0 | Maximum listings to return. 0 = unlimited. |
useProxy | boolean | false | Residential proxy, for country-specific pricing. Not needed in most cases. |
concurrency | integer | 2 | Price buckets scraped in parallel (1–5). |
Output schema
Fields the source does not publish for a given listing are returned as null, never omitted.
Always present
| Field | Type | Description |
|---|---|---|
id | string | Airbnb listing ID. |
url | string | Canonical listing URL. |
title | string | Listing title. |
subtitle | string | Short summary line. |
room_type | string | Entire home/apt, Private room, Shared room. Always in English, in every locale, so you can group and filter on it. |
price_per_night | number | Nightly price. See Known limitations — search and location mode only. |
price_per_night_original | number | Price before discount. |
price_discounted | number | Discounted price, if the listing is on offer. |
pricing_currency | string | Currency of all price fields. |
pricing_qualifier | string | What the price covers, e.g. for 5 nights. |
pricing_total | number | Total for the selected date range. |
bedrooms, beds, bathrooms | number | Room counts. Half-baths count as 0.5. |
latitude, longitude | number | GPS coordinates. |
city | string | City the listing sits in. |
overall_rating | number | Guest rating out of 5 (null on new listings). |
review_count | number | Number of reviews (null on new listings). |
is_guest_favorite | boolean | Airbnb "Guest favourite" flag. |
badges | array | Card badges, e.g. Superhost. |
thumbnail, main_image_url | string | Primary image. |
images | array | All listing image URLs. |
android_link, ios_link | string | Deep links into the Airbnb app. |
source, scraped_at, content_hash | string | Provenance and change-detection hash. |
With detail pages (default — set skipDetailPages: false)
| Field | Type | Description |
|---|---|---|
property_type | string | e.g. Private room in rental unit. |
guests, max_guests | number | Guest capacity. |
location_subtitle | string | e.g. Nantes, Pays de la Loire, France. |
neighborhood_description | string | Airbnb's neighbourhood write-up. |
description | string | Listing description, plain text. |
descriptionHtml | string | Same, as HTML. |
descriptionMarkdown | string | Same, as Markdown. |
review_accuracy | number | Sub-score out of 5. |
review_cleanliness | number | Sub-score out of 5. |
review_communication | number | Sub-score out of 5. |
review_location_score | number | Sub-score out of 5. |
review_checkin_score | number | Sub-score out of 5. |
review_value_score | number | Sub-score out of 5. |
host_id, host_name, host_url, host_profile_image | string | Host identity. |
host_is_superhost, host_is_verified | boolean | Host status. |
host_rating_average, host_rating_count | number | Host's rating and total reviews across all listings. |
host_response_rate, host_response_time | string | e.g. 100%, within an hour. |
host_years_hosting | number | Years active as a host. |
host_about | string | Host bio (null when the host left it blank). |
host_highlights | array | Host profile highlights. |
co_hosts | array | Co-hosts: id, name, profile_image. |
amenities | array | All amenities offered. |
amenity_wifi … amenity_hair_dryer | boolean | 16 flags for the most-filtered amenities. |
house_rules, safety_items | array | Rules and safety features. |
pets_allowed, smoking_allowed, parties_allowed, self_check_in | boolean | Policy flags. |
check_in_after, check_out_before | string | Check-in and check-out times. |
cancellation_policy, cancellation_policy_name | string | e.g. firm / Firm. |
home_tier, is_new_listing | number / boolean | Listing tier and new-listing flag. |
With includeHostProfile: true
| Field | Type | Description |
|---|---|---|
host_listings_count | number | Total listings the host manages. The signal that separates professional operators from private hosts. |
host_listings | array | Each managed listing: id, name, room_type, rating_average, review_count. |
host_location | string | Where the host is based. |
With includeReviews: true / calendarMonths > 0
| Field | Type | Description |
|---|---|---|
reviews | array | id, text, rating, date, language, reviewer_name, reviewer_location, response. |
calendar_data | array | Per day: date, available, bookable, available_for_checkin, available_for_checkout, min_nights, max_nights. |
min_nights, max_nights | number | Booking rules, derived from the calendar. |
Example record
{"id": "668146487515150072","url": "https://www.airbnb.com/rooms/668146487515150072","title": "Centre Place Graslin – Private Room in La Cambronne","property_type": "Private room in rental unit","room_type": "Private room","price_per_night": 89.0,"pricing_currency": "EUR","pricing_total": 356,"guests": 1,"bedrooms": 1,"beds": 1,"bathrooms": 1,"latitude": 47.21274,"longitude": -1.56042,"city": "Nantes","location_subtitle": "Nantes, Pays de la Loire, France","overall_rating": 4.99,"review_count": 78,"review_accuracy": 4.96,"review_cleanliness": 5,"review_communication": 5,"review_location_score": 4.97,"review_checkin_score": 5,"review_value_score": 4.94,"host_id": "464257363","host_name": "Golwen","host_is_superhost": true,"host_rating_average": 4.98,"host_rating_count": 96,"host_response_rate": "100%","host_response_time": "within a few hours","host_years_hosting": 4,"host_listings_count": 2,"host_location": "Nantes, France","co_hosts": [{ "id": "58026078", "name": "Dorothée", "profile_image": "https://a0.muscache.com/im/pictures/user/5ef5c40c.jpg" }],"amenities": ["Hair dryer", "Shampoo", "Hot water", "Wifi", "Kitchen"],"amenity_wifi": true,"amenity_kitchen": true,"cancellation_policy": "firm","cancellation_policy_name": "Firm","check_in_after": "6:00 PM","check_out_before": "10:00 AM","min_nights": 1,"max_nights": 1125,"is_guest_favorite": true,"neighborhood_description": "All the shops of the city center nearby, all the public transportation.","images": ["https://a0.muscache.com/im/pictures/miso/Hosting-668146487515150072/original/8ff2a532.jpeg"],"android_link": "airbnb://rooms/668146487515150072","source": "airbnb.com","scraped_at": "2026-07-13T17:04:48.554Z","content_hash": "9218775635a2cf5b"}
Examples
Full market scan of a city:
{"locationQueries": ["Nantes, France"],"currency": "EUR","maxResults": 0}
Price monitoring at scale (fast mode):
{"locationQueries": ["Paris, France"],"skipDetailPages": true,"checkIn": "2026-09-10","checkOut": "2026-09-14","currency": "EUR","maxResults": 5000}
Find the professional operators in a market:
{"locationQueries": ["Amsterdam, Netherlands"],"includeHostProfile": true,"currency": "EUR","maxResults": 500}
Occupancy analysis — specific listings, full calendar and reviews:
{"listingUrls": [{ "url": "https://www.airbnb.com/rooms/668146487515150072" }],"calendarMonths": 12,"includeReviews": true,"maxReviewsPerListing": 50}
Listings in another language:
{"locationQueries": ["Berlin, Germany"],"locale": "de-DE","currency": "EUR","maxResults": 200}
Titles, amenities, house rules and cancellation terms come back in German. Ratings, prices, coordinates and IDs are language-independent and unchanged.
Daily monitoring feed (new listings only):
{"locationQueries": ["Barcelona, Spain"],"monitoringMode": true,"currency": "EUR"}
💰 Pricing
$0.78 per 1,000 results — you only pay for listings actually returned. Failed retries are never charged.
| Results | Cost |
|---|---|
| 100 | ~$0.08 |
| 1,000 | ~$0.78 |
| 10,000 | ~$7.80 |
| 100,000 | ~$78.00 |
Flat-rate alternatives typically charge $50–$500/month regardless of usage.
Host profiles, guest reviews and availability calendars are included in the result price — there is no separate charge for enrichment. Subscription tiers lower the rate to $0.74 per 1,000. Use Max results to cap your spend exactly.
Performance
| Run size | Typical time |
|---|---|
| 10 listings | under 30 seconds |
| 100 listings | 2–4 minutes |
| 1,000 listings | 20–35 minutes |
Fast mode (skipDetailPages: true) is roughly 5× quicker. Raise concurrency to 3 for large cities.
Known limitations
- Prices in listing-URL mode. Airbnb no longer publishes nightly prices on the listing page itself — they are loaded behind a booking session. Prices are returned in search and location mode, where they come from the search results. If you need prices, search by location or search URL rather than by listing URL.
- New listings have no rating.
overall_ratingandreview_countarenulluntil a listing has been reviewed. This is correct, not missing data. - Unresolvable locations return nothing. If a location query doesn't match a real place on Airbnb, the run returns zero results rather than unrelated listings from elsewhere.
- Calendar depth is 12 months. Airbnb does not publish further ahead.
Technical details
- Source: airbnb.com — worldwide listings
- Coverage: any city or region, filterable by price, rooms, dates and guests
- Languages: 92 locales, served from Airbnb's own language sites
- Change detection: every record carries a
content_hash; monitoring mode remembers listings for 60 days - Retry: automatic retry on network errors with exponential backoff
Need a custom scraper?
Unfenced Group builds Apify actors for any website — for free.
If the site you need isn't in our portfolio yet, just ask. We scope, build, and publish it at no cost to you. You only pay for results — we absorb the compute and proxy costs ourselves. Same pay-per-result pricing, same quality, same standards as every actor in this portfolio.
Get in touch: www.unfencedgroup.nl