Airbnb APIairbnb.com ↗
Search Airbnb listings by location and dates, retrieve full listing details, guest reviews, and availability calendars via 4 structured endpoints.
What is the Airbnb API?
The Airbnb API gives developers access to 4 endpoints covering listing search, detailed property data, guest reviews, and availability calendars. search_listings accepts a free-text location query plus optional date, guest count, and pet filters, returning paginated summaries with pricing, coordinates, ratings, and images. From there, a listing ID unlocks full amenity lists, cancellation policies, host profiles, and per-day availability with minimum and maximum night constraints.
curl -X POST 'https://api.parse.bot/scraper/ebfc2570-a5db-4d9b-9105-c3439a6586fb/search_listings' \
-H 'X-API-Key: $PARSE_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"limit": "2",
"query": "Paris, France",
"adults": "2",
"cursor": "eyJzZWN0aW9uX29mZnNldCI6MCwiaXRlbXNfb2Zmc2V0Ijo1LCJ2ZXJzaW9uIjoxfQ==",
"checkin": "2026-08-07",
"checkout": "2026-08-12",
"items_per_page": "18"
}'Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace airbnb-com-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""Walkthrough: Airbnb SDK — search listings, drill into details, read reviews & calendar."""
from parse_apis.airbnb_listings_api import Airbnb, PropertyType, ReviewSort, ListingNotFound
client = Airbnb()
# Search apartments in Paris — limit= caps total items fetched across pages.
for listing in client.listingsummaries.search(query="Paris, France", property_type=PropertyType.APARTMENT, adults=2, limit=5):
print(listing.title, listing.rating, listing.price.total if listing.price else "N/A")
# Drill into the first result for full detail.
summary = client.listingsummaries.search(query="Tokyo", limit=1).first()
if summary:
detail = summary.details()
print(detail.listing_id, detail.description[:80] if detail.description else "")
if detail.capacity:
print(detail.capacity.guests, "guests,", detail.capacity.bedrooms, "bedrooms")
if detail.host:
print(detail.host.name, "superhost:", detail.host.is_superhost)
# Read recent reviews for a listing, sorted by relevance.
if summary:
for review in client.listings.get(listing_id=summary.listing_id).reviews(sort=ReviewSort.MOST_RELEVANT, limit=3):
print(review.localized_date, review.rating, review.comments[:80] if review.comments else "")
# Check availability calendar for the next 3 months.
if summary:
for month in client.listings.get(listing_id=summary.listing_id).calendar(months_count=3, limit=3):
available = sum(1 for d in month.days if d.available)
print(f"{month.month}/{month.year}: {available} available days")
# Typed error handling — catch a not-found listing.
try:
client.listings.get(listing_id="9999999999999")
except ListingNotFound as exc:
print(f"Listing not found: {exc.listing_id}")
print("exercised: listingsummaries.search / summary.details / listing.reviews / listing.calendar / listings.get")Full-text location search across Airbnb stay listings. Returns paginated summaries with pricing, ratings, images, coordinates, and host info. Filters narrow by dates, guest count, price range, beds/bedrooms/bathrooms, and property type. Pagination uses an opaque cursor; each page returns up to items_per_page results. Server-side ordering is fixed (Airbnb relevance); client-side sorting over the returned list is the only option for custom order.
| Param | Type | Description |
|---|---|---|
| pets | integer | Number of pets |
| queryrequired | string | Search location (e.g. 'Paris, France', 'New York', 'Tokyo') |
| adults | integer | Number of adults |
| cursor | string | Pagination cursor from next_cursor of a previous response |
| checkin | string | Check-in date in YYYY-MM-DD format |
| infants | integer | Number of infants |
| checkout | string | Check-out date in YYYY-MM-DD format |
| children | integer | Number of children |
| currency | string | Currency code for pricing (e.g. USD, EUR, GBP) |
| min_beds | integer | Minimum number of beds |
| max_price | integer | Maximum price filter |
| min_price | integer | Minimum price filter |
| min_bedrooms | integer | Minimum number of bedrooms |
| min_bathrooms | integer | Minimum number of bathrooms |
| property_type | string | Property type filter |
| items_per_page | integer | Number of results per page |
{
"type": "object",
"fields": {
"count": "integer - number of listings returned in this page",
"query": "string - the search location used",
"filters": "object echoing the applied filters",
"listings": "array of listing summary objects",
"next_cursor": "string or null - opaque cursor for next page",
"has_next_page": "boolean - whether more pages exist"
}
}About the Airbnb API
Search and Listing Data
The search_listings endpoint accepts a query string (e.g. 'Lisbon, Portugal') alongside optional checkin and checkout dates in YYYY-MM-DD format, guest breakdown (adults, children, infants, pets), and a cursor string for paginating through large result sets. Each listing summary in the response includes id, title, price, rating, images, coordinates, and features. The pagination object returns has_next_page, next_cursor, and page_cursors so you can walk through all matching results.
Listing Detail and Policies
get_listing_detail takes a listing_id from search results and optionally checkin, checkout, adults, and a currency code. The response exposes a full amenities array (each item has title, available, and optional category), a policies object with house_rules, safety_and_property, and cancellation_policy, a capacity object with guests, bedrooms, beds, and bathrooms counts, and a host object including is_superhost, years_hosting, reviews_count, and rating.
Reviews
get_listing_reviews returns paginated individual reviews for a listing. Each review object includes id, rating, comments, language, created_at, localized_date, a reviewer sub-object, and an optional host_response field when the host has replied. Sort by MOST_RECENT or MOST_RELEVANT using the sort parameter. Use limit and offset together with the has_more boolean to page through the full review history.
Availability Calendar
get_availability_calendar returns day-level availability for one or more calendar months. Supply year, month, and months_count to define the window. The calendar_months array nests a days array where each entry carries date, available (boolean), min_nights, max_nights, and price. Summary integers total_days, available_days, and unavailable_days are included at the top level for quick range queries.
The Airbnb API is a managed, monitored endpoint for airbnb.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when airbnb.com changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official airbnb.com API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Build a price-comparison tool that searches multiple locations via
search_listingsand surfaces the cheapest available dates. - Populate a property detail page with amenities, host profile, and cancellation policy from
get_listing_detail. - Analyze guest sentiment trends by language using the
languageandcommentsfields inget_listing_reviews. - Generate an availability heatmap for a listing using the per-day
availableandpricefields fromget_availability_calendar. - Filter listings by
min_nightsconstraints before recommending them for short or extended stays. - Track superhost status and
years_hostingacross a portfolio of managed Airbnb properties. - Build a travel planning tool that checks availability windows across several listings simultaneously.
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does Airbnb have an official developer API?+
What does `get_listing_detail` return beyond what search results include?+
search_listings returns brief summaries: title, price, rating, coordinates, and images. get_listing_detail adds the full amenities array with availability flags and categories, a policies object covering house rules and cancellation terms, capacity counts for bedrooms, beds and bathrooms, highlights, and an enriched host object including is_superhost, years_hosting, and reviews_count.How does pagination work in `search_listings`?+
pagination object. When has_next_page is true, pass the next_cursor value as the cursor parameter in your next request. The page_cursors array lets you jump to arbitrary pages rather than stepping through them sequentially.Does the API return per-listing pricing for a specific date range?+
get_availability_calendar within each days entry alongside min_nights and max_nights. For search results, search_listings returns a summary price per listing but not a full per-night breakdown. Detailed checkout pricing (taxes, cleaning fees, service fees) is not currently included in the response. You can fork this API on Parse and revise it to add an endpoint targeting that pricing detail.