Airbnb All-in-One API avatar

Airbnb All-in-One API

Pricing

Pay per event + usage

Go to Apify Store
Airbnb All-in-One API

Airbnb All-in-One API

Unofficial always-on REST API for live Airbnb data: search, listing detail, reviews, availability calendar, similar listings, destination autosuggest, plus Experiences and Services (tours, photography, chefs, and more) with host profiles. Powered by Apify Standby — no cold start, no account needed.

Pricing

Pay per event + usage

Rating

0.0

(0)

Developer

Romy

Romy

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

12 days ago

Last modified

Categories

Share

What does Airbnb All-in-One API do?

Airbnb All-in-One API is a REST endpoint for Airbnb's live data — home search with full filters, listing detail, reviews, availability, and a full-year calendar — plus two product lines most Airbnb scrapers don't cover at all: Experiences (bookable tours, workshops, and activities) and Services (photography, private chefs, massage, and other in-person services), each with real host profiles you can cross-reference to every other listing that host owns. All from a single always-on API powered by Apify Standby.

It talks directly to the same internal API the official Airbnb Android app uses (api.airbnb.com), reverse-engineered by live MITM capture against a real device — every endpoint below is a real Apollo-style GraphQL persisted query the app itself sends (exact query hashes captured live, never guessed). No Airbnb account, no API key, no scraping setup — call the endpoint, get JSON back. Read endpoints work fully anonymously (confirmed by inspecting real request headers — no Authorization header, no cookie, no session token needed).

Confirmed working worldwide — tested live in Indonesia, the UK (London), and Japan (Tokyo) during development, including a hotel-style multi-room-type listing, not just one market.

Why use Airbnb All-in-One API?

  • Full home search — location, dates, guests, price range, room type, and amenities, the same filters as the app's own search
  • Real, server-computed pricing in any currency — pass currency=IDR (or any ISO code) and get genuine localized prices from Airbnb's own server, not a client-side conversion (verified against the raw response — real Rp amounts, real per-night breakdowns)
  • Experiences & Services — tours, workshops, photography, chefs, massage and more, with their own pricing/availability — a product line most Airbnb API wrappers skip entirely
  • Host profiles — bio, verification, Superhost status, every other listing the host owns, and reviews written about them as a person — walk from any listing's review straight to the host's full portfolio
  • Reviews with real host replies — including the reply text, who replied, and when; filterable by topic (cleanliness, location, ...) with the matching snippet highlighted, or sorted by recency/rating
  • Global — not tied to one country's data
  • Always-on — Standby mode means no cold start, responds in milliseconds
  • No account needed — every read request works fully anonymously
  • Use cases: travel search products, price-comparison tools, market research, host/listing portfolio analysis, review sentiment pipelines, local-experience marketplaces

Endpoints

MethodPathDescription
GET/searchHome search — location, dates, guests, price range, room type, amenities
GET/listingFull listing detail — host, amenities, description, rating breakdown
GET/reviewsPaginated reviews, with host replies, topic filtering, and sorting
GET/availabilityMonthly availability calendar (a full year in one call)
GET/similar-listingsListings similar to a given one
GET/autosuggestDestination autocomplete
GET/experienceExperience (tour/workshop/activity) detail, pricing, and availability
GET/serviceService (photography/chef/massage/...) detail and booking bar
GET/hostPublic host profile, their other listings, and reviews about them

Parameters

Every endpoint also takes currency (ISO code, default USD) — see Data notes below.

GET /searchquery OR place_id required, everything else optional.

ParamTypeExampleMeaning
querystringBali, IndonesiaFree-text destination
place_idstringChIJnUvjRe...Exact place id from /autosuggest, more precise than query
checkindate2026-09-01Check-in date
checkoutdate2026-09-05Check-out date
adultsint, default 12Adult guests (13+)
childrenint, default 01Child guests (2–12)
infantsint, default 00Infant guests (under 2)
price_minint500000Minimum total trip price, in whole units of currency
price_maxint3000000Maximum total trip price
bedroomsint2Minimum bedrooms ("at least this many")
bedsint2Minimum beds
bathroomsint1Minimum bathrooms
room_typeenumEntire home/aptEntire home/apt | Private room — the real strings the app sends
amenitiesint[], repeatamenities=4&amenities=7Airbnb amenity ids; only Wifi=4, Pool=7 confirmed by hand, any real id works
allows_petsbooleantrue"Allows pets" filter chip — NOT a pet count (see pets on /listing for that)
instant_bookbooleantrueOnly Instant Book listings
guest_favoritebooleantrueOnly "Guest favourite" listings
host_languagesstring[], repeathost_languages=enISO-ish 2-letter host language codes
cursorstring(from prev response)Pagination cursor — copy from results.paginationInfo.nextPageCursor

GET /listinglisting_id required.

