Airbnb Availability Calendar Scraper avatar

Airbnb Availability Calendar Scraper

Pricing

from $2.50 / 1,000 standards

Go to Apify Store
Airbnb Availability Calendar Scraper

Airbnb Availability Calendar Scraper

Scrape Airbnb listing availability calendars: day-by-day booking status, minimum/maximum nights, and optional live pricing with local-currency support and rolling date ranges.

Pricing

from $2.50 / 1,000 standards

Rating

0.0

(0)

Developer

ParseBird

ParseBird

Maintained by Community

Actor stats

1

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Share

Airbnb Availability Calendar Scraper

Scrape the Airbnb availability calendar for any listing: day-by-day booking status, minimum/maximum nights, and check-in/check-out eligibility, with optional live nightly pricing.

Point it at any Airbnb listing URL and get a full day-by-day calendar back — plus, unlike other Airbnb calendar scrapers, rolling date ranges (today + N days) and pricing in your own local currency.

Copy to your AI assistant

Copy this block into ChatGPT, Claude, Cursor, or any LLM to start using this actor.

Actor: parsebird/airbnb-availability-calendar-scraper on Apify. Call it with the apify-client SDK: `client.actor("parsebird/airbnb-availability-calendar-scraper").call(run_input={"listingUrl": "https://www.airbnb.com/rooms/860663943931949474", "startDate": "+7", "endDate": "+37", "enrichWithPricing": True, "currency": "EUR"})`. Inputs: listingUrl (string, required, Airbnb listing URL or numeric ID), startDate/endDate (string, YYYY-MM-DD or rolling offset like "+7" for today+7 days, default today / today+3 months), enrichWithPricing (boolean, default false), currency (string, ISO 4217 code, default USD), proxyConfiguration (object, default Apify Proxy on). Output dataset fields: listingId, date, available, availableForCheckin, availableForCheckout, bookable, minNights, maxNights, month, year, scrapedAt, plus nightlyRate, nightlyRateFormatted, totalPrice, priceFormatted, taxes, taxesFormatted, maxGuests, canInstantBook, cancellationPolicy when enrichWithPricing is true. Full API spec: https://apify.com/parsebird/airbnb-availability-calendar-scraper/api. Get an API token at https://console.apify.com/account/integrations.

What does Airbnb Availability Calendar Scraper do?

Airbnb Availability Calendar Scraper extracts the day-by-day booking calendar shown on any Airbnb listing page — the same data a guest sees when they open the date picker — without opening a browser or clicking through months by hand. Paste a listing URL or ID and get every date in your chosen range back as structured data: whether it's available, whether check-in or check-out is allowed on that date, and the host's minimum/maximum night requirements.

Turn on pricing enrichment and the actor also fetches the live nightly rate, total price, taxes, maximum guest capacity, instant-book eligibility, and cancellation policy for every bookable date — priced in the currency of your choice, not just USD or GBP.

  • 📅 Full day-by-day availability calendar for any public Airbnb listing
  • 💶 Live pricing in any ISO currency (EUR, GBP, JPY, and more) — a local-currency option most Airbnb calendar scrapers don't offer
  • ⏩ Rolling date ranges like "today + 7 days" alongside exact YYYY-MM-DD dates, so scheduled runs always look the right number of days ahead
  • 🔁 Runs on a schedule to track availability and pricing changes over time
  • 🔌 Full API, Python and JavaScript SDKs, and integrations with Zapier, Make, and Google Sheets
  • 📤 Export results as JSON, CSV, Excel, HTML, or XML directly from the Apify Console

What data can you extract from an Airbnb calendar?

FieldDescription
listingIdAirbnb listing ID
dateCalendar date (YYYY-MM-DD)
availableWhether the date is available for booking
availableForCheckinWhether check-in is allowed on this date
availableForCheckoutWhether check-out is allowed on this date
bookableWhether the date can be booked
minNightsMinimum nights required for a stay starting on this date
maxNightsMaximum nights allowed
month / yearCalendar month and year
scrapedAtISO timestamp of when the date was scraped

