Airbnb Availability Calendar ($1.5 for 1000 dates) avatar

Airbnb Availability Calendar ($1.5 for 1000 dates)

Pricing

from $1.50 / 1,000 dates

Go to Apify Store
Airbnb Availability Calendar ($1.5 for 1000 dates)

Airbnb Availability Calendar ($1.5 for 1000 dates)

Airbnb availability scraper that extracts daily calendar data — available dates, min/max nights, check-in/out and bookable status — from any Airbnb listing URL (any country domain). Track occupancy, monitor competitors, and power vacation rental & STR analytics. No API key needed.

Pricing

from $1.50 / 1,000 dates

Rating

0.0

(0)

Developer

Lofomachines

Lofomachines

Maintained by Community

Actor stats

0

Bookmarked

30

Total users

8

Monthly active users

3 days ago

Last modified

Share

Airbnb Availability Scraper — Daily Calendar Data, No API Key Required

Turn any Airbnb listing URL into structured daily availability data. This Airbnb availability scraper extracts the full public booking calendar — available dates, minimum/maximum nights, check-in/check-out flags, and bookable status — for one or thousands of listings at once. No login, no Airbnb API key, no browser automation. Just paste a URL and get clean, ready-to-use Airbnb calendar data in seconds.

Works with every Airbnb country domain (.com, .it, .co.uk, .de, .fr, and more) — only the /rooms/<ID> part of the URL matters.

Table of contents

Why use this Airbnb availability scraper

  • Daily granularity — one row per calendar day, not a vague "X nights booked this month" summary.
  • Any Airbnb domainairbnb.com, airbnb.it, airbnb.co.uk, airbnb.de, etc. all work out of the box.
  • No Airbnb account, API key, or headless browser — a lightweight direct API call, which means faster runs and lower cost than browser-based Airbnb scrapers.
  • Bulk-ready — paste one listing or thousands; the Actor scrapes them concurrently.
  • Resilient to bad input — a mistyped URL doesn't crash the whole run (see Handling invalid URLs).
  • Automation-friendly output — flat JSON rows that drop straight into Google Sheets, a database, a BI tool, or a no-code workflow like n8n, Zapier, or Make.

Who it's for

RoleWhat they use it for
Airbnb hosts & property managersMonitor their own listing's calendar and booking pace
Vacation rental agenciesTrack availability across an entire portfolio
Revenue managersFeed occupancy data into pricing and demand models
STR (short-term rental) analystsBuild market-level occupancy and seasonality datasets
Real estate investorsEvaluate a market's booking activity before acquiring a property
Travel & market intelligence teamsPower dashboards, reports, and competitor benchmarking

What you get

One dataset row per calendar day, per listing:

FieldDescription
listingIdAirbnb listing ID extracted from the URL
urlThe original listing URL you provided
dateCalendar date (YYYY-MM-DD)
availableWhether the date is available to book
minNightsMinimum nights required for that date
maxNightsMaximum nights allowed for that date
availableForCheckinWhether guests can check in on that date
availableForCheckoutWhether guests can check out on that date
bookableCombined bookability flag
scrapedAtISO timestamp of when the row was scraped

How it works

The Actor calls the same public GraphQL calendar endpoint the Airbnb website itself uses to render the booking calendar — no headless browser required. That keeps runs fast, cheap, and less likely to trip anti-bot defenses than a full-page scraper. Datacenter proxies are used by default; switch to residential proxies in the input only if you start seeing IP-blocked errors.

Input configuration

Every field has a sensible default, so the minimum required input is a list of listing URLs.

{
"listingUrls": [
{ "url": "https://www.airbnb.com/rooms/1639027" },
{ "url": "https://www.airbnb.it/rooms/1457828879261644144" }
],
"days": 90,
"monthCount": 12,
"startDate": "2026-07-01",
"currency": "EUR",
"locale": "it",
"timezone": "Europe/Rome",
"proxyConfiguration": {
"useApifyProxy": true
}
}
FieldTypeDefaultNotes
listingUrlsarray (required)One or more Airbnb room URLs, any country domain
daysinteger90How many days of availability to return per listing
monthCountinteger12How many calendar months to request from Airbnb in one call
startDatedatetodayDate picker in the UI; first day to include
currencystringEURDropdown with common currencies, or type any ISO code
localestringitDropdown with common locales, or type any locale code
timezonestringEurope/RomeDropdown with common IANA timezones, or type any zone
proxyConfigurationobjectDatacenter (automatic)Switch to residential only if you see IP-blocked errors

Concurrency is fixed internally to a level that stays under Airbnb's IP-reputation radar, so it isn't exposed as an input.

Output data

A normal scraped day:

