Airbnb Calendar Availability Scraper avatar

Airbnb Calendar Availability Scraper

Pricing

from $2.00 / 1,000 calendar day returneds

Go to Apify Store
Airbnb Calendar Availability Scraper

Airbnb Calendar Availability Scraper

Read an authorized Airbnb iCalendar export and return date-level blocked and inferred-open availability for host operations and short-term rental workflows. Each row is one date with its availability and block count.

Pricing

from $2.00 / 1,000 calendar day returneds

Rating

0.0

(0)

Developer

Khadin Akbar

Khadin Akbar

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

17 days ago

Last modified

Share

What is Airbnb Calendar Availability Scraper?

Airbnb Calendar Availability Scraper reads an Airbnb iCalendar export that you are authorized to use and returns one dataset row per date: whether the date is busy or inferred open, how many calendar events cover it, and the source listing ID. Hosts, co-hosts, property managers and short-term rental operations teams use it to feed cleaning schedules, occupancy sheets and channel checks with a clean, date-level view of each calendar, and the rows carry dates and counts only, with guest details left out.

Why hosts and STR operators use it

  • One row per date. Each row is a single day with available, blocked and bookingStatus, ready for a spreadsheet or BI tool.
  • Privacy by design. Event summaries, guest names and descriptions are dropped; blockedByEvents keeps only the count of covering events.
  • Secret-safe input. Calendar export URLs carry a token, so the Actor keeps them out of the dataset, the key-value store and the logs.
  • Many listings in one run. Up to 20 authorized calendars, each with its own sourceId.
  • Bounded windows. startDate, endDate and maxDaysPerCalendar fix exactly which dates come back.
  • Paste or link. Send the export URL, or paste the calendar text when sharing a URL suits you less.

Best fit for this Actor

  • Best fit for owners, co-hosts and managers who can export the Airbnb calendar of the listings they run.
  • Designed for Airbnb host calendar exports in the form https://www.airbnb.com/calendar/ical/<listing-id>.ics?s=<token>, or the pasted BEGIN:VCALENDAR text.
  • Use the rows for operational planning; open_inferred means the feed has no event on that day, and Airbnb's own booking rules still apply.
  • When you then want market pricing and occupancy for comparable public listings, continue with Airbnb Occupancy & Pricing Scraper.

Example workflow: a weekly turnover schedule for five apartments

A property manager runs five Lisbon apartments. She starts by copying each listing's calendar export link from Airbnb's hosting calendar into calendarUrls and sets maxDaysPerCalendar to 14. The dataset returns 70 rows, one per apartment per day, with sourceId, date and blocked. She feeds the rows into her cleaning team's sheet, where a busy day followed by an open day marks a turnover. She schedules the run every Monday morning, then exports the next two weeks of turnovers to the cleaners.

Input

{
"calendarUrls": ["https://www.airbnb.com/calendar/ical/12345678.ics?s=REDACTED"],
"startDate": "2026-11-01",
"endDate": "2026-11-30",
"maxDaysPerCalendar": 366
}

Paste the calendar text instead of a URL:

{
"icalText": "BEGIN:VCALENDAR\nVERSION:2.0\nBEGIN:VEVENT\nDTSTART;VALUE=DATE:20261105\nDTEND;VALUE=DATE:20261108\nSUMMARY:Reserved\nEND:VEVENT\nEND:VCALENDAR",
"startDate": "2026-11-01",
"maxDaysPerCalendar": 30
}
FieldTypeWhat it controls
calendarUrlsarray of stringsUp to 20 authorized Airbnb calendar export URLs with their s= token. Treated as secret input.
icalTextstringA complete authorized iCalendar document starting with BEGIN:VCALENDAR.
startDatestringFirst date in YYYY-MM-DD. Empty starts today.
endDatestringLast date in YYYY-MM-DD. Empty uses startDate plus maxDaysPerCalendar.
maxDaysPerCalendarintegerDates returned per calendar, 1 to 731. Default 366.

To find the export link in Airbnb, open Calendar, pick the listing, choose Availability, then Connect to another website and copy the exported calendar URL. Anyone with that link can read the calendar, so share it only with trusted systems; Airbnb lets you regenerate it at any time.

Output

One row per calendar per date. This example row follows the Actor's dataset schema:

