Download OpenAPI specification:
✨️ Feed this spec to your AI coding agent — Claude, Codex, OpenCode, etc.
Unlock the full potential of the short-term rental market with the AirROI API, the industry's leading data and analytics solution for Airbnb and vacation rentals. Our powerful API provides unparalleled access to comprehensive property-level data, advanced revenue forecasting, and in-depth competitive intelligence, giving you a decisive edge in the STR ecosystem.
Whether you are a property manager, investor, or data analyst, the AirROI API delivers the actionable insights you need to identify high-yield investments, optimize rental performance, and master market dynamics. Experience the next level of STR data analytics and unlock superior returns with AirROI.
Onboarding: www.airroi.com/api/developer
Pricing: www.airroi.com/api/pricing
Support: www.airroi.com/contact
Terms of Service: www.airroi.com/tos
Last Updated: September 23rd, 2026
This API is secured using an API key. To get your key, please visit www.airroi.com/api/developer/activate.
Include your assigned API key in the request headers as follows:
X-API-KEYyour-airroi-api-keyExample:
curl -X GET \
-H "X-API-KEY: your-airroi-api-key" \
https://api.airroi.com/listings?listing_id=1234567890
Our API provides powerful filtering capabilities to help you refine your search results and retrieve the exact data you need.
You can filter your results by providing a filter object in the request body. The filter object is a simple object where each field maps to its condition(s). Multiple filters are ANDed together.
For most fields, each field condition must contain exactly one operator.
The amenities field is the exception. It may combine all, any, and none
in the same object:
all: the listing must include every amenity in the listany: the listing must include at least one amenity in the listnone: the listing must include none of the amenities in the listIf you provide more than one of these operators, the listing must satisfy all of
them. For example, "amenities": {"all": ["wifi", "kitchen"], "any": ["pool", "hot_tub"], "none": ["smoking_allowed"]} means:
wifi and kitchenpool or hot_tubsmoking_allowed| Operator | Description | Example |
|---|---|---|
eq |
Equal to | "bedrooms": {"eq": 2} |
lt |
Less than | "price": {"lt": 100} |
lte |
Less than or equal to | "price": {"lte": 100} |
gt |
Greater than | "rating": {"gt": 4.5} |
gte |
Greater than or equal to | "rating": {"gte": 4.5} |
range |
Between two values (inclusive) | "bedrooms": {"range": [2, 4]} |
any |
Contains any of the values in the list | "amenities": {"any": ["pool", "wifi"]} |
all |
Contains all of the values in the list | "amenities": {"all": ["pool", "wifi"]} |
none |
Contains none of the values in the list | "amenities": {"none": ["pets_allowed"]} |
Here's a comprehensive example showcasing multiple filters and sorts:
{
"filter": {
"room_type": {"eq": "entire_home"},
"bedrooms": {"range": [2, 5]},
"baths": {"gte": 2},
"guests": {"range": [4, 10]},
"amenities": {"all": ["wifi", "kitchen", "air_conditioning"], "any": ["pool", "hot_tub", "beach_access", "waterfront"], "none": ["pets_allowed", "smoking_allowed"]},
"superhost": {"eq": true},
"instant_book": {"eq": true},
"min_nights": {"lte": 3},
"rating_overall": {"gte": 4.8},
"num_reviews": {"gte": 50},
"ttm_revenue": {"range": [75000, 250000]},
"ttm_occupancy": {"gte": 0.7},
"ttm_avg_rate": {"range": [200, 800]},
"l90d_occupancy": {"gt": 0.65},
"cleaning_fee": {"lte": 200}
},
"sort": {
"ttm_revenue": "desc",
"rating_overall": "desc",
"ttm_occupancy": "desc",
"ttm_avg_rate": "asc",
"num_reviews": "desc"
},
"pagination": {
"page_size": 10,
"offset": 0
},
"currency": "native"
}
This query finds high-performing entire homes that are family-friendly, have luxury amenities, excellent ratings, and strong financial performance, sorted by multiple criteria.
Our location filtering is powerful and flexible, allowing you to search at various geographic levels. If you are unsure about the exact spelling of a location, you can use the /markets/search or /markets/lookup endpoints to find the correct location names.
Understanding Market Administrative Levels
When searching for listings, you can specify a market object to narrow your search to a specific geographic area. The country, region, locality, and district fields are all optional, allowing for searches at different levels of granularity.
Global Search
To search for listings globally, set the market object to null.
{
"market": null,
"sort": {
"ttm_revenue": "desc"
}
}
Country-Level Search To find high-performing entire home listings with excellent ratings in the United States:
{
"market": {
"country": "United States"
},
"filter": {
"room_type": {"eq": "entire_home"},
"ttm_revenue": {"gte": 75000},
"ttm_occupancy": {"gt": 0.65},
"rating_overall": {"gte": 4.8},
"num_reviews": {"gte": 25}
},
"sort": {
"ttm_revenue": "desc",
"rating_overall": "desc",
"ttm_occupancy": "desc"
},
"pagination": {
"page_size": 10,
"offset": 0
}
}
Region-Level Search To find premium vacation rentals in California with specific amenities and performance metrics:
{
"market": {
"country": "United States",
"region": "California"
},
"filter": {
"bedrooms": {"range": [3, 6]},
"baths": {"gte": 2.5},
"guests": {"gte": 6},
"amenities": {"all": ["pool", "hot_tub", "wifi", "kitchen"]},
"ttm_avg_rate": {"range": [350, 1000]},
"ttm_revenue": {"gt": 100000},
"superhost": {"eq": true},
"instant_book": {"eq": true}
},
"sort": {
"ttm_revenue": "desc",
"ttm_avg_rate": "desc",
"num_reviews": "desc"
},
"currency": "usd"
}
Locality-Level Search To find high-performing short-term rentals in Miami Beach with beach proximity and luxury features:
{
"market": {
"country": "United States",
"region": "Florida",
"locality": "Miami Beach"
},
"filter": {
"bedrooms": {"gte": 2},
"baths": {"gte": 2},
"amenities": {"all": ["beach_access", "patio_or_balcony", "pool", "free_parking_on_premises"]},
"ttm_occupancy": {"gte": 0.70},
"ttm_revenue": {"gte": 80000},
"rating_overall": {"gte": 4.7},
"instant_book": {"eq": true}
},
"sort": {
"ttm_revenue": "desc",
"ttm_occupancy": "desc"
},
"currency": "usd"
}
District-Level Search To find exceptional short-term rentals in the 18th Arrondissement of Paris with specific criteria:
{
"market": {
"country": "France",
"region": "Ile-de-France",
"locality": "Paris",
"district": "18th Arrondissement"
},
"filter": {
"superhost": {"eq": true},
"rating_overall": {"gte": 4.9},
"rating_cleanliness": {"gte": 4.95},
"num_reviews": {"range": [50, 500]},
"bedrooms": {"range": [1, 3]},
"min_nights": {"lte": 3},
"l90d_occupancy": {"gte": 0.75},
"amenities": {"any": ["elevator", "air_conditioning"], "none": ["pets_allowed", "smoking_allowed"]}
},
"sort": {
"rating_overall": "desc",
"num_reviews": "desc",
"l90d_revenue": "desc",
"ttm_avg_rate": "asc"
},
"pagination": {
"page_size": 10
}
}
When querying for market data, the country, region, and locality fields are required. The district field is optional.
Market analytics request bodies support filter, currency, and num_months. They do not support sort or pagination.
Locality-Level Market Search To analyze performance metrics for premium family-friendly listings in Paris:
{
"market": {
"country": "France",
"region": "Ile-de-France",
"locality": "Paris"
},
"filter": {
"bedrooms": {"range": [2, 4]},
"baths": {"gte": 1.5},
"guests": {"range": [4, 8]},
"amenities": {"all": ["kitchen", "washer", "wifi"], "any": ["crib", "high_chair", "childrens_books_and_toys"]},
"ttm_revenue": {"gte": 50000},
"rating_overall": {"gte": 4.7}
},
"num_months": 60,
"currency": "usd"
}
District-Level Market Search To analyze luxury apartment performance in Manhattan's 10001 zip code:
{
"market": {
"country": "United States",
"region": "New York",
"locality": "New York",
"district": "10001"
},
"filter": {
"room_type": {"eq": "entire_home"},
"bedrooms": {"gte": 2},
"amenities": {"all": ["air_conditioning", "elevator", "wifi"], "any": ["pool", "gym", "sauna", "hot_tub"]},
"ttm_avg_rate": {"gte": 400},
"l90d_occupancy": {"range": [0.6, 0.95]},
"cleaning_fee": {"lte": 300},
"min_nights": {"range": [2, 7]}
},
"num_months": 24
}
| Field | Type | Operators |
|---|---|---|
latitude |
Numeric | eq, lt, lte, gt, gte, range |
longitude |
Numeric | eq, lt, lte, gt, gte, range |
country |
String | eq (Accepts 2-letter country code or full name) |
region |
String | eq |
locality |
String | eq |
district |
String | eq |
exact_location |
Boolean | eq |
| Field | Type | Operators |
|---|---|---|
amenities |
List | any, all, none (can be combined on the same field) |
baths |
Numeric | eq, lt, lte, gt, gte, range |
bedrooms |
Numeric | eq, lt, lte, gt, gte, range |
beds |
Numeric | eq, lt, lte, gt, gte, range |
guests |
Numeric | eq, lt, lte, gt, gte, range |
listing_id |
Numeric | eq, lt, lte, gt, gte, range |
listing_type |
String | eq |
min_nights |
Numeric | eq, lt, lte, gt, gte, range |
photos_count |
Numeric | eq, lt, lte, gt, gte, range |
room_type |
String | eq |
guest_favorite |
Boolean | eq |
| Field | Type | Operators |
|---|---|---|
cohost_ids |
List | any, all, none |
cohost_names |
List | any, all, none |
host_id |
Numeric | eq, lt, lte, gt, gte, range |
host_name |
String | eq |
professional_management |
Boolean | eq |
superhost |
Boolean | eq |
| Field | Type | Operators |
|---|---|---|
cleaning_fee |
Numeric | eq, lt, lte, gt, gte, range |
extra_guest_fee |
Numeric | eq, lt, lte, gt, gte, range |
instant_book |
Boolean | eq |
short_stay_cleaning_fee |
Numeric | eq, lt, lte, gt, gte, range |
single_fee_structure |
Boolean | eq |
| Field | Type | Operators |
|---|---|---|
num_reviews |
Numeric | eq, lt, lte, gt, gte, range |
rating_accuracy |
Numeric | eq, lt, lte, gt, gte, range |
rating_checkin |
Numeric | eq, lt, lte, gt, gte, range |
rating_cleanliness |
Numeric | eq, lt, lte, gt, gte, range |
rating_communication |
Numeric | eq, lt, lte, gt, gte, range |
rating_location |
Numeric | eq, lt, lte, gt, gte, range |
rating_overall |
Numeric | eq, lt, lte, gt, gte, range |
rating_value |
Numeric | eq, lt, lte, gt, gte, range |
| Field | Type | Operators |
|---|---|---|
l90d_adjusted_occupancy |
Numeric | eq, lt, lte, gt, gte, range |
l90d_adjusted_revpar |
Numeric | eq, lt, lte, gt, gte, range |
l90d_avg_rate |
Numeric | eq, lt, lte, gt, gte, range |
l90d_avg_min_nights |
Numeric | eq, lt, lte, gt, gte, range |
l90d_avg_length_of_stay |
Numeric | eq, lt, lte, gt, gte, range |
l90d_available_days |
Numeric | eq, lt, lte, gt, gte, range |
l90d_days_booked |
Numeric | eq, lt, lte, gt, gte, range |
l90d_occupancy |
Numeric | eq, lt, lte, gt, gte, range |
l90d_revenue |
Numeric | eq, lt, lte, gt, gte, range |
l90d_revpar |
Numeric | eq, lt, lte, gt, gte, range |
| Field | Type | Operators |
|---|---|---|
ttm_adjusted_occupancy |
Numeric | eq, lt, lte, gt, gte, range |
ttm_adjusted_revpar |
Numeric | eq, lt, lte, gt, gte, range |
ttm_avg_rate |
Numeric | eq, lt, lte, gt, gte, range |
ttm_avg_min_nights |
Numeric | eq, lt, lte, gt, gte, range |
ttm_avg_length_of_stay |
Numeric | eq, lt, lte, gt, gte, range |
ttm_available_days |
Numeric | eq, lt, lte, gt, gte, range |
ttm_days_booked |
Numeric | eq, lt, lte, gt, gte, range |
ttm_occupancy |
Numeric | eq, lt, lte, gt, gte, range |
ttm_revenue |
Numeric | eq, lt, lte, gt, gte, range |
ttm_revpar |
Numeric | eq, lt, lte, gt, gte, range |
room_typeentire_homeprivate_roomshared_roomamenitiesair_conditioningarcade_gamesbaby_bathbaby_monitorbaby_safety_gatesbabysitter_recommendationsbackyardbaking_sheetbarbarbecue_utensilsbathtubbatting_cagebbq_grillbeach_accessbeach_essentialsbed_linensbidetbikesblenderboard_gamesboat_slipbody_soapbooks_and_reading_materialbowling_alleybread_makerbreakfastbuilding_staffcable_tvcarbon_monoxide_alarmceiling_fanchanging_tablechildrens_bikeschildrens_books_and_toyschildrens_dinnerwarechildrens_playroomcleaning_before_checkoutcleaning_productsclimbing_wallclothing_storagecoffeecoffee_makerconditionercooking_basicscribdedicated_workspacedining_tabledishes_and_silverwaredishwasherdoormandryerdrying_rack_for_clothingelevatoressentialsethernet_connectionev_chargerexercise_equipmentexterior_security_cameras_on_propertyextra_pillows_and_blanketsfire_extinguisherfire_pitfireplace_guardsfirst_aid_kitfree_parking_on_premisesfree_street_parkingfreezergame_consolegarden_viewgated_propertygymhair_dryerhammockhangersheatinghigh_chairhockey_rinkhost_greets_youhot_tubhot_waterhot_water_kettleindoor_fireplaceironkayakkeypadkitchenlake_accesslaser_taglaundromat_nearbylife_size_gameslock_on_bedroom_doorlockboxlong_term_stays_allowedluggage_dropoff_allowedmicrowavemini_fridgemini_golfmosquito_netmovie_theaternoise_decibel_monitors_on_propertyocean_viewoutdoor_dining_areaoutdoor_furnitureoutdoor_kitchenoutdoor_playgroundoutdoor_showeroutlet_coversovenpack_n_play_travel_cribpaid_parking_off_premisespaid_parking_on_premisespatio_or_balconypets_allowedpianoping_pong_tablepocket_wifipoolpool_tablepool_viewportable_fansprivate_entranceprivate_living_roomrecord_playerrefrigeratorresort_accessrice_makerriver_viewroom_darkening_shadessafesaunasecurity_systemself_check_inshampooshower_gelsingle_level_homeskate_rampski_in_ski_outsmart_locksmoke_alarmsmoking_allowedsound_systemstovesun_loungerstable_corner_guardstheme_roomtoastertrash_compactortvwasherwaterfrontwifiwindow_guardswine_glassesSorting is supported on the /listings/search/* endpoints. Provide a sort object in the request body to order listing results. The sort object is a map of field names to sort directions (asc or desc). Order is preserved, with the first field having highest priority.
Example:
{
"sort": {
"ttm_revenue": "desc",
"rating_overall": "desc",
"num_reviews": "desc"
}
}
| Field | Type |
|---|---|
latitude |
Numeric |
longitude |
Numeric |
| Field | Type |
|---|---|
baths |
Numeric |
bedrooms |
Numeric |
beds |
Numeric |
guests |
Numeric |
listing_id |
Numeric |
listing_type |
String |
min_nights |
Numeric |
photos_count |
Numeric |
room_type |
String |
guest_favorite |
Boolean |
| Field | Type |
|---|---|
host_id |
Numeric |
host_name |
String |
professional_management |
Boolean |
superhost |
Boolean |
| Field | Type |
|---|---|
cleaning_fee |
Numeric |
extra_guest_fee |
Numeric |
instant_book |
Boolean |
short_stay_cleaning_fee |
Numeric |
| Field | Type |
|---|---|
num_reviews |
Numeric |
rating_accuracy |
Numeric |
rating_checkin |
Numeric |
rating_cleanliness |
Numeric |
rating_communication |
Numeric |
rating_location |
Numeric |
rating_overall |
Numeric |
rating_value |
Numeric |
| Field | Type |
|---|---|
l90d_adjusted_occupancy |
Numeric |
l90d_adjusted_revpar |
Numeric |
l90d_avg_rate |
Numeric |
l90d_avg_min_nights |
Numeric |
l90d_avg_length_of_stay |
Numeric |
l90d_available_days |
Numeric |
l90d_days_booked |
Numeric |
l90d_occupancy |
Numeric |
l90d_revenue |
Numeric |
l90d_revpar |
Numeric |
| Field | Type |
|---|---|
ttm_adjusted_occupancy |
Numeric |
ttm_adjusted_revpar |
Numeric |
ttm_avg_rate |
Numeric |
ttm_avg_min_nights |
Numeric |
ttm_avg_length_of_stay |
Numeric |
ttm_available_days |
Numeric |
ttm_days_booked |
Numeric |
ttm_occupancy |
Numeric |
ttm_revenue |
Numeric |
ttm_revpar |
Numeric |
Pagination is controlled by the pagination object in the request body.
/listings/search/* defaults to page_size: 10 and offset: 0/markets/summary and /markets/metrics/* do not use pagination; use num_months to control the time window for aggregated market analyticsExample:
{
"pagination": {
"page_size": 10,
"offset": 20
}
}
Access comprehensive Airbnb listings and vacation rental search capabilities through our property data API. Search and analyze short-term rental listing data across multiple markets to find investment opportunities and track competitor properties.
Access our Airbnb property details API to retrieve comprehensive vacation rental listing data and STR property analytics for individual listing performance analysis. Get complete short-term rental property information using the listing's unique identifier.
Returns extensive property information including:
| listing_id required | integer <int64> Example: listing_id=43036533 Airbnb listing ID to fetch detailed information about a specific property. |
| currency | string Default: "native" Enum: "usd" "native" Example: currency=usd Currency for financial data conversion. Default: native currency. Allowed currency values are 'usd' (US Dollars) or 'native' (local currency). For example, 'native' automatically uses EUR in France, JPY in Japan, or BRL in Brazil etc. |
curl -X GET "https://api.airroi.com/listings?listing_id=43036533¤cy=native" \ -H "x-api-key: your-airroi-api-key"
{- "listing_info": {
- "listing_id": 43036533,
- "listing_name": "Beachfront Villa with Private Pool",
- "description": "Oceanfront villa with a heated pool, outdoor shower, and direct beach access.",
- "listing_type": "Entire villa",
- "room_type": "entire_home",
- "photos_count": 45,
- "checkin_time": "4:00 PM - 10:00 PM",
- "checkout_time": "11:00 AM",
- "guest_favorite": true
}, - "host_info": {
- "host_id": 156789234,
- "host_name": "Alexandra",
- "cohost_ids": [ ],
- "cohost_names": [ ],
- "superhost": true,
- "professional_management": false
}, - "location_info": {
- "country_code": "US",
- "country": "United States",
- "region": "California",
- "locality": "Malibu",
- "district": "Malibu Beach",
- "latitude": 34.0259,
- "longitude": -118.7798,
- "exact_location": false
}, - "property_details": {
- "guests": 8,
- "bedrooms": 4,
- "beds": 5,
- "baths": 3.5,
- "registration": true,
- "amenities": [
- "wifi",
- "kitchen",
- "free_parking_on_premises",
- "pool",
- "hot_tub",
- "beach_access",
- "bbq_grill",
- "outdoor_shower",
- "fire_pit",
- "dedicated_workspace"
]
}, - "booking_settings": {
- "instant_book": false,
- "min_nights": 3,
- "cancellation_policy": "strict"
}, - "pricing_info": {
- "currency": "USD",
- "cleaning_fee": 350,
- "short_stay_cleaning_fee": 350,
- "extra_guest_fee": 75,
- "single_fee_structure": false
}, - "ratings": {
- "num_reviews": 89,
- "rating_overall": 4.96,
- "rating_accuracy": 4.98,
- "rating_checkin": 4.97,
- "rating_cleanliness": 4.95,
- "rating_communication": 4.98,
- "rating_location": 5,
- "rating_value": 4.92
}, - "performance_metrics": {
- "ttm_revenue": 285000,
- "ttm_avg_rate": 1250,
- "ttm_occupancy": 0.625,
- "ttm_adjusted_occupancy": 0.61,
- "ttm_revpar": 781.25,
- "ttm_adjusted_revpar": 762.5,
- "ttm_total_days": 365,
- "ttm_available_days": 350,
- "ttm_blocked_days": 15,
- "ttm_days_reserved": 219,
- "ttm_avg_min_nights": 3.4,
- "ttm_avg_length_of_stay": 5.1,
- "l90d_revenue": 95000,
- "l90d_avg_rate": 1500,
- "l90d_occupancy": 0.7,
- "l90d_adjusted_occupancy": 0.68,
- "l90d_revpar": 1050,
- "l90d_adjusted_revpar": 1020,
- "l90d_total_days": 90,
- "l90d_available_days": 88,
- "l90d_blocked_days": 2,
- "l90d_days_reserved": 62,
- "l90d_avg_min_nights": 2.8,
- "l90d_avg_length_of_stay": 4.6
}
}Access our bulk Airbnb data API to fetch multiple vacation rental listings in a single request. This batch endpoint accepts up to 25 listing IDs and returns comprehensive property data for STR portfolio analysis, competitive intelligence, and market research. Perfect for property managers, real estate investors, and market analysts who need detailed listing information for multiple properties simultaneously.
Returns comprehensive listing details including property characteristics, host information, amenities, pricing data, guest reviews, and performance metrics (TTM and L90D). The API optimizes bulk data retrieval by processing up to 25 listings per request, ensuring efficient data access for vacation rental analytics. The response includes both successfully retrieved listings and error information for any listings that could not be found.
required | Array of integers or strings [ 1 .. 25 ] items List of Airbnb listing IDs to retrieve. Maximum 25 per request. |
| currency | string Default: "native" Enum: "usd" "native" Optional currency for financial data conversion. If omitted, returns each listing's native currency. Allowed currency values are 'usd' (US Dollars) or 'native' (local currency). For example, 'native' automatically uses EUR in France, JPY in Japan, or BRL in Brazil etc. |
{- "listing_ids": [
- 43036533,
- 20609252,
- 52847291,
- 99999999
], - "currency": "native"
}{- "results": [
- {
- "listing_info": {
- "listing_id": 43036533,
- "listing_name": "Beachfront Villa with Private Pool",
- "description": "Oceanfront villa with a heated pool, outdoor shower, and direct beach access.",
- "listing_type": "Entire villa",
- "room_type": "entire_home",
- "photos_count": 45,
- "checkin_time": "4:00 PM - 10:00 PM",
- "checkout_time": "11:00 AM",
- "guest_favorite": true
}, - "host_info": {
- "host_id": 156789234,
- "host_name": "Alexandra",
- "cohost_ids": [ ],
- "cohost_names": [ ],
- "superhost": true,
- "professional_management": false
}, - "location_info": {
- "country_code": "US",
- "country": "United States",
- "region": "California",
- "locality": "Malibu",
- "district": "Malibu Beach",
- "latitude": 34.0259,
- "longitude": -118.7798,
- "exact_location": false
}, - "property_details": {
- "guests": 8,
- "bedrooms": 4,
- "beds": 5,
- "baths": 3.5,
- "registration": true,
- "amenities": [
- "wifi",
- "kitchen",
- "free_parking_on_premises",
- "pool",
- "hot_tub",
- "beach_access",
- "bbq_grill",
- "outdoor_shower",
- "fire_pit",
- "dedicated_workspace"
]
}, - "booking_settings": {
- "instant_book": false,
- "min_nights": 3,
- "cancellation_policy": "strict"
}, - "pricing_info": {
- "currency": "USD",
- "cleaning_fee": 350,
- "short_stay_cleaning_fee": 350,
- "extra_guest_fee": 75,
- "single_fee_structure": false
}, - "ratings": {
- "num_reviews": 89,
- "rating_overall": 4.96,
- "rating_accuracy": 4.98,
- "rating_checkin": 4.97,
- "rating_cleanliness": 4.95,
- "rating_communication": 4.98,
- "rating_location": 5,
- "rating_value": 4.92
}, - "performance_metrics": {
- "ttm_revenue": 285000,
- "ttm_avg_rate": 1250,
- "ttm_occupancy": 0.625,
- "ttm_adjusted_occupancy": 0.61,
- "ttm_revpar": 781.25,
- "ttm_adjusted_revpar": 762.5,
- "ttm_total_days": 365,
- "ttm_available_days": 350,
- "ttm_blocked_days": 15,
- "ttm_days_reserved": 219,
- "ttm_avg_min_nights": 3.4,
- "ttm_avg_length_of_stay": 5.1,
- "l90d_revenue": 95000,
- "l90d_avg_rate": 1500,
- "l90d_occupancy": 0.7,
- "l90d_adjusted_occupancy": 0.68,
- "l90d_revpar": 1050,
- "l90d_adjusted_revpar": 1020,
- "l90d_total_days": 90,
- "l90d_available_days": 88,
- "l90d_blocked_days": 2,
- "l90d_days_reserved": 62,
- "l90d_avg_min_nights": 2.8,
- "l90d_avg_length_of_stay": 4.6
}
}, - {
- "listing_info": {
- "listing_id": 20609252,
- "listing_name": "Cozy Downtown Loft",
- "description": "Light-filled loft near transit, restaurants, and downtown offices.",
- "listing_type": "Entire loft",
- "room_type": "entire_home",
- "photos_count": 25,
- "checkin_time": "3:00 PM - 9:00 PM",
- "checkout_time": "10:00 AM",
- "guest_favorite": false
}, - "host_info": {
- "host_id": 987654321,
- "host_name": "Michael",
- "cohost_ids": [ ],
- "cohost_names": [ ],
- "superhost": false,
- "professional_management": false
}, - "location_info": {
- "country_code": "US",
- "country": "United States",
- "region": "New York",
- "locality": "New York",
- "district": "Manhattan",
- "latitude": 40.7128,
- "longitude": -74.006,
- "exact_location": true
}, - "property_details": {
- "guests": 4,
- "bedrooms": 2,
- "beds": 2,
- "baths": 1,
- "registration": false,
- "amenities": [
- "wifi",
- "kitchen",
- "air_conditioning",
- "elevator"
]
}, - "booking_settings": {
- "instant_book": true,
- "min_nights": 1,
- "cancellation_policy": "flexible"
}, - "pricing_info": {
- "currency": "USD",
- "cleaning_fee": 100,
- "short_stay_cleaning_fee": 100,
- "extra_guest_fee": 25,
- "single_fee_structure": true
}, - "ratings": {
- "num_reviews": 150,
- "rating_overall": 4.8,
- "rating_accuracy": 4.9,
- "rating_checkin": 4.9,
- "rating_cleanliness": 4.8,
- "rating_communication": 4.9,
- "rating_location": 4.9,
- "rating_value": 4.7
}, - "performance_metrics": {
- "ttm_revenue": 150000,
- "ttm_avg_rate": 410,
- "ttm_occupancy": 0.85,
- "ttm_adjusted_occupancy": 0.83,
- "ttm_revpar": 348.5,
- "ttm_adjusted_revpar": 340.3,
- "ttm_total_days": 365,
- "ttm_available_days": 360,
- "ttm_blocked_days": 5,
- "ttm_days_reserved": 306,
- "ttm_avg_min_nights": 1.8,
- "ttm_avg_length_of_stay": 3.2,
- "l90d_revenue": 40000,
- "l90d_avg_rate": 450,
- "l90d_occupancy": 0.9,
- "l90d_adjusted_occupancy": 0.88,
- "l90d_revpar": 405,
- "l90d_adjusted_revpar": 396,
- "l90d_total_days": 90,
- "l90d_available_days": 90,
- "l90d_blocked_days": 0,
- "l90d_days_reserved": 81,
- "l90d_avg_min_nights": 1.4,
- "l90d_avg_length_of_stay": 2.7
}
}
], - "errors": [
- {
- "listing_id": 99999999,
- "message": "Listing not found. This may be due to an invalid ID, or the listing has not been added to our system."
}
]
}Find Airbnb comparable properties using our STR competitive analysis and vacation rental comps API. Our property benchmarking tool identifies similar short-term rental properties for accurate short-term rental market comparison based on location and property characteristics.
Specify location using either latitude/longitude coordinates or a physical address string (but not both).
| latitude | number <double> [ -90 .. 90 ] Example: latitude=34.052235 Property latitude for comparison. Required if |
| longitude | number <double> [ -180 .. 180 ] Example: longitude=-118.243683 Property longitude for comparison. Required if |
| address | string Example: address=123 Main St, Miami, FL Physical address for comparison (e.g. "123 Main St, Miami, FL").
Use as an alternative to |
| radius | number <double> [ 1 .. 10 ] Default: 3 Example: radius=5 Search radius in miles for comparable listings. Default: 3 miles. Increase the radius in low-density areas (e.g. rural locations or large homes with few similar properties nearby) to find more comparables. |
| room_type | string Enum: "entire_home" "private_room" "shared_room" Example: room_type=entire_home Restrict comparable listings to a single room type. By default all
room types are searched. For whole-property comparisons,
|
| bedrooms required | integer [ 0 .. 20 ] Example: bedrooms=2 Number of bedrooms in subject property |
| baths required | number <double> [ 0 .. 20 ] Example: baths=2 Number of bathrooms in subject property (supports half baths as decimals) |
| guests required | integer [ 1 .. 30 ] Example: guests=4 Guest capacity of subject property |
| currency | string Default: "native" Enum: "usd" "native" Example: currency=native Currency for financial data in comparable listings. Default: each listing's native currency. Allowed currency values are 'usd' (US Dollars) or 'native' (local currency). For example, 'native' automatically uses EUR in France, JPY in Japan, or BRL in Brazil etc. |
curl -X GET "https://api.airroi.com/listings/comparables?latitude=34.052235&longitude=-118.243683&bedrooms=2&baths=2.0&guests=4¤cy=native" \ -H "x-api-key: your-airroi-api-key"
{- "listings": [
- {
- "listing_info": {
- "listing_id": 43036533,
- "listing_name": "Luxury Downtown Loft with Skyline Views",
- "description": "Spacious villa with ocean views, heated pool, and direct beach access.",
- "listing_type": "Entire rental unit",
- "room_type": "entire_home",
- "photos_count": 32,
- "checkin_time": "4:00 PM - 10:00 PM",
- "checkout_time": "11:00 AM",
- "guest_favorite": true
}, - "host_info": {
- "host_id": 287465123,
- "host_name": "Maria",
- "cohost_ids": [
- 12345678,
- 87654321
], - "cohost_names": [
- "John",
- "Sarah"
], - "superhost": true,
- "professional_management": false
}, - "location_info": {
- "country_code": "US",
- "country": "United States",
- "region": "California",
- "locality": "Los Angeles",
- "district": "Downtown",
- "latitude": 34.052235,
- "longitude": -118.243683,
- "exact_location": false
}, - "property_details": {
- "guests": 6,
- "bedrooms": 2,
- "beds": 3,
- "baths": 2,
- "registration": true,
- "registration_details": "string",
- "amenities": [
- "wifi",
- "kitchen",
- "air_conditioning",
- "washer",
- "dryer",
- "pool",
- "gym"
]
}, - "booking_settings": {
- "instant_book": true,
- "min_nights": 2,
- "cancellation_policy": "moderate"
}, - "pricing_info": {
- "currency": "USD",
- "cleaning_fee": 125,
- "short_stay_cleaning_fee": 95,
- "extra_guest_fee": 35,
- "single_fee_structure": false
}, - "ratings": {
- "num_reviews": 247,
- "rating_overall": 4.92,
- "rating_accuracy": 4.95,
- "rating_checkin": 4.93,
- "rating_cleanliness": 4.91,
- "rating_communication": 4.94,
- "rating_location": 4.96,
- "rating_value": 4.88
}, - "performance_metrics": {
- "ttm_revenue": 85650.5,
- "ttm_avg_rate": 285.75,
- "ttm_occupancy": 0.82,
- "ttm_adjusted_occupancy": 0.8,
- "ttm_revpar": 234.32,
- "ttm_adjusted_revpar": 228.6,
- "ttm_total_days": 365,
- "ttm_available_days": 340,
- "ttm_blocked_days": 25,
- "ttm_days_reserved": 279,
- "ttm_avg_min_nights": 3.4,
- "ttm_avg_length_of_stay": 4.8,
- "l90d_revenue": 24500,
- "l90d_avg_rate": 295,
- "l90d_occupancy": 0.85,
- "l90d_adjusted_occupancy": 0.83,
- "l90d_revpar": 250.75,
- "l90d_adjusted_revpar": 244.85,
- "l90d_total_days": 90,
- "l90d_available_days": 87,
- "l90d_blocked_days": 3,
- "l90d_days_reserved": 74,
- "l90d_avg_min_nights": 2.7,
- "l90d_avg_length_of_stay": 4.1
}
}
]
}Search Airbnb listings and vacation rental properties within any market worldwide using our comprehensive STR market search API. This endpoint enables location-based property discovery for short-term rental market analysis, competitive research, and investment opportunities. Filter listings by property type, amenities, pricing, and performance metrics to identify the best vacation rental opportunities in your target market.
Perfect for property managers, real estate investors, and market researchers analyzing Airbnb competition, market saturation, and revenue potential. Returns detailed listing data with performance metrics, enabling data-driven investment decisions in the short-term rental industry.
object A filter object where each field maps to its condition(s). Multiple filters are ANDed together. For most fields, each field condition must contain exactly one operator. The
If you provide more than one of these operators, the listing must satisfy all of them. Available Operators:
Example:
This means the listing must have View Filterable FieldsLocation
Property Details
Host
Booking & Pricing
Ratings
Performance Metrics (Last 90 Days)
Performance Metrics (Trailing Twelve Months)
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
object A map of field names to sort directions. Order is preserved, with the first field having highest priority. Example:
View Sortable FieldsLocation
Property Details
Host
Booking & Pricing
Ratings
Performance Metrics (Last 90 Days)
Performance Metrics (Trailing Twelve Months)
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
object Pagination parameters for listing search requests. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| currency | string Default: "native" Enum: "usd" "native" Currency for financial data conversion. Allowed currency values are 'usd' (US Dollars) or 'native' (local currency). For example, 'native' automatically uses EUR in France, JPY in Japan, or BRL in Brazil etc. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
object (Market) Internal representation of a geographic market used for encoding/decoding market identifiers. |
{- "market": {
- "country": "United States",
- "region": "Florida",
- "locality": "Miami Beach"
}, - "filter": {
- "room_type": {
- "eq": "entire_home"
}, - "bedrooms": {
- "gte": 4
}, - "ttm_revenue": {
- "gt": 150000
}, - "amenities": {
- "all": [
- "pool",
- "beach_access",
- "air_conditioning"
]
}
}, - "sort": {
- "ttm_revenue": "desc"
}, - "pagination": {
- "page_size": 10,
- "offset": 0
}, - "currency": "native"
}{- "pagination": {
- "total_count": 0,
- "page_size": 0,
- "offset": 0
}, - "results": [
- {
- "listing_info": {
- "listing_id": 43036533,
- "listing_name": "Luxury Downtown Loft with Skyline Views",
- "description": "Spacious villa with ocean views, heated pool, and direct beach access.",
- "listing_type": "Entire rental unit",
- "room_type": "entire_home",
- "photos_count": 32,
- "checkin_time": "4:00 PM - 10:00 PM",
- "checkout_time": "11:00 AM",
- "guest_favorite": true
}, - "host_info": {
- "host_id": 287465123,
- "host_name": "Maria",
- "cohost_ids": [
- 12345678,
- 87654321
], - "cohost_names": [
- "John",
- "Sarah"
], - "superhost": true,
- "professional_management": false
}, - "location_info": {
- "country_code": "US",
- "country": "United States",
- "region": "California",
- "locality": "Los Angeles",
- "district": "Downtown",
- "latitude": 34.052235,
- "longitude": -118.243683,
- "exact_location": false
}, - "property_details": {
- "guests": 6,
- "bedrooms": 2,
- "beds": 3,
- "baths": 2,
- "registration": true,
- "registration_details": "string",
- "amenities": [
- "wifi",
- "kitchen",
- "air_conditioning",
- "washer",
- "dryer",
- "pool",
- "gym"
]
}, - "booking_settings": {
- "instant_book": true,
- "min_nights": 2,
- "cancellation_policy": "moderate"
}, - "pricing_info": {
- "currency": "USD",
- "cleaning_fee": 125,
- "short_stay_cleaning_fee": 95,
- "extra_guest_fee": 35,
- "single_fee_structure": false
}, - "ratings": {
- "num_reviews": 247,
- "rating_overall": 4.92,
- "rating_accuracy": 4.95,
- "rating_checkin": 4.93,
- "rating_cleanliness": 4.91,
- "rating_communication": 4.94,
- "rating_location": 4.96,
- "rating_value": 4.88
}, - "performance_metrics": {
- "ttm_revenue": 85650.5,
- "ttm_avg_rate": 285.75,
- "ttm_occupancy": 0.82,
- "ttm_adjusted_occupancy": 0.8,
- "ttm_revpar": 234.32,
- "ttm_adjusted_revpar": 228.6,
- "ttm_total_days": 365,
- "ttm_available_days": 340,
- "ttm_blocked_days": 25,
- "ttm_days_reserved": 279,
- "ttm_avg_min_nights": 3.4,
- "ttm_avg_length_of_stay": 4.8,
- "l90d_revenue": 24500,
- "l90d_avg_rate": 295,
- "l90d_occupancy": 0.85,
- "l90d_adjusted_occupancy": 0.83,
- "l90d_revpar": 250.75,
- "l90d_adjusted_revpar": 244.85,
- "l90d_total_days": 90,
- "l90d_available_days": 87,
- "l90d_blocked_days": 3,
- "l90d_days_reserved": 74,
- "l90d_avg_min_nights": 2.7,
- "l90d_avg_length_of_stay": 4.1
}
}
]
}Discover Airbnb listings and vacation rentals within a specific radius using our geospatial STR property search API. This proximity-based search endpoint finds all short-term rental properties within your defined distance from any location, perfect for competitive analysis, market research, and identifying investment opportunities near points of interest.
Ideal for analyzing vacation rental density around attractions, business districts, or specific addresses. Returns comprehensive listing data including property details, performance metrics, and location coordinates, enabling location-based market analysis and strategic property investment decisions.
object A filter object where each field maps to its condition(s). Multiple filters are ANDed together. For most fields, each field condition must contain exactly one operator. The
If you provide more than one of these operators, the listing must satisfy all of them. Available Operators:
Example:
This means the listing must have View Filterable FieldsLocation
Property Details
Host
Booking & Pricing
Ratings
Performance Metrics (Last 90 Days)
Performance Metrics (Trailing Twelve Months)
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
object A map of field names to sort directions. Order is preserved, with the first field having highest priority. Example:
View Sortable FieldsLocation
Property Details
Host
Booking & Pricing
Ratings
Performance Metrics (Last 90 Days)
Performance Metrics (Trailing Twelve Months)
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
object Pagination parameters for listing search requests. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| currency | string Default: "native" Enum: "usd" "native" Currency for financial data conversion. Allowed currency values are 'usd' (US Dollars) or 'native' (local currency). For example, 'native' automatically uses EUR in France, JPY in Japan, or BRL in Brazil etc. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| latitude required | number <double> [ -90 .. 90 ] | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| longitude required | number <double> [ -180 .. 180 ] | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| radius_miles | number <double> [ 1 .. 100 ] Default: 3 |
{- "latitude": 40.758,
- "longitude": -73.9855,
- "radius_miles": 2,
- "filter": {
- "room_type": {
- "eq": "entire_home"
}, - "min_nights": {
- "lte": 7
}, - "instant_book": {
- "eq": true
}, - "rating_cleanliness": {
- "gte": 4.8
}
}, - "sort": {
- "ttm_revenue": "desc"
}, - "pagination": {
- "page_size": 10,
- "offset": 0
}, - "currency": "native"
}{- "pagination": {
- "total_count": 0,
- "page_size": 0,
- "offset": 0
}, - "results": [
- {
- "listing_info": {
- "listing_id": 43036533,
- "listing_name": "Luxury Downtown Loft with Skyline Views",
- "description": "Spacious villa with ocean views, heated pool, and direct beach access.",
- "listing_type": "Entire rental unit",
- "room_type": "entire_home",
- "photos_count": 32,
- "checkin_time": "4:00 PM - 10:00 PM",
- "checkout_time": "11:00 AM",
- "guest_favorite": true
}, - "host_info": {
- "host_id": 287465123,
- "host_name": "Maria",
- "cohost_ids": [
- 12345678,
- 87654321
], - "cohost_names": [
- "John",
- "Sarah"
], - "superhost": true,
- "professional_management": false
}, - "location_info": {
- "country_code": "US",
- "country": "United States",
- "region": "California",
- "locality": "Los Angeles",
- "district": "Downtown",
- "latitude": 34.052235,
- "longitude": -118.243683,
- "exact_location": false
}, - "property_details": {
- "guests": 6,
- "bedrooms": 2,
- "beds": 3,
- "baths": 2,
- "registration": true,
- "registration_details": "string",
- "amenities": [
- "wifi",
- "kitchen",
- "air_conditioning",
- "washer",
- "dryer",
- "pool",
- "gym"
]
}, - "booking_settings": {
- "instant_book": true,
- "min_nights": 2,
- "cancellation_policy": "moderate"
}, - "pricing_info": {
- "currency": "USD",
- "cleaning_fee": 125,
- "short_stay_cleaning_fee": 95,
- "extra_guest_fee": 35,
- "single_fee_structure": false
}, - "ratings": {
- "num_reviews": 247,
- "rating_overall": 4.92,
- "rating_accuracy": 4.95,
- "rating_checkin": 4.93,
- "rating_cleanliness": 4.91,
- "rating_communication": 4.94,
- "rating_location": 4.96,
- "rating_value": 4.88
}, - "performance_metrics": {
- "ttm_revenue": 85650.5,
- "ttm_avg_rate": 285.75,
- "ttm_occupancy": 0.82,
- "ttm_adjusted_occupancy": 0.8,
- "ttm_revpar": 234.32,
- "ttm_adjusted_revpar": 228.6,
- "ttm_total_days": 365,
- "ttm_available_days": 340,
- "ttm_blocked_days": 25,
- "ttm_days_reserved": 279,
- "ttm_avg_min_nights": 3.4,
- "ttm_avg_length_of_stay": 4.8,
- "l90d_revenue": 24500,
- "l90d_avg_rate": 295,
- "l90d_occupancy": 0.85,
- "l90d_adjusted_occupancy": 0.83,
- "l90d_revpar": 250.75,
- "l90d_adjusted_revpar": 244.85,
- "l90d_total_days": 90,
- "l90d_available_days": 87,
- "l90d_blocked_days": 3,
- "l90d_days_reserved": 74,
- "l90d_avg_min_nights": 2.7,
- "l90d_avg_length_of_stay": 4.1
}
}
]
}Search Airbnb listings within custom geographic boundaries using our polygon-based vacation rental search API. This advanced geospatial endpoint enables precise market analysis by finding all short-term rental properties within your defined area - perfect for neighborhood analysis, district comparisons, or custom market boundaries that don't align with standard administrative regions.
Essential for sophisticated market research, zoning analysis, and targeted investment strategies. Define complex search areas using multiple coordinate points to analyze vacation rental distribution, market saturation, and revenue potential in specific neighborhoods or custom-defined regions. Returns detailed listing data with performance metrics for all properties within your polygon.
object A filter object where each field maps to its condition(s). Multiple filters are ANDed together. For most fields, each field condition must contain exactly one operator. The
If you provide more than one of these operators, the listing must satisfy all of them. Available Operators:
Example:
This means the listing must have View Filterable FieldsLocation
Property Details
Host
Booking & Pricing
Ratings
Performance Metrics (Last 90 Days)
Performance Metrics (Trailing Twelve Months)
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
object A map of field names to sort directions. Order is preserved, with the first field having highest priority. Example:
View Sortable FieldsLocation
Property Details
Host
Booking & Pricing
Ratings
Performance Metrics (Last 90 Days)
Performance Metrics (Trailing Twelve Months)
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
object Pagination parameters for listing search requests. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| currency | string Default: "native" Enum: "usd" "native" Currency for financial data conversion. Allowed currency values are 'usd' (US Dollars) or 'native' (local currency). For example, 'native' automatically uses EUR in France, JPY in Japan, or BRL in Brazil etc. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
required | Array of objects (PolygonCoordinate) [ 3 .. 1000 ] items |
{- "polygon": [
- {
- "latitude": 29.9511,
- "longitude": -90.0715
}, - {
- "latitude": 29.9584,
- "longitude": -90.0715
}, - {
- "latitude": 29.9584,
- "longitude": -90.0589
}, - {
- "latitude": 29.9511,
- "longitude": -90.0589
}, - {
- "latitude": 29.9511,
- "longitude": -90.0715
}
], - "filter": {
- "room_type": {
- "eq": "entire_home"
}, - "amenities": {
- "any": [
- "balcony",
- "patio",
- "courtyard"
]
}, - "ttm_revenue": {
- "gte": 80000
}, - "rating_location": {
- "gte": 4.9
}
}, - "sort": {
- "ttm_revenue": "desc",
- "rating_overall": "desc"
}, - "pagination": {
- "page_size": 10,
- "offset": 0
}, - "currency": "native"
}{- "pagination": {
- "total_count": 0,
- "page_size": 0,
- "offset": 0
}, - "results": [
- {
- "listing_info": {
- "listing_id": 43036533,
- "listing_name": "Luxury Downtown Loft with Skyline Views",
- "description": "Spacious villa with ocean views, heated pool, and direct beach access.",
- "listing_type": "Entire rental unit",
- "room_type": "entire_home",
- "photos_count": 32,
- "checkin_time": "4:00 PM - 10:00 PM",
- "checkout_time": "11:00 AM",
- "guest_favorite": true
}, - "host_info": {
- "host_id": 287465123,
- "host_name": "Maria",
- "cohost_ids": [
- 12345678,
- 87654321
], - "cohost_names": [
- "John",
- "Sarah"
], - "superhost": true,
- "professional_management": false
}, - "location_info": {
- "country_code": "US",
- "country": "United States",
- "region": "California",
- "locality": "Los Angeles",
- "district": "Downtown",
- "latitude": 34.052235,
- "longitude": -118.243683,
- "exact_location": false
}, - "property_details": {
- "guests": 6,
- "bedrooms": 2,
- "beds": 3,
- "baths": 2,
- "registration": true,
- "registration_details": "string",
- "amenities": [
- "wifi",
- "kitchen",
- "air_conditioning",
- "washer",
- "dryer",
- "pool",
- "gym"
]
}, - "booking_settings": {
- "instant_book": true,
- "min_nights": 2,
- "cancellation_policy": "moderate"
}, - "pricing_info": {
- "currency": "USD",
- "cleaning_fee": 125,
- "short_stay_cleaning_fee": 95,
- "extra_guest_fee": 35,
- "single_fee_structure": false
}, - "ratings": {
- "num_reviews": 247,
- "rating_overall": 4.92,
- "rating_accuracy": 4.95,
- "rating_checkin": 4.93,
- "rating_cleanliness": 4.91,
- "rating_communication": 4.94,
- "rating_location": 4.96,
- "rating_value": 4.88
}, - "performance_metrics": {
- "ttm_revenue": 85650.5,
- "ttm_avg_rate": 285.75,
- "ttm_occupancy": 0.82,
- "ttm_adjusted_occupancy": 0.8,
- "ttm_revpar": 234.32,
- "ttm_adjusted_revpar": 228.6,
- "ttm_total_days": 365,
- "ttm_available_days": 340,
- "ttm_blocked_days": 25,
- "ttm_days_reserved": 279,
- "ttm_avg_min_nights": 3.4,
- "ttm_avg_length_of_stay": 4.8,
- "l90d_revenue": 24500,
- "l90d_avg_rate": 295,
- "l90d_occupancy": 0.85,
- "l90d_adjusted_occupancy": 0.83,
- "l90d_revpar": 250.75,
- "l90d_adjusted_revpar": 244.85,
- "l90d_total_days": 90,
- "l90d_available_days": 87,
- "l90d_blocked_days": 3,
- "l90d_days_reserved": 74,
- "l90d_avg_min_nights": 2.7,
- "l90d_avg_length_of_stay": 4.1
}
}
]
}Access comprehensive historical performance data and time-series analytics for any Airbnb listing with our vacation rental metrics API. This endpoint delivers up to 60 months of detailed performance history including occupancy rates, average daily rates (ADR), revenue, and booking patterns. Essential for understanding seasonal trends, year-over-year growth, and long-term property performance in the short-term rental market.
Track key performance indicators over time to identify booking trends, optimize pricing strategies, and forecast future performance. Perfect for property managers monitoring portfolio performance, investors evaluating acquisition targets, and analysts studying vacation rental market dynamics. Returns monthly aggregated data with revenue metrics, occupancy trends, and pricing evolution.
| listing_id required | integer <int64> The ID of the listing to retrieve metrics for. |
| currency | string Default: "native" Enum: "usd" "native" Currency for financial data conversion. Allowed currency values are 'usd' (US Dollars) or 'native' (local currency). For example, 'native' automatically uses EUR in France, JPY in Japan, or BRL in Brazil etc. |
| num_months | integer [ 1 .. 60 ] Default: 12 The number of months of data to return. |
curl -X GET "https://api.airroi.com/listings/metrics/all?listing_id=43036533¤cy=native&num_months=12" \ -H "x-api-key: your-airroi-api-key"
{- "results": [
- {
- "date": "2024-01",
- "occupancy": 0.68,
- "average_daily_rate": 285,
- "rev_par": 193.8,
- "revenue": 6007.8,
- "min_nights": 2
}, - {
- "date": "2024-02",
- "occupancy": 0.75,
- "average_daily_rate": 315,
- "rev_par": 236.25,
- "revenue": 6615,
- "min_nights": 2
}, - {
- "date": "2024-03",
- "occupancy": 0.89,
- "average_daily_rate": 425,
- "rev_par": 378.25,
- "revenue": 11725.75,
- "min_nights": 3
}, - {
- "date": "2024-04",
- "occupancy": 0.82,
- "average_daily_rate": 385,
- "rev_par": 315.7,
- "revenue": 9471,
- "min_nights": 3
}, - {
- "date": "2024-05",
- "occupancy": 0.74,
- "average_daily_rate": 325,
- "rev_par": 240.5,
- "revenue": 7455.5,
- "min_nights": 2
}, - {
- "date": "2024-06",
- "occupancy": 0.85,
- "average_daily_rate": 295,
- "rev_par": 250.75,
- "revenue": 7522.5,
- "min_nights": 2
}, - {
- "date": "2024-07",
- "occupancy": 0.92,
- "average_daily_rate": 345,
- "rev_par": 317.4,
- "revenue": 9839.4,
- "min_nights": 3
}, - {
- "date": "2024-08",
- "occupancy": 0.88,
- "average_daily_rate": 335,
- "rev_par": 294.8,
- "revenue": 9138.8,
- "min_nights": 3
}, - {
- "date": "2024-09",
- "occupancy": 0.65,
- "average_daily_rate": 265,
- "rev_par": 172.25,
- "revenue": 5167.5,
- "min_nights": 2
}, - {
- "date": "2024-10",
- "occupancy": 0.58,
- "average_daily_rate": 245,
- "rev_par": 142.1,
- "revenue": 4405.1,
- "min_nights": 2
}, - {
- "date": "2024-11",
- "occupancy": 0.72,
- "average_daily_rate": 285,
- "rev_par": 205.2,
- "revenue": 6156,
- "min_nights": 2
}, - {
- "date": "2024-12",
- "occupancy": 0.88,
- "average_daily_rate": 395,
- "rev_par": 347.6,
- "revenue": 10775.6,
- "min_nights": 3
}, - {
- "date": "2025-01",
- "occupancy": 0.71,
- "average_daily_rate": 295,
- "rev_par": 209.45,
- "revenue": 6493.05,
- "min_nights": 2
}, - {
- "date": "2025-02",
- "occupancy": 0.78,
- "average_daily_rate": 325,
- "rev_par": 253.5,
- "revenue": 7098,
- "min_nights": 2
}, - {
- "date": "2025-03",
- "occupancy": 0.91,
- "average_daily_rate": 445,
- "rev_par": 404.95,
- "revenue": 12553.45,
- "min_nights": 3
}, - {
- "date": "2025-04",
- "occupancy": 0.85,
- "average_daily_rate": 405,
- "rev_par": 344.25,
- "revenue": 10327.5,
- "min_nights": 3
}, - {
- "date": "2025-05",
- "occupancy": 0.76,
- "average_daily_rate": 345,
- "rev_par": 262.2,
- "revenue": 8128.2,
- "min_nights": 2
}, - {
- "date": "2025-06",
- "occupancy": 0.87,
- "average_daily_rate": 315,
- "rev_par": 274.05,
- "revenue": 8221.5,
- "min_nights": 2
}
]
}Deprecated. Use Get Live Calendar
instead. It returns the same nightly data (in a results array instead of rates)
plus the listing's cleaning fees, which this endpoint doesn't return: cleaning_fee,
and short_stay_cleaning_fee for stays of 1–2 nights.
Returns a listing's nightly rates, availability and minimum stays for the next 12 months.
rate is the nightly rate, excluding the cleaning fee.available: false covers both booked and host-blocked nights.| listing_id required | integer <int64> The ID of the listing to retrieve future rates for. |
| currency | string Default: "native" Enum: "usd" "native" Currency for financial data conversion. Allowed currency values are 'usd' (US Dollars) or 'native' (local currency). For example, 'native' automatically uses EUR in France, JPY in Japan, or BRL in Brazil etc. |
curl -X GET "https://api.airroi.com/listings/future/rates?listing_id=43036533¤cy=native" \ -H "x-api-key: your-airroi-api-key"
{- "currency": "USD",
- "rates": [
- {
- "date": "2025-02-01",
- "available": true,
- "rate": 325,
- "min_nights": 2
}, - {
- "date": "2025-02-02",
- "available": true,
- "rate": 325,
- "min_nights": 2
}, - {
- "date": "2025-02-03",
- "available": false,
- "rate": 325,
- "min_nights": 2
}, - {
- "date": "2025-02-04",
- "available": false,
- "rate": 325,
- "min_nights": 2
}, - {
- "date": "2025-02-05",
- "available": true,
- "rate": 295,
- "min_nights": 2
}, - {
- "date": "2025-02-06",
- "available": true,
- "rate": 295,
- "min_nights": 2
}, - {
- "date": "2025-02-07",
- "available": true,
- "rate": 385,
- "min_nights": 3
}, - {
- "date": "2025-02-08",
- "available": true,
- "rate": 385,
- "min_nights": 3
}, - {
- "date": "2025-02-09",
- "available": true,
- "rate": 385,
- "min_nights": 3
}, - {
- "date": "2025-02-10",
- "available": true,
- "rate": 325,
- "min_nights": 2
}, - {
- "date": "2025-02-11",
- "available": true,
- "rate": 295,
- "min_nights": 2
}, - {
- "date": "2025-02-12",
- "available": true,
- "rate": 295,
- "min_nights": 2
}, - {
- "date": "2025-02-13",
- "available": true,
- "rate": 295,
- "min_nights": 2
}, - {
- "date": "2025-02-14",
- "available": true,
- "rate": 425,
- "min_nights": 3
}, - {
- "date": "2025-02-15",
- "available": true,
- "rate": 425,
- "min_nights": 3
}, - {
- "date": "2025-02-16",
- "available": true,
- "rate": 425,
- "min_nights": 3
}, - {
- "date": "2025-02-17",
- "available": false,
- "rate": 425,
- "min_nights": 3
}, - {
- "date": "2025-02-18",
- "available": false,
- "rate": 425,
- "min_nights": 3
}, - {
- "date": "2025-02-19",
- "available": false,
- "rate": 425,
- "min_nights": 3
}, - {
- "date": "2025-02-20",
- "available": true,
- "rate": 345,
- "min_nights": 2
}, - {
- "date": "2025-02-21",
- "available": true,
- "rate": 395,
- "min_nights": 2
}, - {
- "date": "2025-02-22",
- "available": true,
- "rate": 395,
- "min_nights": 2
}, - {
- "date": "2025-02-23",
- "available": true,
- "rate": 350,
- "min_nights": 2
}, - {
- "date": "2025-02-24",
- "available": true,
- "rate": 315,
- "min_nights": 2
}, - {
- "date": "2025-02-25",
- "available": true,
- "rate": 315,
- "min_nights": 2
}, - {
- "date": "2025-02-26",
- "available": true,
- "rate": 315,
- "min_nights": 2
}, - {
- "date": "2025-02-27",
- "available": true,
- "rate": 335,
- "min_nights": 2
}, - {
- "date": "2025-02-28",
- "available": true,
- "rate": 385,
- "min_nights": 2
}
]
}Returns a listing's nightly rates, availability and minimum stays for the next 12 months.
rate is the nightly rate, excluding the cleaning fee.cleaning_fee is the cleaning fee set by the host.short_stay_cleaning_fee is the cleaning fee the host set for stays of 1–2 nights. It equals cleaning_fee when the host has one fee.available: false covers both booked and host-blocked nights.currency=native returns the listing's local currency; usd returns US dollars.| listing_id required | integer <int64> >= 1 Example: listing_id=43036533 Airbnb listing ID. |
| currency | string Default: "native" Enum: "native" "usd"
|
curl -X GET "https://api.airroi.com/listings/live/calendar?listing_id=43036533¤cy=native" \ -H "x-api-key: your-airroi-api-key"
{- "currency": "EUR",
- "cleaning_fee": 60,
- "short_stay_cleaning_fee": 45,
- "results": [
- {
- "date": "2026-09-22",
- "available": false,
- "rate": 142,
- "min_nights": 2
}, - {
- "date": "2026-09-23",
- "available": true,
- "rate": 138,
- "min_nights": 2
}, - {
- "date": "2026-09-24",
- "available": true,
- "rate": null,
- "min_nights": 2
}, - {
- "date": "2026-09-25",
- "available": true,
- "rate": 165,
- "min_nights": 3
}
]
}Returns a listing's nightly rates for the next 12 months.
rate is the nightly rate, excluding the cleaning fee.currency=native returns the listing's local currency; usd returns US dollars.| listing_id required | integer <int64> >= 1 Example: listing_id=43036533 Airbnb listing ID. |
| currency | string Default: "native" Enum: "native" "usd"
|
curl -X GET "https://api.airroi.com/listings/live/rates?listing_id=43036533¤cy=usd" \ -H "x-api-key: your-airroi-api-key"
{- "currency": "EUR",
- "results": [
- {
- "date": "2026-09-22",
- "rate": 142
}, - {
- "date": "2026-09-23",
- "rate": 138
}, - {
- "date": "2026-09-24",
- "rate": null
}, - {
- "date": "2026-09-25",
- "rate": 165
}
]
}Returns a listing's nightly availability and stay rules for the next 12 months.
available: false covers both booked and host-blocked nights.min_nights and max_nights limit the length of a stay starting on that date.available_for_checkin and available_for_checkout say whether guests can
arrive or leave on that date.| listing_id required | integer <int64> >= 1 Example: listing_id=43036533 Airbnb listing ID. |
curl -X GET "https://api.airroi.com/listings/live/availability?listing_id=43036533" \ -H "x-api-key: your-airroi-api-key"
{- "results": [
- {
- "date": "2026-09-22",
- "available": false,
- "min_nights": 2,
- "max_nights": 28,
- "available_for_checkin": false,
- "available_for_checkout": true
}, - {
- "date": "2026-09-23",
- "available": true,
- "min_nights": 2,
- "max_nights": 28,
- "available_for_checkin": true,
- "available_for_checkout": false
}, - {
- "date": "2026-09-24",
- "available": true,
- "min_nights": 2,
- "max_nights": null,
- "available_for_checkin": null,
- "available_for_checkout": null
}
]
}Returns listing search rankings for an area, up to 270 listing IDs ordered by rank.
required | object (Bounds) A latitude/longitude rectangle in WGS84 degrees.
|
{- "bounds": {
- "south": 51.28676,
- "west": -0.51036,
- "north": 51.69188,
- "east": 0.33404
}
}{- "count": 3,
- "results": [
- {
- "listing_id": "24978287",
- "rank": 1
}, - {
- "listing_id": "1215478933284517640",
- "rank": 2
}, - {
- "listing_id": "43036533",
- "rank": 3
}
]
}Returns the Airbnb listing IDs inside a polygon, up to 100 per page, in no particular order.
Send the first request without a cursor, then repeat it with pagination.cursor
set to the previous next_cursor until next_cursor is null. A page can be short
or empty before the scan ends.
polygon and API key on every page.| x-api-key required | string Your API key. Every page of a scan must use the same key as the first request. |
required | Array of objects (ScanPolygon) [ 3 .. 1000 ] items The area to scan, as an ordered list of
|
object |
{- "polygon": [
- {
- "latitude": 51.3,
- "longitude": -0.5
}, - {
- "latitude": 51.7,
- "longitude": -0.5
}, - {
- "latitude": 51.7,
- "longitude": 0.3
}, - {
- "latitude": 51.3,
- "longitude": 0.3
}
], - "pagination": {
- "page_size": 100
}
}{- "results": [
- {
- "listing_id": "24978287"
}, - {
- "listing_id": "1215478933284517640"
}
], - "pagination": {
- "page_size": 2,
- "next_cursor": "<opaque cursor>"
}
}Analyze STR market analysis data including rental market data, occupancy rates, and ADR trends. Get insights into short-term rental market trends, historical performance metrics, and future market outlook to make informed investment decisions.
Search for Airbnb market data and vacation rental market information using our comprehensive STR market identifier lookup. Find short-term rental location data by searching with city names, neighborhoods, states, or countries to discover holiday rental market opportunities. The endpoint supports partial matching, making it ideal for building autocomplete and typeahead functionality in location search interfaces.
Returns matching markets with their unique base64-encoded market IDs, active listing counts, and local currency information. Use the returned market ID for accessing historical performance data and future projections through our vacation rental market lookup system.
| query required | string non-empty Example: query=Paris Location search query for typeahead functionality. Start typing any location - from districts to entire countries. Examples:
|
curl -X GET "https://api.airroi.com/markets/search?query=Paris" \ -H "x-api-key: your-airroi-api-key"
{- "entries": [
- {
- "full_name": "Paris, Ile-de-France, France",
- "country": "France",
- "region": "Ile-de-France",
- "locality": "Paris",
- "district": null,
- "native_currency": "EUR",
- "active_listings_count": 35000
}, - {
- "full_name": "18th Arrondissement, Paris, Ile-de-France, France",
- "country": "France",
- "region": "Ile-de-France",
- "locality": "Paris",
- "district": "18th Arrondissement",
- "native_currency": "EUR",
- "active_listings_count": 2500
}
]
}Convert coordinates to market ID using our latitude longitude market lookup system. This STR geographic resolver finds the nearest short-term rental listing to the provided coordinates and returns the associated market ID for vacation rental location analysis.
Our Airbnb market geocoding tool is perfect for converting property locations into market identifiers for further analysis. Returns a base64-encoded market ID that can be used with other market endpoints as a vacation rental location finder.
| lat required | number <double> [ -90 .. 90 ] Example: lat=48.8566 Latitude coordinate (-90 to 90) |
| lng required | number <double> [ -180 .. 180 ] Example: lng=2.3522 Longitude coordinate (-180 to 180) |
curl -X GET "https://api.airroi.com/markets/lookup?lat=48.8566&lng=2.3522" \ -H "x-api-key: your-airroi-api-key"
{- "full_name": "string",
- "country": "string",
- "region": "string",
- "locality": "string",
- "district": "string"
}Get a comprehensive vacation rental market overview with key performance indicators for any Airbnb market worldwide. This endpoint provides essential market summary statistics including occupancy rates, average daily rates (ADR), revenue metrics, and minimum stay requirements for short-term rental market analysis. Perfect for quick market assessments, investment decisions, and competitive benchmarking in the vacation rental industry.
Returns aggregated market performance data to help property managers, real estate investors, and market analysts understand market dynamics at a glance.
required | object (Market) Internal representation of a geographic market used for encoding/decoding market identifiers. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
object (filter) A filter object where each field maps to its condition(s). Multiple filters are ANDed together. For most fields, each field condition must contain exactly one operator. The
If you provide more than one of these operators, the listing must satisfy all of them. Available Operators:
Example:
This means the listing must have View Filterable FieldsLocation
Property Details
Host
Booking & Pricing
Ratings
Performance Metrics (Last 90 Days)
Performance Metrics (Trailing Twelve Months)
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| currency | string (currency) Default: "native" Enum: "usd" "native" Currency for financial data conversion. Allowed currency values are 'usd' (US Dollars) or 'native' (local currency). For example, 'native' automatically uses EUR in France, JPY in Japan, or BRL in Brazil etc. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| num_months | integer [ 0 .. 60 ] Default: 12 The number of months of historical data to retrieve for time-series queries. |
{- "market": {
- "country": "United States",
- "region": "Tennessee",
- "locality": "Nashville"
}, - "num_months": 12,
- "currency": "native"
}{- "market": {
- "country": "United States",
- "region": "California",
- "locality": "Los Angeles"
}, - "occupancy": 0.72,
- "average_daily_rate": 285.5,
- "rev_par": 205.56,
- "revenue": 125000,
- "booking_lead_time": 42.5,
- "length_of_stay": 3.8,
- "min_nights": 3.2,
- "active_listings_count": 2458
}Access comprehensive vacation rental market analytics with all available performance metrics for any Airbnb market worldwide. This endpoint delivers a complete market overview including occupancy rates, average daily rates (ADR), RevPAR, revenue trends, booking patterns, minimum stay requirements, and active listing counts. Essential for market research, investment analysis, and competitive benchmarking in the short-term rental industry.
Returns historical market performance data with daily, monthly, and trailing twelve months (TTM) aggregations, enabling deep market analysis and trend identification for vacation rental markets.
required | object (Market) Internal representation of a geographic market used for encoding/decoding market identifiers. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
object (filter) A filter object where each field maps to its condition(s). Multiple filters are ANDed together. For most fields, each field condition must contain exactly one operator. The
If you provide more than one of these operators, the listing must satisfy all of them. Available Operators:
Example:
This means the listing must have View Filterable FieldsLocation
Property Details
Host
Booking & Pricing
Ratings
Performance Metrics (Last 90 Days)
Performance Metrics (Trailing Twelve Months)
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| currency | string (currency) Default: "native" Enum: "usd" "native" Currency for financial data conversion. Allowed currency values are 'usd' (US Dollars) or 'native' (local currency). For example, 'native' automatically uses EUR in France, JPY in Japan, or BRL in Brazil etc. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| num_months | integer [ 0 .. 60 ] Default: 12 The number of months of historical data to retrieve for time-series queries. |
{- "market": {
- "country": "United States",
- "region": "Hawaii",
- "locality": "Maui"
}, - "filter": {
- "room_type": {
- "eq": "entire_home"
}, - "bedrooms": {
- "range": [
- 1,
- 3
]
}, - "amenities": {
- "any": [
- "ocean_view",
- "beach_access",
- "pool"
]
}
}, - "num_months": 12,
- "currency": "native"
}{- "market": {
- "country": "United States",
- "region": "California",
- "locality": "Los Angeles"
}, - "results": [
- {
- "date": "2024-01-01",
- "occupancy": {
- "avg": 0.68,
- "p25": 0.55,
- "p50": 0.69,
- "p75": 0.82,
- "p90": 0.91
}, - "average_daily_rate": {
- "avg": 275,
- "p25": 150,
- "p50": 225,
- "p75": 350,
- "p90": 500
}, - "revpar": {
- "avg": 187,
- "p25": 82.5,
- "p50": 155.25,
- "p75": 287,
- "p90": 455
}, - "revenue": {
- "avg": 5797,
- "p25": 2557.5,
- "p50": 4812.75,
- "p75": 8897,
- "p90": 14105
}, - "booking_lead_time": {
- "avg": 38.5,
- "p25": 14,
- "p50": 28,
- "p75": 56,
- "p90": 90
}, - "length_of_stay": {
- "avg": 4.2,
- "p25": 2,
- "p50": 3,
- "p75": 5,
- "p90": 8
}, - "min_nights": {
- "avg": 3.1,
- "p25": 2,
- "p50": 3,
- "p75": 4,
- "p90": 5
}, - "active_listings_count": 3245
}, - {
- "date": "2024-02-01",
- "occupancy": {
- "avg": 0.72,
- "p25": 0.58,
- "p50": 0.73,
- "p75": 0.85,
- "p90": 0.93
}, - "average_daily_rate": {
- "avg": 285,
- "p25": 155,
- "p50": 235,
- "p75": 365,
- "p90": 525
}, - "revpar": {
- "avg": 205.2,
- "p25": 89.9,
- "p50": 171.55,
- "p75": 310.25,
- "p90": 488.25
}, - "revenue": {
- "avg": 5745.6,
- "p25": 2517.2,
- "p50": 4803.4,
- "p75": 8687,
- "p90": 13671
}, - "booking_lead_time": {
- "avg": 42,
- "p25": 15,
- "p50": 30,
- "p75": 60,
- "p90": 95
}, - "length_of_stay": {
- "avg": 4.5,
- "p25": 2,
- "p50": 3,
- "p75": 6,
- "p90": 10
}, - "min_nights": {
- "avg": 3.4,
- "p25": 2,
- "p50": 3,
- "p75": 4,
- "p90": 6
}, - "active_listings_count": 3289
}
]
}Track vacation rental occupancy rates and booking patterns for any Airbnb market with detailed time-series data. This endpoint delivers historical occupancy percentages showing how often short-term rentals are booked in your target market. Essential for understanding market demand, seasonal trends, and booking dynamics in the vacation rental industry.
Returns daily, monthly, and aggregated occupancy data to help optimize pricing strategies, identify peak seasons, and forecast market performance for short-term rental investments.
required | object (Market) Internal representation of a geographic market used for encoding/decoding market identifiers. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
object (filter) A filter object where each field maps to its condition(s). Multiple filters are ANDed together. For most fields, each field condition must contain exactly one operator. The
If you provide more than one of these operators, the listing must satisfy all of them. Available Operators:
Example:
This means the listing must have View Filterable FieldsLocation
Property Details
Host
Booking & Pricing
Ratings
Performance Metrics (Last 90 Days)
Performance Metrics (Trailing Twelve Months)
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| currency | string (currency) Default: "native" Enum: "usd" "native" Currency for financial data conversion. Allowed currency values are 'usd' (US Dollars) or 'native' (local currency). For example, 'native' automatically uses EUR in France, JPY in Japan, or BRL in Brazil etc. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| num_months | integer [ 0 .. 60 ] Default: 12 The number of months of historical data to retrieve for time-series queries. |
{- "market": {
- "country": "United States",
- "region": "Washington",
- "locality": "Seattle"
}, - "filter": {
- "room_type": {
- "eq": "entire_home"
}, - "bedrooms": {
- "lte": 2
}, - "min_nights": {
- "lte": 30
}
}, - "num_months": 12,
- "currency": "native"
}{- "market": {
- "country": "United States",
- "region": "Florida",
- "locality": "Miami"
}, - "results": [
- {
- "date": "2024-01-01",
- "avg": 0.75,
- "p25": 0.62,
- "p50": 0.76,
- "p75": 0.88,
- "p90": 0.94
}, - {
- "date": "2024-02-01",
- "avg": 0.78,
- "p25": 0.65,
- "p50": 0.79,
- "p75": 0.9,
- "p90": 0.95
}, - {
- "date": "2024-03-01",
- "avg": 0.82,
- "p25": 0.7,
- "p50": 0.83,
- "p75": 0.92,
- "p90": 0.97
}
]
}Access Airbnb pricing trends and average daily rate (ADR) analytics for vacation rental markets worldwide. This endpoint provides comprehensive pricing data showing what guests pay per night in your target market. Critical for revenue management, competitive pricing analysis, and understanding market rate dynamics in the short-term rental industry.
Returns historical ADR time-series data with daily, monthly, and seasonal trends to help property managers optimize pricing strategies and maximize rental income.
required | object (Market) Internal representation of a geographic market used for encoding/decoding market identifiers. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
object (filter) A filter object where each field maps to its condition(s). Multiple filters are ANDed together. For most fields, each field condition must contain exactly one operator. The
If you provide more than one of these operators, the listing must satisfy all of them. Available Operators:
Example:
This means the listing must have View Filterable FieldsLocation
Property Details
Host
Booking & Pricing
Ratings
Performance Metrics (Last 90 Days)
Performance Metrics (Trailing Twelve Months)
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| currency | string (currency) Default: "native" Enum: "usd" "native" Currency for financial data conversion. Allowed currency values are 'usd' (US Dollars) or 'native' (local currency). For example, 'native' automatically uses EUR in France, JPY in Japan, or BRL in Brazil etc. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| num_months | integer [ 0 .. 60 ] Default: 12 The number of months of historical data to retrieve for time-series queries. |
{- "market": {
- "country": "United States",
- "region": "Massachusetts",
- "locality": "Nantucket"
}, - "filter": {
- "room_type": {
- "eq": "entire_home"
}, - "bedrooms": {
- "gte": 3
}, - "amenities": {
- "any": [
- "beach_access",
- "ocean_view",
- "private_deck"
]
}
}, - "num_months": 12,
- "currency": "native"
}{- "market": {
- "country": "Spain",
- "region": "Catalonia",
- "locality": "Barcelona"
}, - "results": [
- {
- "date": "2024-01-01",
- "avg": 125.5,
- "p25": 75,
- "p50": 110,
- "p75": 165,
- "p90": 225
}, - {
- "date": "2024-02-01",
- "avg": 132,
- "p25": 78,
- "p50": 115,
- "p75": 172,
- "p90": 238
}, - {
- "date": "2024-03-01",
- "avg": 145.75,
- "p25": 85,
- "p50": 125,
- "p75": 185,
- "p90": 265
}
]
}Analyze vacation rental revenue per available rental (RevPAR) metrics for comprehensive market performance insights. This endpoint combines occupancy and pricing data to show the average revenue generated per available listing in any Airbnb market. Essential for investment analysis, portfolio optimization, and understanding true market earning potential in the short-term rental sector.
Returns RevPAR time-series data that helps investors and property managers evaluate market profitability, compare investment opportunities, and track revenue performance trends.
required | object (Market) Internal representation of a geographic market used for encoding/decoding market identifiers. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
object (filter) A filter object where each field maps to its condition(s). Multiple filters are ANDed together. For most fields, each field condition must contain exactly one operator. The
If you provide more than one of these operators, the listing must satisfy all of them. Available Operators:
Example:
This means the listing must have View Filterable FieldsLocation
Property Details
Host
Booking & Pricing
Ratings
Performance Metrics (Last 90 Days)
Performance Metrics (Trailing Twelve Months)
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| currency | string (currency) Default: "native" Enum: "usd" "native" Currency for financial data conversion. Allowed currency values are 'usd' (US Dollars) or 'native' (local currency). For example, 'native' automatically uses EUR in France, JPY in Japan, or BRL in Brazil etc. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| num_months | integer [ 0 .. 60 ] Default: 12 The number of months of historical data to retrieve for time-series queries. |
{- "market": {
- "country": "United States",
- "region": "Nevada",
- "locality": "Las Vegas"
}, - "filter": {
- "room_type": {
- "eq": "entire_home"
}, - "bedrooms": {
- "gte": 2
}, - "amenities": {
- "any": [
- "pool",
- "hot_tub",
- "gym"
]
}
}, - "num_months": 12,
- "currency": "native"
}{- "market": {
- "country": "United States",
- "region": "Nevada",
- "locality": "Las Vegas"
}, - "results": [
- {
- "date": "2024-01-01",
- "avg": 185.5,
- "p25": 95,
- "p50": 160,
- "p75": 240,
- "p90": 350
}, - {
- "date": "2024-02-01",
- "avg": 192,
- "p25": 98,
- "p50": 165,
- "p75": 245,
- "p90": 360
}, - {
- "date": "2024-03-01",
- "avg": 210.75,
- "p25": 110,
- "p50": 180,
- "p75": 270,
- "p90": 390
}
]
}Access comprehensive vacation rental revenue analytics showing total market earnings and income trends for any Airbnb market. This endpoint provides aggregated revenue data demonstrating the overall market size and earning potential for short-term rentals. Valuable for market sizing, investment planning, and understanding the economic impact of vacation rentals in specific locations.
Returns historical revenue time-series data with seasonal patterns and growth trends to support market analysis and investment decisions in the short-term rental industry.
required | object (Market) Internal representation of a geographic market used for encoding/decoding market identifiers. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
object (filter) A filter object where each field maps to its condition(s). Multiple filters are ANDed together. For most fields, each field condition must contain exactly one operator. The
If you provide more than one of these operators, the listing must satisfy all of them. Available Operators:
Example:
This means the listing must have View Filterable FieldsLocation
Property Details
Host
Booking & Pricing
Ratings
Performance Metrics (Last 90 Days)
Performance Metrics (Trailing Twelve Months)
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| currency | string (currency) Default: "native" Enum: "usd" "native" Currency for financial data conversion. Allowed currency values are 'usd' (US Dollars) or 'native' (local currency). For example, 'native' automatically uses EUR in France, JPY in Japan, or BRL in Brazil etc. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| num_months | integer [ 0 .. 60 ] Default: 12 The number of months of historical data to retrieve for time-series queries. |
{- "market": {
- "country": "Mexico",
- "region": "Quintana Roo",
- "locality": "Cancun"
}, - "filter": {
- "room_type": {
- "eq": "entire_home"
}, - "amenities": {
- "any": [
- "beach_access",
- "ocean_view",
- "pool"
]
}, - "bedrooms": {
- "gte": 2
}
}, - "num_months": 24,
- "currency": "native"
}{- "market": {
- "country": "United States",
- "region": "Colorado",
- "locality": "Denver"
}, - "results": [
- {
- "date": "2024-01-01",
- "avg": 4250,
- "p25": 1800,
- "p50": 3500,
- "p75": 5800,
- "p90": 9200
}, - {
- "date": "2024-02-01",
- "avg": 4680,
- "p25": 2100,
- "p50": 3900,
- "p75": 6200,
- "p90": 9800
}, - {
- "date": "2024-03-01",
- "avg": 5320,
- "p25": 2400,
- "p50": 4500,
- "p75": 7100,
- "p90": 11500
}
]
}Understand guest booking behavior with detailed booking lead time analytics for vacation rental markets. This endpoint reveals how far in advance guests typically book short-term rentals in your target market. Critical for revenue management, marketing timing, and inventory planning in the Airbnb ecosystem.
Returns booking lead time patterns showing the average days between booking and check-in, helping property managers optimize availability calendars, adjust pricing strategies, and plan marketing campaigns.
required | object (Market) Internal representation of a geographic market used for encoding/decoding market identifiers. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
object (filter) A filter object where each field maps to its condition(s). Multiple filters are ANDed together. For most fields, each field condition must contain exactly one operator. The
If you provide more than one of these operators, the listing must satisfy all of them. Available Operators:
Example:
This means the listing must have View Filterable FieldsLocation
Property Details
Host
Booking & Pricing
Ratings
Performance Metrics (Last 90 Days)
Performance Metrics (Trailing Twelve Months)
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| currency | string (currency) Default: "native" Enum: "usd" "native" Currency for financial data conversion. Allowed currency values are 'usd' (US Dollars) or 'native' (local currency). For example, 'native' automatically uses EUR in France, JPY in Japan, or BRL in Brazil etc. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| num_months | integer [ 0 .. 60 ] Default: 12 The number of months of historical data to retrieve for time-series queries. |
{- "market": {
- "country": "United States",
- "region": "California",
- "locality": "San Francisco"
}, - "filter": {
- "room_type": {
- "eq": "entire_home"
}, - "bedrooms": {
- "lte": 1
}, - "instant_book": {
- "eq": true
}
}, - "num_months": 12,
- "currency": "native"
}{- "market": {
- "country": "United States",
- "region": "Florida",
- "locality": "Miami"
}, - "results": [
- {
- "date": "2024-01-01",
- "avg": 42.5,
- "p25": 14,
- "p50": 30,
- "p75": 60,
- "p90": 95
}, - {
- "date": "2024-02-01",
- "avg": 45,
- "p25": 15,
- "p50": 32,
- "p75": 65,
- "p90": 100
}, - {
- "date": "2024-03-01",
- "avg": 38,
- "p25": 12,
- "p50": 28,
- "p75": 55,
- "p90": 90
}
]
}Analyze guest stay duration patterns and average length of stay metrics for vacation rental markets worldwide. This endpoint provides insights into typical booking durations, helping understand whether markets cater to short weekend trips or extended stays. Essential for property setup, amenity planning, and pricing strategy optimization in the short-term rental industry.
Returns length of stay distribution data showing average nights per booking, enabling property managers to tailor their offerings and minimum stay requirements to match market demand.
required | object (Market) Internal representation of a geographic market used for encoding/decoding market identifiers. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
object (filter) A filter object where each field maps to its condition(s). Multiple filters are ANDed together. For most fields, each field condition must contain exactly one operator. The
If you provide more than one of these operators, the listing must satisfy all of them. Available Operators:
Example:
This means the listing must have View Filterable FieldsLocation
Property Details
Host
Booking & Pricing
Ratings
Performance Metrics (Last 90 Days)
Performance Metrics (Trailing Twelve Months)
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| currency | string (currency) Default: "native" Enum: "usd" "native" Currency for financial data conversion. Allowed currency values are 'usd' (US Dollars) or 'native' (local currency). For example, 'native' automatically uses EUR in France, JPY in Japan, or BRL in Brazil etc. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| num_months | integer [ 0 .. 60 ] Default: 12 The number of months of historical data to retrieve for time-series queries. |
{- "market": {
- "country": "United States",
- "region": "Texas",
- "locality": "Austin"
}, - "filter": {
- "room_type": {
- "eq": "entire_home"
}, - "bedrooms": {
- "gte": 2
}, - "min_nights": {
- "gte": 28
}, - "amenities": {
- "all": [
- "kitchen",
- "washer",
- "dedicated_workspace"
]
}
}, - "num_months": 12,
- "currency": "native"
}{- "market": {
- "country": "United States",
- "region": "California",
- "locality": "San Francisco"
}, - "results": [
- {
- "date": "2024-01-01",
- "avg": 4.2,
- "p25": 2,
- "p50": 3,
- "p75": 5,
- "p90": 7
}, - {
- "date": "2024-02-01",
- "avg": 4.5,
- "p25": 2,
- "p50": 3,
- "p75": 6,
- "p90": 8
}, - {
- "date": "2024-03-01",
- "avg": 3.8,
- "p25": 2,
- "p50": 3,
- "p75": 5,
- "p90": 6
}
]
}Analyze average minimum stay requirements for vacation rental markets worldwide. This endpoint shows how restrictive a market is by month, helping operators understand whether a market is optimized for short getaways or longer stays. Essential for competitive positioning, stay-rule benchmarking, and aligning listing policies with local demand.
Returns monthly minimum-stay distributions so property managers and investors can compare their stay rules against prevailing market behavior.
required | object (Market) Internal representation of a geographic market used for encoding/decoding market identifiers. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
object (filter) A filter object where each field maps to its condition(s). Multiple filters are ANDed together. For most fields, each field condition must contain exactly one operator. The
If you provide more than one of these operators, the listing must satisfy all of them. Available Operators:
Example:
This means the listing must have View Filterable FieldsLocation
Property Details
Host
Booking & Pricing
Ratings
Performance Metrics (Last 90 Days)
Performance Metrics (Trailing Twelve Months)
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| currency | string (currency) Default: "native" Enum: "usd" "native" Currency for financial data conversion. Allowed currency values are 'usd' (US Dollars) or 'native' (local currency). For example, 'native' automatically uses EUR in France, JPY in Japan, or BRL in Brazil etc. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| num_months | integer [ 0 .. 60 ] Default: 12 The number of months of historical data to retrieve for time-series queries. |
{- "market": {
- "country": "United States",
- "region": "Illinois",
- "locality": "Chicago"
}, - "filter": {
- "room_type": {
- "eq": "entire_home"
}, - "bedrooms": {
- "lte": 2
}, - "instant_book": {
- "eq": true
}
}, - "num_months": 12,
- "currency": "native"
}{- "market": {
- "country": "United States",
- "region": "California",
- "locality": "San Diego"
}, - "results": [
- {
- "date": "2024-01-01",
- "avg": 2.8,
- "p25": 2,
- "p50": 2,
- "p75": 3,
- "p90": 5
}, - {
- "date": "2024-02-01",
- "avg": 3.1,
- "p25": 2,
- "p50": 3,
- "p75": 4,
- "p90": 5
}, - {
- "date": "2024-03-01",
- "avg": 3.4,
- "p25": 2,
- "p50": 3,
- "p75": 4,
- "p90": 6
}
]
}Monitor vacation rental market supply and competition levels with active listing counts for any Airbnb market. This endpoint tracks the total number of available short-term rentals, providing crucial supply-side intelligence for market analysis. Essential for understanding market saturation, competitive landscape, and growth opportunities in the vacation rental sector.
Returns current and historical active listing counts to help investors assess market competition, identify emerging markets, and track supply growth trends over time.
required | object (Market) Internal representation of a geographic market used for encoding/decoding market identifiers. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
object (filter) A filter object where each field maps to its condition(s). Multiple filters are ANDed together. For most fields, each field condition must contain exactly one operator. The
If you provide more than one of these operators, the listing must satisfy all of them. Available Operators:
Example:
This means the listing must have View Filterable FieldsLocation
Property Details
Host
Booking & Pricing
Ratings
Performance Metrics (Last 90 Days)
Performance Metrics (Trailing Twelve Months)
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| currency | string (currency) Default: "native" Enum: "usd" "native" Currency for financial data conversion. Allowed currency values are 'usd' (US Dollars) or 'native' (local currency). For example, 'native' automatically uses EUR in France, JPY in Japan, or BRL in Brazil etc. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| num_months | integer [ 0 .. 60 ] Default: 12 The number of months of historical data to retrieve for time-series queries. |
{- "market": {
- "country": "United States",
- "region": "New York",
- "locality": "New York"
}, - "filter": {
- "room_type": {
- "eq": "entire_home"
}, - "bedrooms": {
- "gte": 2
}, - "ttm_avg_rate": {
- "gt": 500
}, - "amenities": {
- "all": [
- "doorman",
- "gym",
- "air_conditioning"
]
}
}, - "num_months": 12,
- "currency": "native"
}{- "market": {
- "country": "United States",
- "region": "Texas",
- "locality": "Austin"
}, - "results": [
- {
- "date": "2024-01-01",
- "count": 5678
}, - {
- "date": "2024-02-01",
- "count": 5823
}, - {
- "date": "2024-03-01",
- "count": 5945
}, - {
- "date": "2024-04-01",
- "count": 6102
}, - {
- "date": "2024-05-01",
- "count": 6287
}
]
}Forecast vacation rental market performance with forward-looking pacing data and booking trends for Airbnb markets. This endpoint provides visibility into future occupancy and demand patterns based on current bookings on the books. Critical for revenue forecasting, seasonal planning, and proactive market strategy in the short-term rental industry.
Returns future pacing metrics showing booked occupancy rates for upcoming periods, helping property managers and investors anticipate market demand and adjust strategies accordingly.
required | object (Market) Internal representation of a geographic market used for encoding/decoding market identifiers. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
object (filter) A filter object where each field maps to its condition(s). Multiple filters are ANDed together. For most fields, each field condition must contain exactly one operator. The
If you provide more than one of these operators, the listing must satisfy all of them. Available Operators:
Example:
This means the listing must have View Filterable FieldsLocation
Property Details
Host
Booking & Pricing
Ratings
Performance Metrics (Last 90 Days)
Performance Metrics (Trailing Twelve Months)
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| currency | string (currency) Default: "native" Enum: "usd" "native" Currency for financial data conversion. Allowed currency values are 'usd' (US Dollars) or 'native' (local currency). For example, 'native' automatically uses EUR in France, JPY in Japan, or BRL in Brazil etc. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| num_months | integer [ 0 .. 60 ] Default: 12 The number of months of historical data to retrieve for time-series queries. |
{- "market": {
- "country": "United States",
- "region": "Massachusetts",
- "locality": "Cape Cod"
}, - "filter": {
- "room_type": {
- "eq": "entire_home"
}, - "bedrooms": {
- "gte": 3
}, - "amenities": {
- "any": [
- "beach_access",
- "ocean_view",
- "outdoor_shower"
]
}
}, - "num_months": 6,
- "currency": "native"
}{- "market": {
- "country": "United States",
- "region": "Utah",
- "locality": "Park City"
}, - "results": [
- {
- "date": "2025-02-01",
- "booked_count": 2345,
- "available_count": 878,
- "booked_rate_avg": 425.5,
- "available_rate_avg": 389,
- "fill_rate": 0.728
}, - {
- "date": "2025-02-02",
- "booked_count": 2389,
- "available_count": 834,
- "booked_rate_avg": 435,
- "available_rate_avg": 395,
- "fill_rate": 0.741
}, - {
- "date": "2025-02-03",
- "booked_count": 2298,
- "available_count": 925,
- "booked_rate_avg": 418.75,
- "available_rate_avg": 380,
- "fill_rate": 0.713
}, - {
- "date": "2025-02-04",
- "booked_count": 2156,
- "available_count": 1067,
- "booked_rate_avg": 398,
- "available_rate_avg": 365,
- "fill_rate": 0.669
}, - {
- "date": "2025-02-05",
- "booked_count": 2089,
- "available_count": 1134,
- "booked_rate_avg": 385.5,
- "available_rate_avg": 355,
- "fill_rate": 0.648
}, - {
- "date": "2025-02-06",
- "booked_count": 2134,
- "available_count": 1089,
- "booked_rate_avg": 392.25,
- "available_rate_avg": 360,
- "fill_rate": 0.662
}, - {
- "date": "2025-02-07",
- "booked_count": 2412,
- "available_count": 811,
- "booked_rate_avg": 445,
- "available_rate_avg": 405,
- "fill_rate": 0.748
}, - {
- "date": "2025-02-08",
- "booked_count": 2456,
- "available_count": 767,
- "booked_rate_avg": 455.5,
- "available_rate_avg": 415,
- "fill_rate": 0.762
}, - {
- "date": "2025-02-14",
- "booked_count": 2245,
- "available_count": 978,
- "booked_rate_avg": 485,
- "available_rate_avg": 435,
- "fill_rate": 0.697
}, - {
- "date": "2025-02-15",
- "booked_count": 2289,
- "available_count": 934,
- "booked_rate_avg": 495.5,
- "available_rate_avg": 445,
- "fill_rate": 0.71
}, - {
- "date": "2025-02-21",
- "booked_count": 1856,
- "available_count": 1367,
- "booked_rate_avg": 425,
- "available_rate_avg": 385,
- "fill_rate": 0.576
}, - {
- "date": "2025-02-28",
- "booked_count": 1678,
- "available_count": 1545,
- "booked_rate_avg": 405,
- "available_rate_avg": 365,
- "fill_rate": 0.521
}, - {
- "date": "2025-03-15",
- "booked_count": 1234,
- "available_count": 1989,
- "booked_rate_avg": 375,
- "available_rate_avg": 335,
- "fill_rate": 0.383
}, - {
- "date": "2025-03-31",
- "booked_count": 978,
- "available_count": 2245,
- "booked_rate_avg": 355,
- "available_rate_avg": 315,
- "fill_rate": 0.303
}, - {
- "date": "2025-04-15",
- "booked_count": 756,
- "available_count": 2467,
- "booked_rate_avg": 335,
- "available_rate_avg": 295,
- "fill_rate": 0.235
}, - {
- "date": "2025-04-30",
- "booked_count": 589,
- "available_count": 2634,
- "booked_rate_avg": 315,
- "available_rate_avg": 275,
- "fill_rate": 0.183
}
]
}Calculate accurate Airbnb revenue projections using our rental property valuation and investment analysis tools. Generate property revenue estimates and performance projections based on real market data and competitive insights.
Use our Airbnb revenue calculator and vacation rental income estimator to generate comprehensive STR profit projections for potential short-term rental properties. This powerful short-term rental ROI calculator serves as your complete property investment analysis tool based on location and property characteristics.
Location Input: Specify the property location using either geographic coordinates (lat + lng) or a physical address. These are mutually exclusive — provide one or the other, not both.
Our vacation rental income estimator analyzes comparable properties in the area to provide:
The response includes root-level average values for quick access, plus a percentiles object with full statistical breakdown (p25, p50, p75, p90) for detailed analysis. A location object with the resolved latitude and longitude is always included in the response.
| lat | number <double> [ -90 .. 90 ] Example: lat=34.052235 Property latitude for revenue estimation.
Required if |
| lng | number <double> [ -180 .. 180 ] Example: lng=-118.243683 Property longitude for revenue estimation.
Required if |
| address | string Example: address=1234 Ocean Drive, Miami Beach, FL 33139 Physical address of the property for revenue estimation.
The address is geocoded to latitude/longitude coordinates using Google Geocoding API.
Required if |
| radius | number <double> [ 1 .. 10 ] Default: 3 Example: radius=5 Search radius in miles for comparable listings. Default: 3 miles. Increase the radius in low-density areas (e.g. rural locations or large homes with few similar properties nearby) to find more comparables. |
| room_type | string Enum: "entire_home" "private_room" "shared_room" Example: room_type=entire_home Restrict comparable listings to a single room type. By default all
room types are searched. For whole-property revenue estimates,
|
| bedrooms required | integer [ 0 .. 20 ] Example: bedrooms=2 Number of bedrooms (use 0 for studios) |
| baths required | number <double> [ 0.5 .. 20 ] Example: baths=2 Number of bathrooms (supports decimals for half baths) |
| guests required | integer [ 1 .. 30 ] Example: guests=4 Maximum guest capacity |
| currency | string Default: "native" Enum: "usd" "native" Example: currency=usd Currency for financial data conversion. Default: native currency. Allowed currency values are 'usd' (US Dollars) or 'native' (local currency). For example, 'native' automatically uses EUR in France, JPY in Japan, or BRL in Brazil etc. |
curl -X GET "https://api.airroi.com/calculator/estimate?lat=34.052235&lng=-118.243683&bedrooms=2&baths=2.0&guests=4¤cy=native" \ -H "x-api-key: your-airroi-api-key"
{- "location": {
- "latitude": 34.052235,
- "longitude": -118.243683
}, - "revenue": 50000,
- "average_daily_rate": 200,
- "occupancy": 0.68,
- "percentiles": {
- "revenue": {
- "avg": 50000,
- "p25": 40000,
- "p50": 48000,
- "p75": 55000,
- "p90": 62000
}, - "average_daily_rate": {
- "avg": 200,
- "p25": 170,
- "p50": 195,
- "p75": 220,
- "p90": 250
}, - "occupancy": {
- "avg": 0.68,
- "p25": 0.55,
- "p50": 0.65,
- "p75": 0.75,
- "p90": 0.82
}
}, - "currency": "USD",
- "monthly_revenue_distributions": [
- 0.05,
- 0.05,
- 0.07,
- 0.08,
- 0.09,
- 0.11,
- 0.13,
- 0.12,
- 0.1,
- 0.08,
- 0.06,
- 0.06
], - "comparable_listings": [
- {
- "listing_info": {
- "listing_id": 43036533,
- "listing_name": "Beachfront Villa with Private Pool",
- "listing_type": "Entire villa",
- "room_type": "entire_home",
- "photos_count": 45
}, - "host_info": {
- "host_id": 156789234,
- "host_name": "Alexandra",
- "cohost_ids": [
- 12345678,
- 87654321
], - "cohost_names": [
- "John",
- "Sarah"
], - "superhost": true,
- "professional_management": false
}, - "location_info": {
- "country_code": "US",
- "country": "United States",
- "region": "California",
- "locality": "Malibu",
- "district": "Malibu Beach",
- "latitude": 34.0259,
- "longitude": -118.7798
}, - "property_details": {
- "guests": 8,
- "bedrooms": 4,
- "beds": 5,
- "baths": 3.5,
- "registration": true,
- "amenities": [
- "wifi",
- "kitchen",
- "free_parking_on_premises",
- "pool",
- "hot_tub",
- "beach_access",
- "bbq_grill",
- "outdoor_shower",
- "fire_pit",
- "dedicated_workspace"
]
}, - "booking_settings": {
- "instant_book": false,
- "min_nights": 3,
- "cancellation_policy": "strict"
}, - "pricing_info": {
- "currency": "usd",
- "cleaning_fee": 350,
- "extra_guest_fee": 75
}, - "ratings": {
- "num_reviews": 89,
- "rating_overall": 4.96,
- "rating_accuracy": 4.98,
- "rating_checkin": 4.97,
- "rating_cleanliness": 4.95,
- "rating_communication": 4.98,
- "rating_location": 5,
- "rating_value": 4.92
}, - "performance_metrics": {
- "ttm_revenue": 285000,
- "ttm_avg_rate": 1250,
- "ttm_occupancy": 0.625,
- "ttm_adjusted_occupancy": 0.61,
- "ttm_revpar": 781.25,
- "ttm_adjusted_revpar": 762.5,
- "ttm_total_days": 365,
- "ttm_available_days": 350,
- "ttm_blocked_days": 15,
- "ttm_days_reserved": 219,
- "l90d_revenue": 95000,
- "l90d_avg_rate": 1500,
- "l90d_occupancy": 0.7,
- "l90d_adjusted_occupancy": 0.68,
- "l90d_revpar": 1050,
- "l90d_adjusted_revpar": 1020,
- "l90d_total_days": 90,
- "l90d_available_days": 88,
- "l90d_blocked_days": 2,
- "l90d_days_reserved": 62
}
}
]
}Estimate a property's base price, then calculate calendar prices with optional rules and limits. You can also supply your own base price. Both endpoints return itemized explanations; neither stores settings nor publishes rates.
AirROI recommends prices. Your property management system (PMS) or channel manager is what actually sets them on Airbnb, Booking.com, Vrbo and the other OTAs. A typical integration runs in three steps, once a day or whenever a booking changes the calendar.
POST /price-recommendation/calendar-prices with the property, its base price, the current calendar (reserved, available and blocked nights) and the pricing rules you want applied.Start with POST /price-recommendation/base-price if you do not have a base price yet; it estimates one from comparable listings in the market.
Estimate a property's year-round nightly starting price, before date-specific adjustments, fees, and taxes. Nothing is saved or published.
Provide the property's coordinates, bedroom and bathroom counts, and guest capacity. Optional details—such as amenities, reviews, and cleaning fees—can refine the estimate. Leave out details you do not know.
The response includes a balanced recommendation, conservative and aggressive alternatives, a typical local price range, and an itemized explanation. The range is context, not a price limit or a guarantee.
Use the recommendation and its returned currency with Recommend Calendar Prices to calculate nightly rates for individual dates. Amounts are whole currency units, not cents. Currency defaults to USD, including when an unrecognized code is supplied, so check the returned currency.
Error bodies from this endpoint are simpler than those of Calendar Prices:
a flat code and message object on 400, and an errors list on
422, with no error envelope and no request_id field. The X-Request-ID
header is still returned; quote it when contacting support.
For deeper context and examples, see choosing a base price.
required | object (Property location) Property coordinates used to find pricing data. Where local data is unavailable, the estimate falls back to broader regional or global data. |
required | object (Property details) Bedrooms, bathrooms, and guest capacity are required. Optional fields refine the estimate when supported by the current model. Omission means unknown. |
| currency | string or null = 3 characters ^[A-Za-z]{3}$ Default: "USD" Currency for cleaning_fee and all returned amounts. Accepts either case; omitted, null, or unrecognized codes resolve to USD. Check the response currency before using the recommendation. |
Coordinates, bedrooms, bathrooms and guest capacity. Enough for a recommendation.
{- "location": {
- "latitude": 25.7907,
- "longitude": -80.13
}, - "property": {
- "bedrooms": 3,
- "baths": 2.5,
- "guests": 6
}, - "currency": "USD"
}Illustrative result for the required-fields request. The explanation amounts sum to 200; actual prices depend on the property and current model.
{- "location": {
- "latitude": 25.7907,
- "longitude": -80.13
}, - "currency": "USD",
- "recommended_base_price": 200,
- "price_options": {
- "conservative": 184,
- "balanced": 200,
- "aggressive": 216
}, - "typical_market_range": {
- "low": 150,
- "high": 260
}, - "explanation": [
- {
- "code": "market_baseline",
- "label": "Market baseline",
- "amount": 172
}, - {
- "code": "bedrooms",
- "label": "3 bedrooms",
- "amount": 20
}, - {
- "code": "bathrooms",
- "label": "2.5 bathrooms",
- "amount": 6
}, - {
- "code": "guest_capacity",
- "label": "Sleeps 6",
- "amount": 4
}, - {
- "code": "current_market_level",
- "label": "Current market adjustment",
- "amount": -2
}
]
}Calculate nightly prices from a base price, automatically accounting for seasonality, weekdays, holidays/events, and market demand. Optional rules let you tailor the result. Nothing is saved or published; send your settings with each request.
Every example below is a real response for a 200 USD base price in Nashville, Tennessee, calculated on Mon Sep 14, 2026 (America/Chicago). Dates in the snippets are relative to that day; replace them with your own. Each example turns on only the rule it explains, and the price strip shows the night's price without the rule → with the rule.
Every night goes through the same seven stages, in this order. Each stage adds its lines
to that night's explanation, and the lines always add up to price. Here is a real
Saturday that is a one-night gap between two reservations, with a last-minute rule, a gap
rule, a Saturday uplift, a +10% override and a 260 ceiling all switched on:
Three rules ship with presets. A preset takes no settings; custom requires the full
settings shown in each rule below. Every other rule is custom only.
| Rule | conservative | balanced | aggressive |
|---|---|---|---|
| Last minute | opens 7 days out, down to −8% | opens 21 days out, down to −15% | opens 45 days out, down to −25% |
| Far future | +0% at 270 days out, rising to +5% at one year | +0% at 180 days, rising to +10% at one year | +0% at 120 days, rising to +15% at one year |
| Gap day | −4% / −2% / 0% for 1 / 2 / 3-night gaps | −8% / −4% / −2% | −12% / −8% / −4% |
Gap-day presets cover gaps of one to three nights; longer gaps are left alone unless you define your own bands.
Fragments below drop into pricing_rules (or the top-level key named in the heading).
Each rule has three examples that build on each other: the first is the smallest working request, the last shows the rule interacting with overrides or other rules. Each example gives the request fragment and what it did to real nights.
Discount (or raise) nights that are close to arrival and still unsold.
| Field | Values | What it does |
|---|---|---|
mode |
disabled conservative balanced aggressive custom |
Presets need nothing else. |
settings.start_days |
1 – 90 | Window opens this many days before arrival (inclusive). |
settings.adjustment_percent |
> −100 | The full percentage. Negative discounts, positive raises. |
settings.adjustment_type |
flat gradual |
Same every night, or ramping toward arrival. |
settings.end_days |
0 – start_days − 1, default 0 |
Where a gradual ramp reaches the full percentage; nights closer to arrival keep it. |
overrides |
months / date_ranges |
Different settings for certain nights. Custom mode only. |
flat gives every night in the window the full percentage. gradual starts at 0% on the first day of the window and reaches the full percentage on the day of arrival.{
"pricing_rules": {
"last_minute": { "mode": "balanced" }
}
}
{
"pricing_rules": {
"last_minute": {
"mode": "custom",
"settings": {
"start_days": 14,
"adjustment_percent": -10,
"adjustment_type": "flat"
}
}
}
}
{
"pricing_rules": {
"last_minute": {
"mode": "custom",
"settings": {
"start_days": 30,
"adjustment_percent": -25,
"adjustment_type": "gradual"
},
"overrides": {
"date_ranges": [
{
"start_date": "2026-10-04",
"end_date": "2026-10-06",
"settings": {
"start_days": 30,
"adjustment_percent": -5,
"adjustment_type": "flat"
}
}
]
}
}
}
}
Raise (or discount) nights that are far from arrival.
start_days and runs to the end of the calendar. The balanced preset is shown, one cell per two weeks: nothing until 180 days out, then a steady climb to +10% at one year, held for anything further out. Usually a raise, because early bookers are less price-sensitive and you keep the option to discount later.| Field | Values | What it does |
|---|---|---|
mode |
disabled conservative balanced aggressive custom |
Presets ramp linearly, reach full strength one year out and hold it beyond. |
settings.start_days |
60 or more | Window opens this many days out and runs to the end of the calendar, up to two years out. |
settings.adjustment_percent |
> −100 | The full percentage. Positive raises, negative discounts. |
settings.adjustment_type |
flat gradual |
Same every night, or ramping up from start_days. |
settings.end_days |
after start_days, default 365 |
Where a gradual ramp reaches the full percentage; nights further out keep it. |
overrides |
months / date_ranges |
Different settings for certain nights. Custom mode only. |
{
"pricing_rules": {
"far_future": { "mode": "balanced" }
}
}
{
"pricing_rules": {
"far_future": {
"mode": "custom",
"settings": {
"start_days": 180,
"adjustment_percent": 8,
"adjustment_type": "flat"
}
}
}
}
Discount short runs of open nights that are wedged between bookings.
| Field | Values | What it does |
|---|---|---|
mode |
disabled conservative balanced aggressive custom |
Presets cover 1, 2 and 3-night gaps and include weekends. |
settings[] |
list of bands | Each band: min_days, max_days (1 – 30, inclusive) and adjustment_percent. Bands must not overlap. |
apply_on_weekends |
true / false |
Whether Friday and Saturday nights may be adjusted. Required in custom mode. |
overrides |
months / date_ranges |
Different bands for certain nights. Custom mode only. |
Needs a calendar in the request. Gap lengths that no band covers get no adjustment.
{
"calendar": [
{ "date": "2026-09-24", "status": "reserved" },
{ "date": "2026-09-25", "status": "reserved" },
{ "date": "2026-09-26", "status": "available" },
{ "date": "2026-09-27", "status": "reserved" },
{ "date": "2026-09-28", "status": "reserved" },
{ "date": "2026-09-29", "status": "available" },
{ "date": "2026-09-30", "status": "available" },
{ "date": "2026-10-01", "status": "reserved" },
{ "date": "2026-10-02", "status": "reserved" }
],
"pricing_rules": {
"gap_day": { "mode": "balanced" }
}
}
{
"pricing_rules": {
"gap_day": {
"mode": "custom",
"apply_on_weekends": false,
"settings": [
{
"min_days": 1,
"max_days": 1,
"adjustment_percent": -20
},
{
"min_days": 2,
"max_days": 3,
"adjustment_percent": -10
}
]
}
}
}
apply_on_weekends is false, so it keeps its price. The two-night gap (Tue Sep 29 – Wed Sep 30) gets −10%.Adjust the open nights right next to an existing booking, so they get filled.
days_before open nights on the left, days_after on the right. Only reservations anchor it; blocked nights do not.| Field | Values | What it does |
|---|---|---|
mode |
disabled custom |
No presets. |
settings.days_before |
0 – 30 | How many open nights before a reservation to adjust. 0 = none. |
settings.days_after |
0 – 30 | How many open nights after a reservation to adjust. 0 = none. |
settings.adjustment_percent |
> −100 | Applied once per night, even if it is adjacent on both sides. |
apply_on_weekends |
true / false |
Whether Friday and Saturday nights may be adjusted. Required. |
overrides |
months / date_ranges |
Different settings for certain nights. |
Needs a calendar. If a night also qualifies for a nonzero gap-day adjustment, gap day wins and this rule is skipped for it.
{
"calendar": [
{ "date": "2026-09-23", "status": "available" },
{ "date": "2026-09-24", "status": "available" },
{ "date": "2026-09-25", "status": "available" },
{ "date": "2026-09-26", "status": "reserved" },
{ "date": "2026-09-27", "status": "reserved" },
{ "date": "2026-09-28", "status": "reserved" },
{ "date": "2026-09-29", "status": "available" },
{ "date": "2026-09-30", "status": "available" },
{ "date": "2026-10-01", "status": "available" }
],
"pricing_rules": {
"adjacent_day": {
"mode": "custom",
"apply_on_weekends": true,
"settings": {
"days_before": 1,
"days_after": 1,
"adjustment_percent": -5
}
}
}
}
{
"pricing_rules": {
"adjacent_day": {
"mode": "custom",
"apply_on_weekends": true,
"settings": {
"days_before": 2,
"days_after": 0,
"adjustment_percent": 8
}
}
}
}
days_after: 0 switches that side off, so the night after the reservation is untouched.Price by how booked you already are for a given lead time: discount when the near term is empty, raise when it is filling up.
| Field | Values | What it does |
|---|---|---|
mode |
disabled custom |
No presets. |
settings.lead_time_ranges[] |
{min_days, max_days} 0 – 365 |
Columns: how far out the night is. Ascending, non-overlapping. |
settings.occupancy_ranges[] |
{min_percent, max_percent} 0 – 100 |
Rows: how booked the column's window already is. Ascending, non-overlapping. |
settings.adjustment_percent |
[[row0col0, row0col1…], [row1…]] |
One inner list per row, one number per column. |
overrides |
months / date_ranges |
Different matrix for certain nights. |
Needs a calendar that covers every night of each column's window. Blocked nights are left out of the ratio.
{
"calendar": [
{ "date": "2026-09-14", "status": "available" },
{ "date": "2026-09-15", "status": "available" },
{ "date": "2026-09-16", "status": "reserved" },
{ "date": "2026-09-17", "status": "reserved" },
{ "date": "2026-09-18", "status": "available" },
{ "date": "2026-09-19", "status": "available" },
{ "date": "2026-09-20", "status": "available" },
{ "date": "2026-09-21", "status": "available" },
{ "date": "2026-09-22", "status": "reserved" },
{ "date": "2026-09-23", "status": "reserved" },
{ "date": "2026-09-24", "status": "available" },
{ "date": "2026-09-25", "status": "available" },
{ "date": "2026-09-26", "status": "available" },
{ "date": "2026-09-27", "status": "available" },
{ "date": "2026-09-28", "status": "available" }
],
"pricing_rules": {
"occupancy_pacing": {
"mode": "custom",
"settings": {
"lead_time_ranges": [
{ "min_days": 0, "max_days": 14 }
],
"occupancy_ranges": [
{ "min_percent": 0, "max_percent": 49 },
{ "min_percent": 50, "max_percent": 100 }
],
"adjustment_percent": [
[-10],
[5]
]
}
}
}
}
{
"pricing_rules": {
"occupancy_pacing": {
"mode": "custom",
"settings": {
"lead_time_ranges": [
{ "min_days": 0, "max_days": 7 },
{ "min_days": 8, "max_days": 30 },
{ "min_days": 31, "max_days": 90 }
],
"occupancy_ranges": [
{ "min_percent": 0, "max_percent": 39 },
{ "min_percent": 40, "max_percent": 69 },
{ "min_percent": 70, "max_percent": 100 }
],
"adjustment_percent": [
[-15, -5, 0],
[-5, 0, 5],
[5, 10, 15]
]
}
}
}
}
adjustment_percent[row][column]. Nights 0 – 7 days out sit in a window that is 6 of 8 booked (75%) → bottom row, first column → +5%. Nights 8 – 30 days out sit in a window 7 of 23 booked (30%) → top row, second column → −5%, the ringed cell in the illustration. Nights 31 – 90 days out sit in a window 45 of 60 booked (75%) → bottom row, third column → +15%.Add your own weekday pattern.
| Field | Values | What it does |
|---|---|---|
mode |
disabled custom |
No presets. |
settings.adjustment_percent |
object, all seven lowercase weekday keys | −75 to 500 each. Weekday is the property's local weekday. |
overrides |
months / date_ranges |
Different percentages for certain nights. |
{
"pricing_rules": {
"day_of_week": {
"mode": "custom",
"settings": {
"adjustment_percent": {
"monday": 0,
"tuesday": 0,
"wednesday": 0,
"thursday": 0,
"friday": 5,
"saturday": 10,
"sunday": 0
}
}
}
}
}
{
"pricing_rules": {
"day_of_week": {
"mode": "custom",
"settings": {
"adjustment_percent": {
"monday": -8,
"tuesday": -8,
"wednesday": -8,
"thursday": -8,
"friday": 5,
"saturday": 12,
"sunday": 0
}
}
}
}
}
Minimum nights and allowed check-in / check-out weekdays.
min_stay, check_in_allowed, check_out_allowed) and they decide whether a gap is bookable.| Rule | Fields | What it does |
|---|---|---|
min_stay |
settings.min_nights 1 – 365 |
Minimum nights for a stay starting on that night. |
check_in_out |
settings.allowed_check_in_days, settings.allowed_check_out_days |
Lists of lowercase weekdays, at least one each. |
length_of_stay |
settings[] of {min_nights, adjustment_percent} |
Accepted and validated, not applied: nightly prices cannot know the guest's stay length. Apply these in your booking system. |
All three take mode: disabled or custom and accept overrides. AirROI returns the restrictions; your PMS or channel manager has to enforce them.
{
"stay_rules": {
"min_stay": {
"mode": "custom",
"settings": { "min_nights": 2 }
}
}
}
{
"stay_rules": {
"min_stay": {
"mode": "custom",
"settings": { "min_nights": 2 }
},
"check_in_out": {
"mode": "custom",
"settings": {
"allowed_check_in_days": ["friday", "saturday"],
"allowed_check_out_days": ["monday", "tuesday", "wednesday", "thursday", "friday", "saturday", "sunday"]
}
}
}
}
Guard-rails and hand-set prices for specific dates.
| Key | Fields | What it does |
|---|---|---|
price_limits |
min_price, max_price |
Either may be omitted or null; each defaults independently. |
price_overrides[] |
start_date, end_date, adjustment_type, adjustment_amount |
Inclusive, absolute date ranges that must not overlap. |
adjustment_type: percentage |
Multiplies the running price before limits. −100 < amount ≤ 500. | |
adjustment_type: fixed |
Replaces the price after limits, ignoring both. A positive amount in the request currency. |
{
"price_limits": { "min_price": 150, "max_price": 230 }
}
maximum_price_limit or minimum_price_limit line only on nights that were actually clamped.{
"price_overrides": [
{
"start_date": "2026-10-14",
"end_date": "2026-10-16",
"adjustment_type": "percentage",
"adjustment_amount": 25
}
]
}
Different settings for certain months or exact dates, on any custom rule.
Every custom rule accepts overrides.months (recurring, lowercase month names) and overrides.date_ranges (absolute, inclusive). Date ranges beat months, months beat the default settings. The most specific match wins and replaces the entire settings block; nothing is inherited from the level below.
{
"pricing_rules": {
"day_of_week": {
"mode": "custom",
"settings": {
"adjustment_percent": {
"monday": 0,
"tuesday": 0,
"wednesday": 0,
"thursday": 0,
"friday": 0,
"saturday": 10,
"sunday": 0
}
},
"overrides": {
"months": {
"october": {
"settings": {
"adjustment_percent": {
"monday": 5,
"tuesday": 5,
"wednesday": 5,
"thursday": 5,
"friday": 5,
"saturday": 20,
"sunday": 5
}
}
}
},
"date_ranges": [
{
"start_date": "2026-10-10",
"end_date": "2026-10-30",
"settings": {
"adjustment_percent": {
"monday": 30,
"tuesday": 30,
"wednesday": 30,
"thursday": 30,
"friday": 30,
"saturday": 30,
"sunday": 30
}
}
}
]
}
}
}
}
"overrides": {"months": {"december": {"settings": …}}, "date_ranges": [{"start_date": …, "end_date": …, "settings": …}]}. Gap-day and adjacent-day scopes also need their own apply_on_weekends.Turn the model's own effects up or down.
Think of each dial as a volume knob on one of the model's own effects. 0 mutes it, 100 is the default (exactly what the model computed), 200 doubles it, and anything in between scales it: 50 is half the swing, 150 is one and a half times. The dials never touch your own rules, overrides or limits.
| Field | Values | What it does |
|---|---|---|
seasonality_sensitivity_percent |
0 – 200, default 100 | How hard the season, the weekday and holidays/events move the price. 0 gives a flat year, 200 makes every high and low twice as high or low. |
demand_sensitivity_percent |
0 – 200, default 100 | How hard live market demand moves the price. Whatever you set, the demand line stays within −15% and +400%. |
apply_negative_demand_adjustments |
true / false, default true |
false lets demand raise a price but never cut it: on a soft night the market_demand line is left off the receipt. |
A furnished apartment near the hospital district books 30-night stays from nurses on contract, so the host wants no seasonal or weekday swing at all: the base price, adjusted only for live demand.
{
"advanced": { "seasonality_sensitivity_percent": 0 }
}
A new host in a downtown condo trusts the direction of the model but wants gentler moves until they have a few months of reviews. Halving the dial keeps every high and low, at half the size.
{
"advanced": { "seasonality_sensitivity_percent": 50 }
}
A four-bedroom house near the venues empties out midweek and sells out for every weekend and festival. The host wants the model's peaks and troughs doubled so slow Tuesdays are cheaper and big Saturdays dearer.
{
"advanced": { "seasonality_sensitivity_percent": 200 }
}
A host whose place always fills eventually is happy to chase demand upward when a big weekend lands, but refuses to let a quiet market pull the price below what the season alone would say.
{
"advanced": {
"demand_sensitivity_percent": 150,
"apply_negative_demand_adjustments": false
}
}
Tell the engine what is already booked so the calendar-aware rules can work.
One row per night with a status of available, reserved or blocked. A calendar is evidence about your bookings, not a way to choose output dates. A date you do not send is unknown, which is different from open.
available |
reserved |
blocked |
not sent | |
|---|---|---|---|---|
| Priced and returned | yes | yes | yes | yes |
| Last-minute / far-future | applied | skipped | skipped | applied |
| Can be a gap night | yes | — | — | no, and it breaks any gap it touches |
| Bounds a gap | no | yes | yes | no |
| Anchors adjacent-day | no | yes | no | no |
| Counted in occupancy | as open | as booked | left out | breaks the window (warning) |
Three weeks starting Mon Sep 14: a guest checks out Tue Sep 15, a three-night stay runs Thu Sep 17 – Sat Sep 19, Wed Sep 23 is blocked for cleaning, a four-night stay runs Thu Sep 24 – Sun Sep 27 and a long weekend Fri Oct 2 – Sun Oct 4 is already sold. A flat last-minute discount, a one-night gap rule and an adjacent-night rule are all on.
{
"calendar": [
{ "date": "2026-09-14", "status": "reserved" },
{ "date": "2026-09-15", "status": "reserved" },
{ "date": "2026-09-16", "status": "available" },
{ "date": "2026-09-17", "status": "reserved" },
{ "date": "2026-09-18", "status": "reserved" },
{ "date": "2026-09-19", "status": "reserved" },
{ "date": "2026-09-20", "status": "available" },
{ "date": "2026-09-21", "status": "available" },
{ "date": "2026-09-22", "status": "available" },
{ "date": "2026-09-23", "status": "blocked" },
{ "date": "2026-09-24", "status": "reserved" },
{ "date": "2026-09-25", "status": "reserved" },
{ "date": "2026-09-26", "status": "reserved" },
{ "date": "2026-09-27", "status": "reserved" },
{ "date": "2026-09-28", "status": "available" },
{ "date": "2026-09-29", "status": "available" },
{ "date": "2026-09-30", "status": "available" },
{ "date": "2026-10-01", "status": "available" },
{ "date": "2026-10-02", "status": "reserved" },
{ "date": "2026-10-03", "status": "reserved" },
{ "date": "2026-10-04", "status": "reserved" }
],
"pricing_rules": {
"last_minute": {
"mode": "custom",
"settings": {
"start_days": 21,
"adjustment_percent": -10,
"adjustment_type": "flat"
}
},
"gap_day": {
"mode": "custom",
"apply_on_weekends": true,
"settings": [
{
"min_days": 1,
"max_days": 1,
"adjustment_percent": -15
}
]
},
"adjacent_day": {
"mode": "custom",
"apply_on_weekends": true,
"settings": {
"days_before": 1,
"days_after": 1,
"adjustment_percent": -5
}
}
}
}
INCOMPLETE_CALENDAR warning.A 200 can still carry one warning, INCOMPLETE_CALENDAR. It means a calendar-aware rule could not do its job: on every night, because no calendar was sent, or on some nights, because rows it needed were not sent. field names the rule and message says which case it is. One entry per rule, so a sparse calendar with all three rules on can produce three.
| Case | What to do |
|---|---|
No calendar in the request |
Send the calendar. |
| Gap-day or adjacent-day could not see both sides of an open night | Send contiguous rows around your bookings. |
| An occupancy-pacing window has a date with no row | Send every night of every column's window; the message names the window and how many dates are missing. |
affected_date_count counts the affected nights across the full calculated calendar, not just the rows you asked for.
Returns one to two years of consecutive dates starting today in the property's timezone
when start_date and end_date are omitted or null. Both are optional and
inclusive: set start_date to begin later than today (for example, to sync just
next month), set end_date to stop earlier, or set both for a window. The same
day in both returns one row. Past or malformed dates return 422, and so does a
start_date after end_date or beyond the available calendar. An end_date
beyond the available calendar is simply clamped to it. coverage reports the
calculation date (today), the returned range, the available end date, the row
count and the timezone. The boundaries select output rows only: last-minute and
far-future lead times still count from today, and full-calendar calculation
and warnings are unchanged. Reserved and blocked dates are included, so
recheck availability before publishing through your integration.
Use your own base price or the Recommend a Base Price result. Amounts are whole currency units, not cents. For longer guides see the Pricing Rules index.
required | object (Property location) Exact property coordinates. AirROI uses them to resolve local pricing curves and the property's local timezone. |
| currency required | string (Currency) = 3 characters ^[A-Z]{3}$ Supported uppercase ISO 4217 currency code for every monetary input and output. No currency conversion is performed. Lowercase codes are rejected; unsupported codes return UNSUPPORTED_CURRENCY. |
| base_price required | number <double> > 0 Year-round nightly rate before date-specific adjustments, in currency. Use your own value or recommended_base_price from the Base Price endpoint. Exclude cleaning fees, taxes, and platform fees. Must be positive and use the currency's decimal precision (2 places for USD, 0 for JPY, 3 for BHD). |
| start_date | string or null <date> ^[0-9]{4}-[0-9]{2}-[0-9]{2}$ Optional inclusive first output date (YYYY-MM-DD). Omitted or null starts today in the property's timezone. Must not be after end_date (422 INVALID_DATE_RANGE). A past date returns 422 START_DATE_IN_PAST; a date after the available calendar returns 422 START_DATE_BEYOND_AVAILABLE_HORIZON. Empty string, impossible date, or wrong JSON type returns 422. Only selects returned rows: lead-time rules still count from today, and calculation, evidence and warnings cover the full available calendar. |
| end_date | string or null <date> ^[0-9]{4}-[0-9]{2}-[0-9]{2}$ Optional inclusive output end date (YYYY-MM-DD). Omitted or null returns the full available calendar (one to two years from start_date or today). start_date and end_date on the same day return one row. A past date, empty string, impossible date, or wrong JSON type returns 422. A date beyond the available calendar is clamped; coverage.end_date reports the last date returned. Only limits returned rows: calculation, evidence and warnings still cover the full available calendar. |
Array of objects (Calendar day) <= 1000 items Booking and availability data, not the requested output dates. Required for gap-day, adjacent-day, and occupancy-pacing adjustments. Include consecutive dates and surrounding reservations or blocks. Missing dates are unknown; nights a calendar-dependent rule cannot evaluate are skipped with an INCOMPLETE_CALENDAR warning, and so is every night when calendar is omitted or [] while such a rule is enabled. Reserved and blocked rows also suppress last-minute and far-future adjustments. | |
object (Pricing rules) Optional adjustments; omitted rules are disabled. Each supplied rule needs a mode. Only custom mode accepts settings, overrides, or apply_on_weekends. Each automatic-rule percentage is rounded HALF_UP to two decimal places before use. The five automatic rules then add their signed percentages against the same post-model price, without a combined cap. Custom day_of_week follows; price limits apply later. | |
object (Stay rules) Optional stay restrictions; each rule accepts disabled or custom. Enabled minimum-stay and check-in/out rules appear in recommendations and inform gap eligibility. To govern actual bookings, these restrictions must be supported and enforced by your channel manager, PMS, or OTA integration; AirROI does not publish or enforce them on booking channels. length_of_stay is accepted but not applied. Configure longer-stay discounts separately in a supporting booking integration, which can evaluate the guest's selected dates and stay length. | |
object (Price limits) Nightly floor and ceiling, applied after percentage adjustments. Each omitted or null bound defaults independently: minimum to 70% of base_price, maximum to 1000% (10 times) base_price, rounded HALF_UP to the currency's precision. An explicit bound replaces only that default. The effective minimum must not exceed the effective maximum; otherwise HTTP 422 returns INVALID_PRICE_LIMITS in the error details. Fixed price overrides bypass both default and explicit limits. | |
Array of objects (Price override) Explicit percentage or fixed-price instructions for inclusive stay-date ranges. Applied after model and automatic pricing-rule adjustments. An empty array is accepted. Date ranges across the entire list must not overlap (inclusive of endpoints). | |
object (Advanced model controls) Controls the strength of model effects, independently of custom rules. Defaults apply when omitted. |
A one-bedroom casita outside Joshua Tree National Park, listed at 180 a night. The host wants to see what the model does before adding any rules: coordinates, currency and the base price, nothing else. With no dates set, the response is the full available calendar from today in the property's timezone, and the default limits (126 to 1,800) apply.
{- "location": {
- "latitude": 34.1347,
- "longitude": -116.3131
}, - "currency": "USD",
- "base_price": 180
}Three of the 730 rows are shown, the Friday to Sunday 11 days out; the rest are omitted here.
Each night carries the base price and the four model lines (seasonality, weekday, holiday/event,
market demand), and the amounts always sum to price. coverage gives the calculation date and
the returned range; with no end_date sent, that range is the whole available calendar.
warnings is empty.
{- "location": {
- "latitude": 34.1347,
- "longitude": -116.3131
}, - "currency": "USD",
- "coverage": {
- "calculation_date": "2026-09-14",
- "start_date": "2026-09-14",
- "end_date": "2028-09-12",
- "recommendation_count": 730,
- "timezone": "America/Los_Angeles"
}, - "warnings": [ ],
- "recommendations": [
- {
- "date": "2026-09-25",
- "price": 183.74,
- "explanation": [
- {
- "code": "base_price",
- "label": "Base price",
- "amount": 180
}, - {
- "code": "seasonality",
- "label": "Seasonality",
- "adjustment_percent": -8.26,
- "amount": -14.87
}, - {
- "code": "day_of_week",
- "label": "Day of week",
- "adjustment_percent": 9.97,
- "amount": 16.47
}, - {
- "code": "known_holiday_event",
- "label": "Holiday/event",
- "adjustment_percent": 0,
- "amount": 0
}, - {
- "code": "market_demand",
- "label": "Market demand",
- "adjustment_percent": 1.2,
- "amount": 2.14
}
]
}, - {
- "date": "2026-09-26",
- "price": 180.49,
- "explanation": [
- {
- "code": "base_price",
- "label": "Base price",
- "amount": 180
}, - {
- "code": "seasonality",
- "label": "Seasonality",
- "adjustment_percent": -7.91,
- "amount": -14.24
}, - {
- "code": "day_of_week",
- "label": "Day of week",
- "adjustment_percent": 7.31,
- "amount": 12.11
}, - {
- "code": "known_holiday_event",
- "label": "Holiday/event",
- "adjustment_percent": 0,
- "amount": 0
}, - {
- "code": "market_demand",
- "label": "Market demand",
- "adjustment_percent": 1.5,
- "amount": 2.62
}
]
}, - {
- "date": "2026-09-27",
- "price": 161.53,
- "explanation": [
- {
- "code": "base_price",
- "label": "Base price",
- "amount": 180
}, - {
- "code": "seasonality",
- "label": "Seasonality",
- "adjustment_percent": -7.57,
- "amount": -13.63
}, - {
- "code": "day_of_week",
- "label": "Day of week",
- "adjustment_percent": -2.91,
- "amount": -4.84
}, - {
- "code": "known_holiday_event",
- "label": "Holiday/event",
- "adjustment_percent": 0,
- "amount": 0
}, - {
- "code": "market_demand",
- "label": "Market demand",
- "adjustment_percent": 0,
- "amount": 0
}
]
}
]
}