ParamTypeExampleMeaning
listing_idstring1633199196629299212Plain numeric listing id (from a /search result or the Airbnb URL)
checkindate2026-09-01Check-in date, affects price shown
checkoutdate2026-09-05Check-out date
adultsint, default 12Adult guests
childrenint, default 00Child guests
infantsint, default 00Infant guests
petsint, default 00Number of pets travelling — a guest count, unrelated to /search's allows_pets toggle

GET /reviewslisting_id required.

ParamTypeExampleMeaning
listing_idstring1633199196629299212Same id as /listing
offsetint, default 00Reviews to skip — page by adding limit each call
limitint, default 2020Reviews per page
sortenumMOST_RECENTBEST_QUALITY (default, "most relevant") | MOST_RECENT | RATING_DESC | RATING_ASC
tagenumCLEANLINESSFilter to reviews mentioning a topic (15 confirmed values — see OpenAPI); a listing may expose other real values too

GET /availabilitylisting_id, month, year required.

ParamTypeExampleMeaning
listing_idstring1652144683809168862Same id as /listing
monthint 1–129First month to fetch
yearint2026Year matching month
countint, default 1212How many consecutive months to return

GET /similar-listingslisting_id required.

ParamTypeExampleMeaning
listing_idstring1652144683809168862Listing to find similar stays for
checkindate2026-09-01Optional, recommended (see Known limitations)
checkoutdate2026-09-05Optional
adultsint, default 12Adult guests, for pricing on results

GET /autosuggestquery required.

ParamTypeExampleMeaning
querystringLondonPartial or full destination name

GET /experiencelisting_id required.

ParamTypeExampleMeaning
listing_idstring7032932Plain numeric Experience id
adultsint, default 12Adult guests, for pricing/availability

GET /servicelisting_id required.

ParamTypeExampleMeaning
listing_idstring7201659Plain numeric Service id
adultsint, default 11Adult guests, for pricing where applicable

GET /hosthost_id required.

ParamTypeExampleMeaning
host_idstring1618048489116497162Plain numeric host id — from any /listing or /reviews reviewee.id on a review with a host reply
reviews_offsetint, default 00Host reviews to skip
reviews_limitint, default 1010Host reviews per page

How to use Airbnb All-in-One API

  1. Open this Actor's Standby API URL (shown on the Actor's page, under the API tab) — https://romy--airbnb-all-in-one-api.apify.actor.
  2. Call any endpoint — for example:
    curl "https://romy--airbnb-all-in-one-api.apify.actor/search?query=Bali,%20Indonesia&checkin=2026-09-01&checkout=2026-09-05&adults=2"
    curl "https://romy--airbnb-all-in-one-api.apify.actor/listing?listing_id=1633199196629299212"
    curl "https://romy--airbnb-all-in-one-api.apify.actor/reviews?listing_id=1633199196629299212&sort=MOST_RECENT&limit=5"
    curl "https://romy--airbnb-all-in-one-api.apify.actor/availability?listing_id=1652144683809168862&month=9&year=2026"
    curl "https://romy--airbnb-all-in-one-api.apify.actor/autosuggest?query=London"
    curl "https://romy--airbnb-all-in-one-api.apify.actor/experience?listing_id=7032932"
    curl "https://romy--airbnb-all-in-one-api.apify.actor/service?listing_id=7201659"
    curl "https://romy--airbnb-all-in-one-api.apify.actor/host?host_id=1618048489116497162"
    Every call needs your Apify API token, either as Authorization: Bearer <token> or ?token=<token> — the Actor's page API tab has a ready-to-copy version with your token filled in.
  3. Read the JSON response — no setup required.

Add &currency=IDR (or any ISO currency code) to any endpoint to get real, server-computed localized prices.

Input

