Travel market research
Collect public listing cards for a destination and compare published names, ratings and price labels.
- locationQueries
- rating
- price
Airbnb API
Collect public Airbnb listing cards from destination searches or room URLs, with optional detail and host enrichment.
Historical recordings · 1 recorded item in the saved sample
Airbnb · Lisbon search
Airbnb · recorded sample
Accommodation listing
Apartment in São Paulo
Price
$263
Price qualifier
for 2 nights
Rating
4.93
Reviews
563
for 2 nights
The saved row is a historical fixture and is shown with the recording's own field names.
Overview
Collect public Airbnb listing cards from destination searches or room URLs, with optional detail and host enrichment.
locationQueries starts a destination search and startUrls resolves room links or numeric room IDs. A single destination yields roughly 220 unique listings at most because Airbnb caps one search at 15 overlapping pages, and maxResults applies a hard limit.
checkIn and checkOut must be supplied together or omitted. Direct room URLs do not expose booking prices to anonymous pages, and isAvailable is null in this version. Detail and host enrichment are optional and reported through hasDetails and hostEnriched.
Input
Destinations or room URLs
Output
Listing records
Provide one destination per line or direct Airbnb room links, with optional stay parameters.
includeDetails adds public amenities, house rules, images and sub-ratings; host enrichment is a separate option.
Each Dataset row keeps the public listing fields and reports whether detail or host enrichment succeeded.
Use cases
The record is designed to sit inside research and review workflows. The examples below are starting points, not packaged scores.
Collect public listing cards for a destination and compare published names, ratings and price labels.
Use the same stay window across listings so the returned price labels are comparable.
Add amenities, house rules and host context from public listing pages when enrichment is enabled.
Try it
Read a saved public listing row, then inspect the original Dataset item as JSON.
Enter a destination or a public Airbnb room URL.
https://api.apify.com/v2/acts/meka.im~airbnb-scraper/run-sync-get-dataset-itemsPrice
$263
Price qualifier
for 2 nights
Rating
4.93
Reviews
563
Stay window
Not reported
Source returned null
Prices stay in the currency and stay window supplied by Airbnb. The report does not convert currencies, infer a nightly rate, or average a source range. An explicit null availability means the source did not expose booking availability.
Room identity and source context. A listing ID is a stable source ID, not a numeric quantity.
Only the stored rating and review values are shown. A sub-rating block is expanded as returned data when details were fetched.
Only returned fields are shown.
All returned fields
Recorded Sep 24, 2026 · Historical snapshot · Source: Airbnb
1[2{3"listingId": "20465848",4"url": "https://www.airbnb.com/rooms/20465848",5"name": "Chiado Loft 17 Charm Boutique Apartment",6"title": "Apartment in São Paulo",7"rating": 4.93,8"stayWindow": null,9"checkIn": null,10"checkOut": null,11"reviews": 563,12"price": "$263",13"priceQualifier": "for 2 nights"14}15]
Reference
POST to the Apify Actor endpoint with a bearer token. Request examples use $APIFY_TOKEN and the current product defaults; response examples come from a saved historical record.
Request fields accepted by the Actor. Preview input is sent only when you run a live request.
locationQueriesstring[]One destination per line, for example "Lisbon, Portugal". A comma is handled for you: Airbnb geocodes "Paris, France" to a different city unless the separator is normalised, which this Actor does.
startUrlsstring[]Airbnb room links (airbnb.com/rooms/…) or plain numeric room IDs. Order is preserved. Invalid entries are skipped and never charged.
includeDetailsbooleanOff: search results only, charged as listing-delivered. On: one extra public request per listing for amenities, house rules, sub-ratings, host and images, charged as detailed-listing-delivered. Direct room URLs always fetch details. Default: false.
maxResultsintegerAirbnb caps a single search at 15 pages. Pages overlap, so a destination yields roughly 220 unique listings at most. Default: 100. Minimum: 1. Maximum: 450.
checkInstringYYYY-MM-DD. Give both dates or neither. Without dates Airbnb picks a stay window per listing, so prices are not comparable across rows.
checkOutstringYYYY-MM-DD.
adultsintegerNumber of adults for the stay. Affects which listings Airbnb returns and how they are priced. Default: 1. Minimum: 1. Maximum: 16.
childrenintegerNumber of children aged 2 to 17. Default: 0. Minimum: 0. Maximum: 15.
infantsintegerNumber of infants under 2. Airbnb does not count them toward a listing capacity. Default: 0. Minimum: 0. Maximum: 5.
petsintegerNumber of pets. Listings that do not allow pets are filtered out by Airbnb. Default: 0. Minimum: 0. Maximum: 5.
currencystringPrices come back in this currency, as Airbnb formats them. Default: "USD".
localestringLanguage of names, descriptions and amenity labels. Default: "en-US".
priceMinintegerAirbnb filters on the nightly price. The price field on each row is the stay total, so a row's own number will not fall inside this range. Minimum: 0. Maximum: 100000.
priceMaxintegerAirbnb filters on the nightly price. The price field on each row is the stay total, so a row own number will not fall inside this range. Minimum: 0. Maximum: 100000.
enrichUserProfilesbooleanOne extra public request per host for about text, hosting years, host rating and review count, listing count, verification and profile highlights such as languages. Charged at the same rate; a failed enrichment never fails the listing. Default: false.
Published response fields are listed below. The saved historical fixture may use different public field names and is shown unchanged.
listingIdstringAirbnb room ID. The stable key for joining and de-duplication.
Example: 20465848
urlstring | nullRoom URL with the stay parameters used.
Example: https://www.airbnb.com/rooms/20465848
namestring | nullListing name.
Example: Chiado Loft 17 Charm Boutique Apartment
titlestring | nullAirbnb's type-and-place line, e.g. "Apartment in Lisbon".
Example: Apartment in São Paulo
subtitlestring | nullsubtitle
sourceModestring"search" when the row came from a destination search, "direct_url" when it came from a room URL.
priceSourcestring | null"search_result" when a price is present. Null for direct-URL rows: Airbnb does not expose booking prices to anonymous listing pages.
priceobject | null{ label, price, qualifier, originalPrice } as Airbnb formats them. Null for direct-URL rows.
Example: $263
stayWindowstring | nullThe window Airbnb priced, e.g. "Nov 29 – Dec 4".
checkInstring | nullcheckIn
checkOutstring | nullcheckOut
isAvailableboolean | nullNull in this version: Airbnb does not expose booking availability on anonymous listing pages.
ratingnumber | nullrating
Example: 4.93
reviewsCountinteger | nullreviewsCount
ratingTextstring | nullRating as shown, e.g. "4.81 (209)". "New" for new listings.
ratingDetailsobject | nullSix sub-ratings plus overall and review count. Only when details were fetched.
coordinatesobject{ latitude, longitude }.
propertyTypestring | nullpropertyType
roomTypestring | nullroomType
personCapacityinteger | nullpersonCapacity
homeTierinteger | nullhomeTier
subDescriptionobject | null{ title, items } such as "4 guests", "1 bedroom".
detailsstring[]Bed and bath line from the search card.
descriptionstring | nulldescription
htmlDescriptionstring | nullhtmlDescription
descriptionOriginalLanguagestring | nulldescriptionOriginalLanguage
seoTitlestring | nullseoTitle
metaDescriptionstring | nullmetaDescription
locationDescriptionsobject[]Neighbourhood sections. Titles are available; the body text is not exposed to anonymous pages, so content is usually null.
breadcrumbsobject[]breadcrumbs
amenitiesobject[]Grouped amenities, including entries marked unavailable.
houseRulesobject | nullhouseRules
highlightsobject[]highlights
imagesobject[]De-duplicated across search card and detail page.
badgesstring[]Such as "Guest favorite".
paymentMessagesstring[]Such as "Free cancellation".
hostobject | nullIdentity always; about, hosting years, host rating and listing count only when host enrichment ran.
coHostsobject[]coHosts
androidLinkstring | nullandroidLink
iosLinkstring | nulliosLink
hasDetailsbooleanWhether the detail page was fetched for this row.
hostEnrichedbooleanWhether host enrichment succeeded.
detailErrorstring | nullSet when the detail fetch failed and the row fell back to search data.
hostErrorstring | nullhostError
searchStringstring | nullThe destination this row came from. Null for direct-URL rows.
pageinteger | nullpage
rankinteger | nullrank
scrapedAtstringscrapedAt
contractVersionintegercontractVersion
curl -X POST 'https://api.apify.com/v2/acts/meka.im~airbnb-scraper/run-sync-get-dataset-items' \
-H "Authorization: Bearer $APIFY_TOKEN" \
-H 'Content-Type: application/json' \
-d '{
"locationQueries": [
"Lisbon"
],
"checkIn": "2026-11-10",
"checkOut": "2026-11-14",
"adults": 2,
"includeDetails": true
}'Recorded sample
1 recorded item · historical sample
[
{
"listingId": "20465848",
"url": "https://www.airbnb.com/rooms/20465848",
"name": "Chiado Loft 17 Charm Boutique Apartment",
"title": "Apartment in São Paulo",
"rating": 4.93,
"stayWindow": null,
"checkIn": null,
"checkOut": null,
"reviews": 563,
"price": "$263",
"priceQualifier": "for 2 nights"
}
]Recorded Sep 24, 2026 · historical snapshot
Pricing & access
Published FREE-plan event rates from public Apify metadata. Plan-specific rates and usage terms remain on the Actor's pricing page.
Pricing
$1.00per 1,000 basic listings
$1.50per 1,000 detailed listings
These delivery rates are alternatives, not added together.
One basic or detailed listing event per listing. The two rates are alternatives, not additive.
Access
https://api.apify.com/v2/acts/meka.im~airbnb-scraper/run-sync-get-dataset-items
FAQ
Authentication, response shape, recorded data and availability.
Anonymous listing pages do not expose booking prices. Direct-URL rows keep priceSource null and price null rather than inventing a stay total.
Without both checkIn and checkOut, Airbnb chooses a stay window per listing. Supply both dates when you need comparable price labels.
No. isAvailable is null in this version because Airbnb does not expose booking availability on anonymous listing pages.
Send an Apify token as a Bearer token in the Authorization header, as shown in the request examples.
Not by default. Saved samples are historical recordings from the source; each keeps the fields and values from that record and does not verify current availability. Live data is requested directly from the published Apify Actor endpoint with your own token.
Current pricing and usage terms are published on the Apify Actor page.