{
"listingId": "1639027",
"url": "https://www.airbnb.com/rooms/1639027",
"date": "2026-08-06",
"available": false,
"minNights": 2,
"maxNights": 1125,
"availableForCheckin": false,
"availableForCheckout": false,
"bookable": false,
"scrapedAt": "2026-07-01T16:10:00.000Z"
}

A row for a listing URL that couldn't be parsed (see next section):

{
"listingId": null,
"url": "https://www.airbnb.com/wishlists/12345",
"date": null,
"available": null,
"minNights": null,
"maxNights": null,
"availableForCheckin": null,
"availableForCheckout": null,
"bookable": null,
"scrapedAt": "2026-07-01T16:10:00.000Z",
"error": "Invalid URL format in input (missing a numeric /rooms/<ID> path). Expected format: https://www.airbnb.<domain>/rooms/<ID> (any Airbnb country domain works, e.g. .com, .it, .co.uk), example: https://www.airbnb.com/rooms/1639027"
}

Handling invalid URLs

A typo or a pasted search/wishlist link used to fail the entire run. It no longer does:

  • Every listingUrls entry is validated independently.
  • A URL that isn't a valid airbnb.<domain>/rooms/<ID> link does not stop the run.
  • Instead, it produces a single dataset row with error explaining exactly what's wrong (and the expected format).
  • The same message is written to the run log, so you can spot bad input at a glance.
  • The Actor still finishes with a SUCCEEDED status, and every valid URL in the same batch is scraped normally.

This makes the Actor safe to drive from spreadsheets, forms, or automation tools where you don't fully control the URL quality of every row.

Use cases

  • Competitor calendar monitoring — track when nearby listings open up or fill their calendar to react on pricing.
  • Occupancy trend analysis — build a rolling dataset of availability to estimate booking pace and seasonality.
  • Revenue & pricing strategy — feed daily availability into a revenue management model alongside your own rates.
  • STR market mapping — aggregate availability across a neighborhood or city to estimate market-wide occupancy.
  • Investment due diligence — check how booked-up comparable listings are before acquiring a short-term rental property.
  • Availability change alerts — run on a schedule and diff results to detect cancellations or new bookings.

Integrate with n8n, Zapier, and Make

The Actor can be triggered from any no-code/low-code platform through the Apify API, so results land directly in your existing automations without extra glue code.

The universal way to call it is the run-sync-get-dataset-items endpoint, which runs the Actor and returns the dataset rows in a single HTTP call:

POST https://api.apify.com/v2/acts/lofomachines~airbnb-availability-calendar-scraper/run-sync-get-dataset-items?token=<YOUR_APIFY_TOKEN>
Content-Type: application/json
{
"listingUrls": [{ "url": "https://www.airbnb.com/rooms/1639027" }],
"days": 30
}

n8n

  1. Add an HTTP Request node (or the community Apify node) to your workflow.
  2. Set the method to POST and the URL to the endpoint above, with your Apify API token.
  3. Pass the Actor input as the JSON body — map it from a previous node (e.g. a Google Sheet of listing URLs).
  4. Connect the response straight into the next node (Google Sheets, Slack, a database, an AI summarizer, etc.).

Zapier

  1. Add the Apify app to your Zap and connect your account with your API token.
  2. Use the Run Actor action, choose lofomachines/airbnb-availability-calendar-scraper, and map the listingUrls field from a previous step (e.g. new row in a spreadsheet).
  3. Add a following step (Google Sheets "Create Row", Slack message, email digest) using the returned dataset items.

Make (Integromat)

  1. Add the Apify module (or an HTTP > Make a request module pointed at the endpoint above).
  2. Configure it to run this Actor with your listingUrls and optional fields.
  3. Use an Iterator to loop over the returned dataset rows and route them into Sheets, Airtable, a CRM, or a notification module.

FAQ

Do I need an Airbnb account or API key? No. The Actor uses Airbnb's own public web calendar endpoint with sensible built-in defaults — just paste listing URLs and run it.

Does it work with airbnb.it, airbnb.co.uk, or other country domains? Yes. Any airbnb.<domain>/rooms/<ID> URL works, regardless of the country extension.

What happens if I paste an invalid or non-Airbnb URL? The run still finishes successfully. That URL gets a single dataset row with an error field describing the problem, and the same message appears in the log — see Handling invalid URLs.

How far into the future can I check availability? Airbnb typically exposes up to 12 months of calendar data; use days and monthCount to control how much of that window you retrieve.

Do I need residential proxies? No — datacenter proxies are used by default and work for most listings. Switch to residential only if you start seeing IP-blocked errors at higher volumes.

Can I run this on a schedule to track changes over time? Yes. Use Apify's built-in Actor scheduler to run it daily or hourly and diff the results over time to detect cancellations, new bookings, or price/availability shifts.

More data tools by Lofomachines

More scrapers and lead-gen tools from the same developer — see the full catalog: