Airbnb

Airbnb API

Public listings,
prices and details

Collect public Airbnb listing cards from destination searches or room URLs, with optional detail and host enrichment.

  • Destination searches or direct room URLs
  • Stay-window pricing as Airbnb formats it
  • Optional amenities, house rules and host details

Historical recordings · 1 recorded item in the saved sample

POST/acts/meka.im~airbnb-scraper/run-sync-get-dataset-items

Airbnb · Lisbon search

Airbnb · recorded sample

1 recorded item

Accommodation listing

Chiado Loft 17 Charm Boutique Apartment

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.

Recorded Sep 24, 2026Historical sample

Overview

What this API returns

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

01

Send destinations or rooms

Provide one destination per line or direct Airbnb room links, with optional stay parameters.

02

Choose enrichment

includeDetails adds public amenities, house rules, images and sub-ratings; host enrichment is a separate option.

03

Read listing rows

Each Dataset row keeps the public listing fields and reports whether detail or host enrichment succeeded.

Use cases

Where these records fit

The record is designed to sit inside research and review workflows. The examples below are starting points, not packaged scores.

Travel market research

Collect public listing cards for a destination and compare published names, ratings and price labels.

  • locationQueries
  • rating
  • price

Stay comparison

Use the same stay window across listings so the returned price labels are comparable.

  • checkIn
  • checkOut
  • stayWindow

Listing enrichment

Add amenities, house rules and host context from public listing pages when enrichment is enabled.

  • amenities
  • houseRules
  • host

Try it

Inspect a recorded listing

Read a saved public listing row, then inspect the original Dataset item as JSON.

Checking live preview

Checking live preview availability… Saved samples remain available.

Enter a destination or a public Airbnb room URL.

POSThttps://api.apify.com/v2/acts/meka.im~airbnb-scraper/run-sync-get-dataset-items
Recorded sample
Copyable cURL uses the current preview input and the Actor endpoint.

Rendered

Recorded
Airbnb
1 record

Airbnb stay

Chiado Loft 17 Charm Boutique Apartment

Apartment in São Paulo

Price

$263

Price qualifier

for 2 nights

Rating

4.93

Reviews

563

Stay window

Not reported

Source returned null

Price and stay

Price
$263
Stay window
null
Check-in
null
Check-out
null
Listing ID
20465848
Response details (11 fields)

Price and stay

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.

Price
$263
Price qualifier
for 2 nights
Stay window
null
Check-in
null
Check-out
null

Listing identity

Room identity and source context. A listing ID is a stable source ID, not a numeric quantity.

Listing ID
20465848
Listing name
Chiado Loft 17 Charm Boutique Apartment
Type and place
Apartment in São Paulo

Rating and capacity

Only the stored rating and review values are shown. A sub-rating block is expanded as returned data when details were fetched.

Rating
4.93
Review count
563

Only returned fields are shown.

All returned fields

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 · Source: Airbnb

JSON

Recordedapplication/json
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

Request and response contract

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.

Parameters

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.

includeDetailsboolean

Off: 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.

maxResultsinteger

Airbnb 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.

checkInstring

YYYY-MM-DD. Give both dates or neither. Without dates Airbnb picks a stay window per listing, so prices are not comparable across rows.

checkOutstring

YYYY-MM-DD.

adultsinteger

Number of adults for the stay. Affects which listings Airbnb returns and how they are priced. Default: 1. Minimum: 1. Maximum: 16.

childreninteger

Number of children aged 2 to 17. Default: 0. Minimum: 0. Maximum: 15.

infantsinteger

Number of infants under 2. Airbnb does not count them toward a listing capacity. Default: 0. Minimum: 0. Maximum: 5.

petsinteger

Number of pets. Listings that do not allow pets are filtered out by Airbnb. Default: 0. Minimum: 0. Maximum: 5.

currencystring

Prices come back in this currency, as Airbnb formats them. Default: "USD".

localestring

Language of names, descriptions and amenity labels. Default: "en-US".

priceMininteger