{
"sourceId": "12345678",
"sourceLabel": "Authorized Airbnb calendar 1",
"date": "2026-11-06",
"available": false,
"blocked": true,
"bookingStatus": "blocked",
"blockedByEvents": 1,
"availabilitySource": "authorized_ical",
"availabilityNote": "A supplied iCalendar event covers this date.",
"scrapedAt": "2026-10-04T08:00:00.000Z"
}
FieldWhat it contains
sourceIdListing ID from the export URL, or a generated ID for pasted text
sourceLabelA non-secret label for the calendar
dateThe calendar day in YYYY-MM-DD
availabletrue when no supplied event covers the day
blockedtrue when at least one supplied event covers the day
bookingStatusblocked or open_inferred
blockedByEventsHow many events cover the day, with event details left out
availabilitySourceauthorized_ical provenance marker
availabilityNotePlain-language meaning of the status
scrapedAtWhen the row was written

Each run also writes OUTPUT and RUN_SUMMARY to the key-value store, with an outcome such as COMPLETE or PARTIAL, row counts and charge counts.

Pricing

This Actor uses Pay per event plus Apify platform usage. You pay one Calendar day returned event for each date row saved and one Actor Start event per run, and Apify platform usage is billed alongside. The live Pricing tab on this page shows the current event prices.

Worked example in words: one calendar over a 30-day window returns 30 rows, so the run costs 30 Calendar day returned events, one start event and a small amount of platform usage. Five calendars over 14 days cost 70 day events. maxDaysPerCalendar sets the ceiling per calendar, and the run logs its maximum event cost before it starts reading.

Use with AI agents (MCP)

Connect the Actor to an MCP client through Apify MCP and ask:

Using my authorized Airbnb calendar export link, list every busy date in November and the open gaps of three nights or more.

Agent checklist:

  1. Pass the user's export link in calendarUrls and set startDate and endDate to the requested window.
  2. Read rows with get-dataset-items, group by sourceId, and find runs of blocked and open_inferred days.
  3. Read OUTPUT for the run outcome and row count.
  4. Scope note: rows reflect the supplied feed only, and cost scales with the number of dates returned.

API example

curl -X POST "https://api.apify.com/v2/acts/khadinakbar~airbnb-calendar-availability-scraper/run-sync-get-dataset-items?token=YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{"calendarUrls": ["https://www.airbnb.com/calendar/ical/12345678.ics?s=REDACTED"], "maxDaysPerCalendar": 30}'
import os
from apify_client import ApifyClient
client = ApifyClient(os.environ["APIFY_TOKEN"])
run = client.actor("khadinakbar/airbnb-calendar-availability-scraper").call(
run_input={"calendarUrls": [os.environ["AIRBNB_ICAL_URL"]], "maxDaysPerCalendar": 90}
)
for row in client.dataset(run["defaultDatasetId"]).iterate_items():
print(row["date"], row["bookingStatus"])

Best results

Starting situationHelpful actionExpected outcome
Several listingsPut every export link in calendarUrlsOne dataset grouped by sourceId
Weekly planningmaxDaysPerCalendar: 14 on a scheduleA rolling two-week view
A specific monthSet startDate and endDateExactly that month's dates
Sharing a link feels sensitivePaste the calendar into icalTextThe same rows, no URL involved
A link was exposedRegenerate it in Airbnb and use the new oneA fresh, private feed

All-day events are read the iCalendar way, where the end date is exclusive, so a stay ending on the 8th blocks the 5th through the 7th.

Builder's note

I designed this Actor around the host's own calendar export because it gives operators the data they need with permission built in. I chose to keep only event counts per date, never event text, so a dataset can be shared with a cleaning team or a dashboard without carrying guest information.

FAQ

Why does an open day say open_inferred?

The supplied feed has no event on that day. Airbnb can still apply minimum stays, advance notice or price rules that the feed leaves out.

The Actor works with the host calendar export link or the calendar text. For public listing research, use the occupancy and pricing Actor linked above.

Does it show guest names?

No. Guest names, summaries and descriptions are dropped before rows are built.

Responsible use

Use this Actor only with calendars you own or are authorized to process, and keep export links private. It stores dates and counts only, which keeps guest information out of your data. Respect Airbnb's terms and the privacy laws that apply to your business. Airbnb is a trademark of its owner; this independent Actor is not affiliated with or endorsed by Airbnb.