With enrichWithPricing enabled, every bookable date also includes:

FieldDescription
nightlyRate / nightlyRateFormattedBase nightly price, numeric and currency-formatted
totalPrice / priceFormattedTotal price for the stay, numeric and currency-formatted
taxes / taxesFormattedTax amount, when Airbnb breaks it out separately
maxGuestsMaximum guest capacity for the listing
canInstantBookWhether Instant Book is available
cancellationPolicyThe host's cancellation policy for that stay

Input parameters

ParameterTypeRequiredDefaultDescription
listingUrlstringYesAirbnb listing URL (e.g. https://www.airbnb.com/rooms/860663943931949474) or the numeric listing ID
startDatestringNotodayYYYY-MM-DD, or a rolling offset like +7 (today + 7 days)
endDatestringNostart + 3 monthsYYYY-MM-DD, or a rolling offset like +90 (today + 90 days). Airbnb exposes at most 12 months of calendar from today
enrichWithPricingbooleanNofalseFetch nightly rate, total price, taxes, and booking details for every bookable date
currencystringNoUSDISO 4217 currency code to price results in (EUR, GBP, JPY, …)
proxyConfigurationobjectNoApify Proxy onUse Apify Proxy so requests come from residential-style IPs

How to scrape an Airbnb availability calendar

  1. Open Airbnb Availability Calendar Scraper on Apify and click Try for free.
  2. Paste the Airbnb listing URL (or just its numeric ID) into Airbnb listing URL or ID.
  3. Set a Start date and End date — exact dates, or rolling offsets such as +7 and +37.
  4. Toggle Enrich with pricing on if you need nightly rates and total prices, and set a Currency if you want prices in something other than USD.
  5. Click Start and open the Dataset tab when the run finishes to view, filter, or export the results.

Output example

Without pricing (enrichWithPricing: false):

{
"listingId": "860663943931949474",
"date": "2025-12-07",
"available": true,
"availableForCheckin": true,
"availableForCheckout": false,
"bookable": true,
"minNights": 1,
"maxNights": 1125,
"month": 12,
"year": 2025,
"scrapedAt": "2025-11-26T17:30:00.000Z"
}

With pricing (enrichWithPricing: true):

{
"listingId": "860663943931949474",
"date": "2025-12-07",
"available": true,
"availableForCheckin": true,
"availableForCheckout": false,
"bookable": true,
"minNights": 1,
"maxNights": 1125,
"nightlyRate": 48.34,
"nightlyRateFormatted": "£48.34",
"totalPrice": 65.03,
"priceFormatted": "£65.03",
"taxes": 7.85,
"taxesFormatted": "£7.85",
"maxGuests": 2,
"canInstantBook": false,
"cancellationPolicy": "Free cancellation before 6 December",
"month": 12,
"year": 2025,
"scrapedAt": "2025-11-26T17:30:00.000Z"
}

Download results in JSON, CSV, Excel, HTML, or XML from the Dataset tab, or pull them programmatically via the Apify API.

Python

from apify_client import ApifyClient
client = ApifyClient("<YOUR_API_TOKEN>")
run = client.actor("parsebird/airbnb-availability-calendar-scraper").call(run_input={
"listingUrl": "https://www.airbnb.com/rooms/860663943931949474",
"startDate": "+7",
"endDate": "+37",
"enrichWithPricing": True,
"currency": "EUR",
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item)

JavaScript

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: '<YOUR_API_TOKEN>' });
const run = await client.actor('parsebird/airbnb-availability-calendar-scraper').call({
listingUrl: 'https://www.airbnb.com/rooms/860663943931949474',
startDate: '+7',
endDate: '+37',
enrichWithPricing: true,
currency: 'EUR',
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

How it works

  1. Calendar fetch — Fetches Airbnb's own availability calendar for the listing, covering every month from today out to Airbnb's 12-month booking horizon.
  2. Date filtering — Filters the calendar down to the exact start/end date range you asked for, resolving rolling offsets (+7, +30, …) against today's date.
  3. Pricing fetch (optional) — When enrichWithPricing is on, the actor fetches detailed pricing for every date where check-in is allowed. It requests a stay matching the listing's own minNights requirement (e.g. a 2-night quote if minNights is 2) and computes the per-night rate from that quote, so pricing always respects the host's minimum-stay rules instead of guessing a 1-night rate that isn't actually bookable.

Rolling dates and local currency

Two things guests and analysts commonly ask Airbnb calendar tools for — and this actor supports both:

  • Rolling date ranges: instead of hardcoding startDate/endDate and having to update them before every run, set them to offsets like +7 and +37. Every scheduled run automatically looks the same number of days ahead from today, so a weekly schedule always checks "next week through six weeks out" without any manual date edits.
  • Local currency pricing: set currency to any ISO 4217 code (EUR, GBP, JPY, CAD, …) and pricing enrichment returns nightly rates and totals in that currency instead of being locked to USD or GBP.

How much does it cost to scrape Airbnb?

Airbnb Availability Calendar Scraper uses Apify's pay-per-event pricing — you pay only for the calendar dates returned, not for compute time.

ModeEventFreeBronzeSilverGold
Availability onlyavailability-scraped$2.90 / 1,000$2.80 / 1,000$2.70 / 1,000$2.50 / 1,000
With pricingavailability-priced$8.00 / 1,000$7.50 / 1,000$7.00 / 1,000$6.50 / 1,000

A 3-month calendar (≈90 dates) without pricing costs a few cents; the same run with pricing enrichment costs under $1. New Apify accounts include free monthly platform credits, so you can try the availability-only mode at no cost before enabling pricing enrichment.

Scraping publicly available data — like the availability calendar shown on any public Airbnb listing page — is generally considered legal, but the specifics depend on your jurisdiction and how you use the data. Avoid scraping data behind a login, personal or sensitive information, and always review Airbnb's Terms of Service before large-scale use. See Apify's blog post on the legality of web scraping for more detail. This actor only reads calendar data Airbnb already serves to any visitor of a listing page.

FAQ

How far ahead can I scrape availability? Airbnb only exposes 12 months of calendar data from today for any listing. If endDate (or a rolling offset) goes beyond that, the actor automatically clamps it to the furthest date Airbnb makes available and logs a warning.

What does the rolling date format look like? Use +N (e.g. +7, +30, +90) in startDate or endDate to mean "today plus N days." You can also use +7d. Leave either field blank to default to today (startDate) or three months after the start date (endDate).

Can I get prices in my own currency instead of USD or GBP? Yes. Set currency to any ISO 4217 code — EUR, GBP, JPY, CAD, AUD, and more — and every pricing field in the output is returned in that currency.

Why are some dates missing pricing fields even with enrichWithPricing on? Pricing is only fetched for dates where check-in is allowed (availableForCheckin: true). Blocked dates and checkout-only dates return availability fields alone, since Airbnb has no bookable stay to price on those days.

Why don't all currencies show a taxes value? Airbnb only breaks out a separate tax line for some listings and currencies. When it doesn't, taxes and taxesFormatted are returned as null rather than a guessed value.

Does this work for any Airbnb listing? Yes — pass any public Airbnb listing URL or numeric ID. Delisted, private, or removed listings return no data along with a clear error message.

Can I automate recurring runs? Yes. Use Apify's Scheduler to run this actor daily, weekly, or on any cron interval — combine it with rolling dates so every run automatically covers the same forward-looking window.

Is there API access? Yes. Every run is available through the Apify API, the Python and JavaScript SDKs shown above, and Apify's MCP server for LLM agents.

Something not working, or have a feature request? Open an issue on the actor's Issues tab — response times are shown on the actor page, and feedback directly shapes what gets built next.