Airbnb 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.

priceMaxinteger

Airbnb 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.

enrichUserProfilesboolean

One 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.

Response

Published response fields are listed below. The saved historical fixture may use different public field names and is shown unchanged.

listingIdstring

Airbnb room ID. The stable key for joining and de-duplication.

Example: 20465848

urlstring | null

Room URL with the stay parameters used.

Example: https://www.airbnb.com/rooms/20465848

namestring | null

Listing name.

Example: Chiado Loft 17 Charm Boutique Apartment

titlestring | null

Airbnb's type-and-place line, e.g. "Apartment in Lisbon".

Example: Apartment in São Paulo

subtitlestring | null

subtitle

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 | null

The window Airbnb priced, e.g. "Nov 29 – Dec 4".

checkInstring | null

checkIn

checkOutstring | null

checkOut

isAvailableboolean | null

Null in this version: Airbnb does not expose booking availability on anonymous listing pages.

ratingnumber | null

rating

Example: 4.93

reviewsCountinteger | null

reviewsCount

ratingTextstring | null

Rating as shown, e.g. "4.81 (209)". "New" for new listings.

ratingDetailsobject | null

Six sub-ratings plus overall and review count. Only when details were fetched.

coordinatesobject

{ latitude, longitude }.

propertyTypestring | null

propertyType

roomTypestring | null

roomType

personCapacityinteger | null

personCapacity

homeTierinteger | null

homeTier

subDescriptionobject | null

{ title, items } such as "4 guests", "1 bedroom".

detailsstring[]

Bed and bath line from the search card.

descriptionstring | null

description

htmlDescriptionstring | null

htmlDescription

descriptionOriginalLanguagestring | null

descriptionOriginalLanguage

seoTitlestring | null

seoTitle

metaDescriptionstring | null

metaDescription

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 | null

houseRules

highlightsobject[]

highlights

imagesobject[]

De-duplicated across search card and detail page.

badgesstring[]

Such as "Guest favorite".

paymentMessagesstring[]

Such as "Free cancellation".

hostobject | null

Identity always; about, hosting years, host rating and listing count only when host enrichment ran.

coHostsobject[]

coHosts

androidLinkstring | null

androidLink

iosLinkstring | null

iosLink

hasDetailsboolean

Whether the detail page was fetched for this row.

hostEnrichedboolean

Whether host enrichment succeeded.

detailErrorstring | null

Set when the detail fetch failed and the row fell back to search data.

hostErrorstring | null

hostError

searchStringstring | null

The destination this row came from. Null for direct-URL rows.

pageinteger | null

page

rankinteger | null

rank

scrapedAtstring

scrapedAt

contractVersioninteger

contractVersion

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

Usage is billed through the Actor

Published FREE-plan event rates from public Apify metadata. Plan-specific rates and usage terms remain on the Actor's pricing page.

Pricing

Pay per delivered event

Apify FREE-plan rate

$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.

Checked 19 Oct 2026Apify pricing

Access

One POST endpoint

  • Authenticate with an Apify Bearer token.
  • Send a JSON body to the posted Actor endpoint.
  • Read the Dataset items array returned by the run.

https://api.apify.com/v2/acts/meka.im~airbnb-scraper/run-sync-get-dataset-items

FAQ

Questions about the contract

Authentication, response shape, recorded data and availability.

Why is the price null for a direct room URL?

Anonymous listing pages do not expose booking prices. Direct-URL rows keep priceSource null and price null rather than inventing a stay total.

Why can prices vary between rows?

Without both checkIn and checkOut, Airbnb chooses a stay window per listing. Supply both dates when you need comparable price labels.

Does isAvailable mean the listing can be booked?

No. isAvailable is null in this version because Airbnb does not expose booking availability on anonymous listing pages.

How do I authenticate requests?

Send an Apify token as a Bearer token in the Authorization header, as shown in the request examples.

Are the results on this page live?

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.

Where can I find current pricing?

Current pricing and usage terms are published on the Apify Actor page.