This Actor takes no run-input; it starts immediately in Standby mode. All parameters are passed per-request as HTTP query strings — see the endpoint table above and the OpenAPI schema (API tab on the Actor's page).

Output

Every response is returned directly over HTTP — this Actor does not write to an Apify dataset. Responses pass through Airbnb's own real (deeply nested) GraphQL data — every field the app itself receives, not a manually re-typed subset. Real responses (trimmed to the most relevant fields for readability — the actual response includes much more):

GET /search?query=Bali&checkin=2026-08-25&checkout=2026-08-30:

{
"success": true,
"results": {
"searchResults": [
{
"title": "Villa in Tegalalang",
"avgRatingA11yLabel": "New place to stay",
"propertyTypeLabel": "Entire villa",
"structuredDisplayPrice": {
"primaryLine": { "originalPrice": "$380 USD", "discountedPrice": "$281 USD", "qualifier": "total" }
},
"demandStayListing": { "id": "RGVtYW5kU3RheUxpc3Rpbmc6MTc0OTY2OTEzMTQ5MDM3NTU0Ng==" }
}
],
"paginationInfo": { "nextPageCursor": "eyJzZWN0aW9uX29mZnNldCI6MCwiaXRlbXNfb2Zmc2V0Ijo4LCJ2ZXJzaW9uIjoxfQ==" }
}
}

GET /listing?listing_id=1633199196629299212:

{
"success": true,
"listing": {
"sections": {
"sectionContainer": [
{
"sectionId": "TITLE_DEFAULT",
"section": { "title": "Furnished Studio Flat by Regent's Park | AC + Lift" }
},
{
"sectionId": "HOST_OVERVIEW_DEFAULT",
"section": { "title": "Hosted by Lukasz", "isSuperhost": true }
}
]
}
}
}

GET /reviews?listing_id=1633199196629299212&limit=1:

{
"success": true,
"reviews": {
"pdpReviews": [
{
"id": "1743086535494888639",
"comments": "Luh is a great host, she had good local recommendations as well. She is very responsive and helpful...",
"localizedDate": "2 weeks ago",
"ratingAccessibilityLabel": "Rating, 5 stars",
"response": null,
"reviewee": { "firstName": "Luh", "id": "Q29udGV4dHVhbFVzZXI6MTYxODA0ODQ4OTExNjQ5NzE2Mg==" }
}
]
}
}

GET /availability?listing_id=1652144683809168862&month=9&year=2026:

{
"success": true,
"calendar": {
"calendar_months": [
{
"month": 9,
"year": 2026,
"days": [
{ "date": "2026-09-01", "available": false, "min_nights": 1, "max_nights": 365 },
{ "date": "2026-09-05", "available": true, "price": { "local_price_formatted": "Rp 2,151,719" } }
]
}
]
}
}

GET /host?host_id=1618048489116497162:

{
"success": true,
"profile": {
"displayFirstName": "Luh",
"isSuperHost": true,
"location": "Denpasar, Indonesia",
"timeAsHost": { "years": 0, "months": 5 },
"verificationInfo": { "verifiedSinceText": "Verified since February 2026", "hasVerificationBadge": true }
},
"reviews": {
"reviewsReceivedFromGuests": {
"edges": ["... 10 reviews written about Luh as a host, across all their listings ..."]
}
}
}

Data notes

  • /reviews: each review's response field is null if the host hasn't replied, or a string with respondedAt/localizedRespondedDate/reviewee (who replied) if they have. Only one reply per review — Airbnb's data model doesn't support threaded replies, so there's nothing to paginate there.
  • /search pagination: the first page is a GET; every following page requires a POST to the same endpoint with cursor set to the previous response's results.paginationInfo.nextPageCursor — confirmed live across 13 real pages during development. A client that only ever sends GET will silently see page 1 forever.
  • /search filters are the real values the app sends, not a guessed enum: room_type accepts exactly "Entire home/apt" or "Private room" (confirmed by toggling the filter chip and inspecting the request — snake_case values like entire_home are not real). allows_pets is a boolean "Allows pets" filter chip, unrelated to how many pets are travelling. amenities is a single shared numeric-id space that also covers things the app shows as separate filter sections (self check-in, individual accessibility features) — only a couple of ids are documented by hand (Wifi=4, Pool=7) since cataloguing the full id space live, one chip at a time, wasn't practical; any other real Airbnb amenity id also works, nothing is restricted client-side.
  • currency: works as a plain query parameter on every endpoint (default USD). Verified against the raw response body, not just the display string — real server-computed amounts in the requested currency.
  • /experience and /service both accept a numeric listing_id from their respective category in /search (Airbnb calls both an ActivityListing internally — same underlying node type, different presentation).
  • host_id for /host comes from any /listing or /reviews response's reviewee.id field on a review that has a host reply — no separate lookup needed.

Pricing

Pay-per-event, billed on each successful call. See the Actor's Pricing tab for current rates.

Known limitations

  • /similar-listings returns an empty array for many listings, including some where the official app itself shows real recommendations for the exact same listing/dates. Confirmed by replicating the app's own captured request byte-for-byte (same listing id, same dates, same currency) and still getting an empty result — this looks like a real-time/session-scoped recommendation on Airbnb's side rather than a request-shape issue on ours. Kept in the API since it does return real data for some listings, not removed.
  • /search's amenities id catalogue is incomplete. The filter itself is real and works with any valid numeric id, but only 2 ids (Wifi, Pool) were confirmed by hand-toggling the app's filter chips one at a time — the app exposes 30+ amenity/accessibility chips across 5 categories (see the "Homes filters" research in the source repo's FINDINGS.md), and cataloguing all of them live wasn't done this round. Pass any id you already know; more will be documented as they're confirmed.
  • This is an unofficial, reverse-engineered integration, not affiliated with or endorsed by Airbnb. Behavior may change if Airbnb changes its API.

Found a bug or have a feature request? Use the Issues tab on this Actor's page.