Airbnb APIairbnb.pt ↗
Access Airbnb rental listings, property details, availability calendars, and guest reviews via 4 structured endpoints. Filter by location, dates, guests, and price.
What is the Airbnb API?
The Airbnb.pt API provides 4 endpoints that cover the full rental research workflow: search listings by location and date, retrieve property details including amenities and house rules, check per-day availability calendars, and page through guest reviews. The search_rentals endpoint returns listing summaries with coordinates, photos, ratings, and nightly price, all filterable by check-in/check-out dates, guest count, and EUR price bounds.
curl -X GET 'https://api.parse.bot/scraper/a19880b2-0c85-4abb-bbbb-517e6e17a4f6/search_rentals?limit=5&adults=1&offset=0&check_in=2026-05-01&location=Paris%2C+France&check_out=2026-05-07&property_type_ids=1' \ -H 'X-API-Key: $PARSE_API_KEY'
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-pt-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.
"""Airbnb rental search: find listings, inspect details, read reviews."""
from parse_apis.airbnb_api import Airbnb, PropertyType, ListingNotFound
client = Airbnb()
# Search for apartments in Paris, capped at 5 results.
for listing in client.listingsummaries.search(
location="Paris, France",
property_type_ids=PropertyType.APARTMENT,
limit=5,
):
print(listing.title, listing.price_short, listing.rating)
# Drill into one listing's full details via .first()
summary = client.listingsummaries.search(location="Lisbon", limit=1).first()
if summary:
detail = summary.details()
print(detail.listing_id, detail.max_guests, detail.cancellation_policy)
# Walk the listing's guest reviews (sub-resource).
for review in detail.reviews.list(limit=3):
print(review.rating, review.text[:80] if review.text else "")
# Check availability calendar for the next month.
for day in detail.availability.list(month=7, year=2026, limit=10):
print(day.date, day.available, day.price)
# Typed error handling: catch a missing listing.
try:
gone = client.listings.get(listing_id="9999999999999")
print(gone.title)
except ListingNotFound as exc:
print(f"Listing not found: {exc.listing_id}")
print("Done: search / details / reviews / availability / error handling")
Full-text location search over Airbnb rental listings. Accepts optional date range, guest count, price bounds, and property type filters. Returns a page of listing summaries with pricing, ratings, photos, and coordinates. Pagination is offset-based: advance by incrementing offset by limit. Each ListingSummary exposes a .details() method for the full property page (a separate fetch).
| Param | Type | Description |
|---|---|---|
| limit | integer | Number of results per page |
| adults | integer | Number of adults |
| offset | integer | Pagination offset (advance by limit to get next page) |
| check_in | string | Check-in date in ISO format YYYY-MM-DD |
| location | string | Search location query (e.g. 'Paris, France', 'New York', 'Almada, Portugal') |
| check_out | string | Check-out date in ISO format YYYY-MM-DD |
| price_max | integer | Maximum nightly price in EUR |
| price_min | integer | Minimum nightly price in EUR |
| property_type_ids | string | Comma-separated property type IDs: 1=House, 2=Guesthouse, 3=Apartment, 4=Hotel |
{
"type": "object",
"fields": {
"listings": "array of listing summary objects with id, title, subtitle, name, price, price_short, rating, review_count, photos, lat, lng",
"pagination": "object with offset (integer) and has_next_page (boolean)"
},
"sample": {
"data": {
"listings": [
{
"id": "866422151982695610",
"lat": 48.8545,
"lng": 2.33752,
"name": "Duplex elegante e acolhedor em Saint-Germain-des-Prés",
"price": "1606 € no total",
"title": "Apartamento em Paris",
"photos": [
"https://a0.muscache.com/im/pictures/miso/Hosting-866422151982695610/original/52cdf005-8d43-4539-a1d6-738f4cfe73ba.jpeg"
],
"rating": "4,96 (24)",
"subtitle": "Duplex elegante e acolhedor em Saint-Germain-des-Prés",
"price_short": "1606 €",
"review_count": "Classificação média de 4,96 em 5 estrelas, 24avaliações"
}
],
"pagination": {
"offset": 0,
"has_next_page": true
}
},
"status": "success"
}
}About the Airbnb API
Search and Discovery
The search_rentals endpoint accepts a free-text location query (e.g. 'Lisbon, Portugal' or 'New York') alongside optional check_in and check_out dates in YYYY-MM-DD format, adults count, and price_min/price_max bounds in EUR. Each result in the listings array includes a numeric id, title, name, price, price_short, rating, review_count, a photos array, and lat/lng coordinates. Pagination is offset-based: the pagination object returns the current offset and a has_next_page boolean so you can advance through large result sets by incrementing offset by limit.
Property Details and Policies
get_listing_details takes a single listing_id (the numeric string from search results) and returns the full property record: a title, an HTML description, a flat amenities array of title strings, a house_rules array, cancellation_policy text, max_guests capacity, and a structured_price object with display-ready pricing. Fields that the host has not configured, or that require date selection, are returned as null rather than omitted, so response parsing is consistent.
Availability Calendars
get_listing_availability returns up to 12 months of daily data starting from a given month and year. Each entry in the availability array carries a date string (YYYY-MM-DD), an available boolean, and a formatted price string when the date is bookable. Delisted or private listings return a permission error rather than empty data, which lets callers distinguish a dead listing from a fully booked one.
Guest Reviews
get_listing_reviews pages through reviews sorted by quality. Each review object includes an id, text, a numeric rating from 1 to 5, and an author first name (or null when unavailable). The response also surfaces total_count for the listing, useful for display or for calculating how many pages remain using offset-based pagination.
The Airbnb API is a managed, monitored endpoint for airbnb.pt — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when airbnb.pt 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.pt 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 queries
search_rentalsacross multiple locations and surfaces the lowest nightly rates with ratings. - Aggregate amenities data from
get_listing_detailsto score properties against a traveler's checklist (e.g. wifi, parking, kitchen). - Feed per-day
availabilityandpricedata fromget_listing_availabilityinto a calendar UI for a travel-planning app. - Run sentiment analysis on
get_listing_reviewstext fields to classify properties by guest satisfaction themes. - Map rental density and average
ratingbylat/lngcoordinates fromsearch_rentalsfor a geo-analytics dashboard. - Monitor
cancellation_policyandmax_guestschanges over time for a property management benchmarking tool. - Compile
review_countandtotal_counttrends fromget_listing_reviewsto track listing popularity over time.
| 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_details` return when a host hasn't filled in all fields?+
get_listing_details returns null for any unconfigured field — including description, max_guests, cancellation_policy, and structured_price — rather than omitting the key. This means you can safely deserialize the response without checking for key existence, just null-check before use. amenities and house_rules return empty arrays rather than null when no entries exist.How does `get_listing_availability` signal that a listing no longer exists?+
availability array. This lets you distinguish a listing that is simply fully booked (empty or all-available: false entries) from one that has been removed or made private.Can I filter `search_rentals` by property type (e.g. entire home vs. private room)?+
search_rentals endpoint supports filtering by location, date range, adults, and price_min/price_max. Property-type filtering is not currently exposed as a parameter. You can fork this API on Parse and revise it to add a property-type filter endpoint.