Airbnb Scraper - Most Comprehensive
Pricing
from $0.40 / 1,000 places
Airbnb Scraper - Most Comprehensive
🔥 ~$0.5/1K places 🔥 Scrape Airbnb listings by URL, listing ID, or location search. Returns full listing details including description, amenities, host info, location, photos, policies, and ratings. Optionally fetches reviews inline.
Pricing
from $0.40 / 1,000 places
Rating
5.0
(1)
Developer
Kai
Maintained by CommunityActor stats
2
Bookmarked
68
Total users
18
Monthly active users
3.2 hours
Issues response
12 days ago
Last modified
Categories
Share
Airbnb Listing Scraper
Collect Airbnb listing details by listing URL, listing ID, place name, or coordinates. Each Dataset item can include property details, amenities, photos, host information, ratings, policies, and reviews.
What each listing can contain
| Area | Data in a listing item |
|---|---|
| Property | Listing identity, property type, capacity, rooms, beds, bathrooms, amenities, photos, and house rules |
| Host | Host profile, hosting history, Superhost status, ratings, and co-host data when available |
| Location | Coordinates, location text, map data, and location-resolution details |
| Reviews | Review text, ratings, reviewer and host-response fields, dates, and optional media when review collection is enabled |
For coordinate searches, the Actor checks returned coordinates against the
target. It does the same for a place search when you set
maxLocationDeviation. It rejects results beyond that distance. If several
complete pages contain only rejected results, the Actor stops that search
because Airbnb probably resolved the target to the wrong region.
Choose how to collect listings
Use the target that matches the information that you have:
| You have | Use | Result |
|---|---|---|
| One or more listing URLs or IDs | listings | One item for each unique listing ID |
| A city, address, or region | location | Listings from an Airbnb place search |
| Exact latitude and longitude | latitude and longitude | Listings around those coordinates |
You can combine known listings with one search.
Collect known listings
Collect one listing:
{"listings": ["https://www.airbnb.com/rooms/36276450"]}
Collect several listings in one run:
{"listings": ["36276450","https://www.airbnb.co.uk/rooms/12345678?check_in=2026-06-01"]}
Repeated listing IDs produce one item.
Search a place
Search a place and limit the number of results:
{"location": "San Francisco, CA","maxListings": 10}
Search exact coordinates
Use coordinates when you need to bypass place-name resolution:
{"latitude": 20.9674,"longitude": -89.6237,"maxLocationDeviation": 50,"maxListings": 10}
Combine known listings with a search
The Actor collects the direct listing and up to five search results:
{"location": "Austin, TX","listings": ["36276450"],"maxListings": 5,"includeReviews": true,"maxReviewsPerListing": 30}
Add stay filters and reviews
Add stay and property filters to a place or coordinate search:
{"location": "Miami, FL","checkIn": "2026-07-01","checkOut": "2026-07-07","adults": 2,"minPrice": 100,"maxPrice": 500,"propertyType": ["entire_home"],"minBedrooms": 2,"superhostOnly": true,"instantBook": true,"maxListings": 20,"maxSearchPages": 3}
Add reviews to direct or searched listings:
{"listings": ["36276450"],"includeReviews": true,"maxReviewsPerListing": 50,"reviewsSortBy": "MOST_RECENT"}
Input reference
Use one of these target modes:
- Set
listingsfor a direct listing lookup. - Set
locationfor a location search. - Set both
latitudeandlongitudefor a coordinate search.
You can combine listings with one search mode. Repeated listing IDs produce
one record. If location and a complete coordinate pair are both present,
the coordinates control the search area. The examples show the settings that
apply to each mode.
New runs in Apify Console start with the listing URL from the first direct listing example. API calls do not add a target.
Each block shows settings useful for that target. The field table below is the complete input reference.
Complete direct-listing input
{"listings": ["https://www.airbnb.com/rooms/36276450"],"checkIn": "2026-10-10","checkOut": "2026-10-17","adults": 1,"children": 0,"infants": 0,"pets": 0,"includeReviews": true,"maxReviewsPerListing": 20,"reviewsSortBy": "MOST_RECENT"}
Complete place-search input
{"location": "Paris, France","checkIn": "2026-09-15","checkOut": "2026-09-17","adults": 2,"children": 1,"infants": 1,"pets": 1,"minPrice": 1,"maxPrice": 10000,"propertyType": ["entire_home"],"minBedrooms": 0,"minBathrooms": 0,"minBeds": 0,"superhostOnly": true,"instantBook": false,"maxLocationDeviation": 50,"maxListings": 1,"maxSearchPages": 1,"includeReviews": false,"maxReviewsPerListing": 20,"reviewsSortBy": "MOST_RECENT"}
Complete coordinate-search input
{"latitude": 48.8566,"longitude": 2.3522,"maxLocationDeviation": 20,"adults": 1,"children": 0,"infants": 0,"pets": 0,"superhostOnly": false,"instantBook": false,"maxListings": 1,"maxSearchPages": 1,"includeReviews": false,"maxReviewsPerListing": 20,"reviewsSortBy": "MOST_RECENT","proxyConfiguration": {"useApifyProxy": true}}
Input fields
| Field | Type | Default | Description |
|---|---|---|---|
listings | string[] | [] | Airbnb listing URLs or numeric listing IDs. |
location | string | City, address, or region to search. | |
latitude | number | Search latitude from -90 to 90. Set it with longitude. | |
longitude | number | Search longitude from -180 to 180. Set it with latitude. | |
maxLocationDeviation | number | 200 | Maximum distance in km between the target and accepted results. It applies automatically to coordinate searches and applies to location searches only when you set it. Set 0 to disable this check. |
checkIn | string | Check-in date in YYYY-MM-DD format. | |
checkOut | string | Check-out date in YYYY-MM-DD format. | |
adults | integer | 1 | Number of adults. Minimum value: 1. |
children | integer | 0 | Number of children. |
infants | integer | 0 | Number of infants. |
pets | integer | 0 | Number of pets. |
minPrice | integer | Minimum nightly price. | |
maxPrice | integer | Maximum nightly price. | |
propertyType | string[] | One or more of entire_home, private_room, shared_room, or hotel_room. | |
minBedrooms | integer | Minimum number of bedrooms. | |
minBathrooms | integer | Minimum number of bathrooms. | |
minBeds | integer | Minimum number of beds. | |
superhostOnly | boolean | false | Return listings from Superhosts only. |
instantBook | boolean | false | Return listings with Instant Book only. |
maxListings | integer | 20 | Maximum listings to collect from a search. This limit does not remove direct targets. |
maxSearchPages | integer | 5 | Maximum search result pages to request. |
includeReviews | boolean | false | Fetch reviews and add them to each listing item. |
maxReviewsPerListing | integer | 20 | Maximum reviews for each listing. Set 0 for no limit. |
reviewsSortBy | string | MOST_RECENT | Review order: MOST_RECENT, RATING_DESC, or RATING_ASC. |
proxyConfiguration | object | {"useApifyProxy":true} | Optional connection settings for the run. |
Listing record reference
The Actor writes one Dataset item for each returned listing. The examples below use values from collected listings.
The first block is a point-in-time field-shape projection. Long arrays keep one item so the shape remains readable. It is not a complete Dataset item.
Listing item example
Host-response example
This block shows the non-null responder fields.
{"id": "1462486607453045000","reviews": [{"id": "1694326420305241919","response": "Thank you Dheeraj, glad you enjoyed the home and found everything clean. Regarding the driveway situation, we wish you had reached out to us during your stay as we would have had it resolved immediately. We hope to host you again in the future.","localizedRespondedDate": "May 2026","responder": {"firstName": "Crew Collective","id": "586739342"}}]}
Location search example
{"id": "7253149","locationResolution": {"inputLocation": "Paris, France","inputCoordinates": null,"resolvedLocation": "Paris, France","resolvedCenter": {"latitude": 48.8588549,"longitude": 2.3470341},"resultCentroid": {"latitude": 48.87064,"longitude": 2.3745399999999997},"deviationKm": 2.4,"withinThreshold": true}}
Coordinate search example
{"id": "1671993776446695850","locationResolution": {"inputLocation": null,"inputCoordinates": {"latitude": 48.8566,"longitude": 2.3522},"resolvedLocation": null,"resolvedCenter": {"latitude": 48.8566,"longitude": 2.3522},"resultCentroid": {"latitude": 48.7957,"longitude": 2.4257},"deviationKm": 8.6,"withinThreshold": true}}
Output variants
| Case | reviews | locationResolution |
|---|---|---|
| Direct listing, reviews disabled | null | null |
| Direct listing, reviews returned | Review array | null |
| Reviews requested, no reviews returned | [] | Depends on the listing origin |
| Review request failed | null | Depends on the listing origin |
| Location search result | null, [], or a review array | Object with inputLocation; inputCoordinates is null |
| Coordinate search result | null, [], or a review array | Object with inputCoordinates; inputLocation is null |
Field reference
All listing fields are present. Arrays can be empty. The two final fields can
be null, as described in the output-variants table.
| Group | JSON field contract |
|---|---|
| Identity | id, url, canonicalUrl, and pdpType: string; shareUrl: string or null; isElvisListing: boolean |
| Title and capacity | name, sharingTitle, and propertyType: string; personCapacity: number; embedData: object |
| Description and media | htmlDescription: string; descriptionSections, heroImages, photoTourImages, rooms, and sleepingArrangements: object arrays |
| Amenities and highlights | amenitiesPreview, amenitiesGrouped, and highlights: object arrays |
| Ratings | overallRating and overallReviewCount: number; isGuestFavorite: boolean; qualityScorePercentile and brandDescription: string or null; categoryRatings, ratingDistribution, reviewTags, and reviewSortOptions: object arrays |
| Property details | location and host: objects; houseRules, houseRulesSections, safetyAndProperty, and safetyAndPropertySections: object arrays |
| Booking and calendar | cancellationPolicyId and maxPlusValue: number or null; cancellationPolicyName: string or null; maxGuestCapacity: number; petsAllowed and canInstantBook: boolean or null; calendarDescriptionItems: string array |
| Metadata and optional data | seo: object; scrapedAt: string; reviews: review-object array or null; locationResolution: object or null |
Nested listing objects
| Path | Child field contract |
|---|---|
embedData | id, name, pictureUrl, and propertyType: string; personCapacity, reviewCount, and starRating: number |
descriptionSections[] | title: string or null; htmlText: string |
heroImages[] | id and baseUrl: string; accessibilityLabel: string or null |
photoTourImages[] | id, baseUrl, and orientation: string; accessibilityLabel, caption, and localizedCaption: string or null; aspectRatio: number; isProfessional: boolean; isVerified: boolean or null |
rooms[] | title: string; imageIds and highlights: string arrays |
sleepingArrangements[] | title and subtitle: string; images: object array |
sleepingArrangements[].images[] | id, baseUrl, and orientation: string; accessibilityLabel: string or null; aspectRatio: number |
amenitiesPreview[] | title and icon: string; available: boolean |
amenitiesGrouped[] | groupTitle: string; amenities: object array |
amenitiesGrouped[].amenities[] | id, title, subtitle, and icon: string; available: boolean |
highlights[] | title, subtitle, icon, and type: string; highlightValue: string or null |
categoryRatings[] | categoryType, label, and localizedRating: string; percentage: number |
ratingDistribution[] | label, localizedRating, and accessibilityLabel: string; percentage: number |
reviewTags[] | name and localizedName: string; count: number; iconUrl: string or null |
reviewSortOptions[] | type and title: string |
location | lat, lng, defaultZoomLevel, and mapMarkerRadiusInMeters: number; subtitle and mapMarkerType: string; isLocationVerified: boolean; neighborhoodHighlights and gettingAround: string or null; locationDetails: object array |
location.locationDetails[] | id, displayType, and title: string; htmlText: string or null |
host | userId, contextualUserId, name, titleText, profilePictureUrl, about, and contactHostCopy: string; isSuperhost and isVerified: boolean; yearsHosting, monthsHosting, ratingCount, and ratingAverage: number; stats, hostHighlights, and cohosts: object arrays; hostDetails: string array |
host.stats[] | label, value, and type: string |
host.hostHighlights[] | icon and title: string |
host.cohosts[] | name: string; profilePictureUrl: string or null |
houseRules[], safetyAndProperty[] | title: string; icon: string or null |
houseRulesSections[] | title: string; items: object array |
houseRulesSections[].items[] | title: string; subtitle, icon, and html: string or null |
safetyAndPropertySections[] | title: string; items: object array |
safetyAndPropertySections[].items[] | title: string; subtitle and icon: string or null |
seo | title and canonicalUrl: string; metaDescription, ogDescription, ogImage, ogTitle, ogType, ogUrl, androidDeeplink, and iphoneDeeplink: string or null; indexInSearchEngines: boolean |
Review objects
All fields in a review item are present.
| Group | JSON field contract |
|---|---|
| Review data | id, comments, commentV2, language, createdAt, localizedDate, and ratingAccessibilityLabel: string; rating: number |
| People | reviewer and reviewee: user objects; localizedReviewerLocation: string; responder: object or null |
| Highlights and response | reviewHighlight, highlightType, response, and localizedRespondedDate: string or null |
| Listing context | roomTypeListingTitle, roomTypeListingId, collectionTag, and channel: string or null |
| Media and highlights | reviewMediaItems: array of source-defined JSON values; reviewPhotoUrls and highlightedReviewSentence: string arrays; highlightReviewMentioned: string or null; isHostHighlightedReview: boolean or null |
| Localized content | localizedComments and localizedCommentsLanguage: string; needsTranslation: boolean; translationDisclaimer, localizedResponse, and responseDisclaimer: string or null |
| User object | id, contextualUserId, firstName, hostName, pictureUrl, and profilePath: string; deleted and isSuperhost: boolean |
Non-null responder | firstName and id: string |
Airbnb defines the child keys in reviewMediaItems; these keys can differ
between items.
Location-resolution object
| Field | JSON type and nullability |
|---|---|
inputLocation, resolvedLocation | string or null |
inputCoordinates, resolvedCenter, resultCentroid | coordinate object or null; each non-null object has number latitude and longitude |
deviationKm | number or null |
withinThreshold | boolean |
Result behaviour
- An empty input is valid and produces no Dataset items. An input with only
latitudeor onlylongitudeand no other target has the same result. A valid search can also return no matching listings. maxLocationDeviationcompares results with an approximate resolved search centre, so it is not exact geofencing.reviews: nullmeans that reviews were disabled or could not be collected. An empty array means that review collection completed without review items.petsAllowedandcanInstantBookcan benull. A host can still state the pet policy inhouseRules.canInstantBookreports listing data; it does not control theinstantBookinput filter.isGuestFavoritecomes from Airbnb's Guest Favorite badge. It is independent of thehighlightslist.- Rating categories, distributions, and
qualityScorePercentileare present only when Airbnb supplies them.qualityScorePercentileuses Airbnb's source bucket, such asTOP_5. Repeated listing IDs are returned once. - Airbnb can change or remove public values. Treat URLs, prices, availability, ratings, and review totals as a point-in-time result.