Get an Airbnb listing's priced calendar
Day-by-day availability and stay rules for a listing, with Airbnb's own quoted prices for the nights you choose.
Overview
You get | 1-12 months of a listing's days: availability, check-in and check-out rules, minimum and maximum nights, and, for the nights you choose, the stay price Airbnb itself quotes. |
Call | |
Cost | 8 credits, plus 1 per night actually priced (at most 92) |
Latency | Under a second for availability alone; quotes run four at a time, so 12 quotes take about 2 s and 60 about 8-9 s |
Request the calendar
listing_id is the number in airbnb.com/rooms/<id>, or a properties[].id from Airbnb search. The calendar starts at the current month unless you set start_month and start_year.
curl -X POST "https://api.scrapercompany.com/v1/airbnb/calendar" \
-H "x-api-key: $SCRAPERCOMPANY_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"listing_id": "34397368",
"airbnb_domain": "airbnb.ca",
"currency": "CAD",
"months": 2,
"adults": 2,
"price_nights": "sample",
"max_price_quotes": 8
}'Read the days
days has one row per date of the requested months, in order. Every row carries Airbnb's rules for that date; a priced row adds the quoted stay.
[
{
"date": "2026-11-30",
"available": true,
"available_for_checkin": true,
"available_for_checkout": true,
"bookable": true,
"min_nights": 2,
"max_nights": 27,
"closed_to_arrival": false,
"closed_to_departure": false,
"price_status": "priced",
"price": {
"price_per_night": 178,
"currency": "CAD",
"check_in": "2026-11-30",
"check_out": "2026-12-02",
"nights": 2,
"accommodation": 356,
"taxes": 67.64,
"total": 423.64,
"display_total": "$424 CAD",
"price_basis": "nightly_all_in_before_taxes",
"breakdown": [
{
"description": "2 nights x $178.00 CAD",
"price": "$356.00 CAD",
"extracted_price": 356,
"kind": "nights"
},
{
"description": "Taxes",
"price": "$67.64 CAD",
"extracted_price": 67.64,
"kind": "tax"
},
{
"description": "Total",
"price": "$423.64 CAD",
"extracted_price": 423.64,
"kind": "total"
}
]
}
},
{
"date": "2026-12-01",
"available": true,
"available_for_checkin": true,
"available_for_checkout": true,
"bookable": true,
"min_nights": 2,
"max_nights": 27,
"price_status": "not_sampled"
},
{
"date": "2026-12-03",
"available": false,
"available_for_checkin": false,
"available_for_checkout": false,
"bookable": false,
"min_nights": 2,
"max_nights": 27,
"price_status": "unavailable"
}
]price_status says why a date is or isn't priced: priced; not_sampled (a valid check-in that sample didn't pick); unavailable, past, check_in_not_allowed, check_out_not_allowed, stay_blocked (a later night of the stay is taken) or stay_exceeds_max_nights (the stay can't be booked from that date); quote_refused (Airbnb refused the stay, reason in price_error); and quote_failed / quote_skipped when a quote could not be made. The full list is in the reference.
{
"days": 61,
"available": 35,
"available_for_checkin": 31,
"bookable": 34,
"priced": 8,
"min_price_per_night": 169.5,
"max_price_per_night": 178,
"median_price_per_night": 178,
"price_status": {
"check_in_not_allowed": 4,
"not_sampled": 23,
"priced": 8,
"unavailable": 26
}
}What a nightly price is
Airbnb's nightly rate is all-in: cleaning and guest fees are folded into it, and taxes and long-stay discounts are separate lines. Because fees are spread over the nights, the nightly figure depends on the length of the stay: for one listing, two 2-night stays were $178 a night while the 4-night stay spanning both was $169.50. So a price only exists for a stay:
- each priced date is the check-in of a real quote, for
stay_nightsnights or, by default, that date's own minimum stay.check_in,check_outandnightsare returned with the price; - nothing is interpolated, and you can't add up two quotes to get a longer stay;
price_per_nightis Airbnb's own rounded figure;accommodation,discount(positive),fees(only when Airbnb itemizes them),taxesandtotalare kept apart, andbreakdownhas the lines as Airbnb shows them.
price_basis is nightly_all_in_before_taxes, or nightly_before_listed_fees_and_taxes when the quote lists a fee line (then those fees are in fees, not in the nightly figure). Quotes are priced for the party you send (adults, children, infants, pets; one adult by default); a different party or stay length is a different price.
Choose which nights to price
| price_nights | Prices | Credits |
|---|---|---|
none | Nothing: availability and rules only | 8 |
sample | Up to max_price_quotes check-in dates (default 12), spread evenly over the valid ones | 8 + priced nights (up to 20 by default) |
all | Every valid check-in date in order, up to max_price_quotes (default and maximum 92) | 8 + priced nights (up to 100) |
sample is the default on this endpoint. Set stay_nights (1-28) to quote every date for the same length; a date whose minimum stay is longer is quoted at its minimum, with a warning.
What it costs
8 credits for the calendar, plus 1 for each date whose price_status is priced. Refused, failed, skipped and unsampled nights are free, and so is any error response. The request reserves the most it could cost (8 plus its quote budget) and is charged for what it priced; x-credits-charged on the response tells you the result. See Credits.
SearchAPI shape
Coming from SearchAPI's airbnb_property_availability_calendar engine? Use POST/v1/serp/airbnb_property_availability_calendar: it takes property_id, start_month, start_year, months (default 12) and airbnb_domain, and returns months[].days[] with SearchAPI's is_available, is_available_for_checkin, is_available_for_checkout, is_bookable, min_nights and max_nights.
Its default is price_nights: none, exactly SearchAPI's fields for 8 credits. Set price_nights to add a price object to priced days, in the vocabulary of SearchAPI's Airbnb search price (price_per_qualifier, total_with_taxes, …), and a price_summary.