Airbnb Occupancy Scraper — Calendar, Occupancy & Booking Pace avatar

Airbnb Occupancy Scraper — Calendar, Occupancy & Booking Pace

Pricing

from $3.99 / 1,000 listing calendars

Go to Apify Store
Airbnb Occupancy Scraper — Calendar, Occupancy & Booking Pace

Airbnb Occupancy Scraper — Calendar, Occupancy & Booking Pace

Airbnb occupancy scraper for public availability calendars. Paste listing URLs or a city search and export occupancy %, blocked nights, min-stay, and booking-pace deltas as JSON — an Airbnb calendar API alternative for STR teams.

Pricing

from $3.99 / 1,000 listing calendars

Rating

0.0

(0)

Developer

Andrej Kiva

Andrej Kiva

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

Share

Airbnb Occupancy Scraper — Calendar, Occupancy % & Booking Pace

Disclaimer: Unofficial tool for publicly accessible Airbnb listing calendars. Airbnb is a trademark of Airbnb, Inc. Not affiliated with, sponsored by, or endorsed by Airbnb. For informational, research, revenue-management, and market-analysis use only. Respect applicable terms of use and law.

Airbnb occupancy scraper for the public availability calendar — a practical Airbnb calendar scraper, Airbnb availability scraper, and Airbnb API alternative. Paste listing URLs or IDs, a city search URL, or a location. Export occupancy % (30 / 60 / 90 / 365 days), blocked nights, min-stay, check-in / check-out, optional nightly prices, and booking-pace deltas as a JSON dataset. Call from Python, Node.js, cURL, or Apify MCP / AI assistants.

Built for STR revenue managers, vacation-rental investors, comp-set tracking, and short-term rental market research. No Airbnb account required.

Airbnb occupancy (STR calendars)Idealista (long-term ES/IT/PT)ImmobilienScout24 (DE long-term)
Airbnb Occupancy Scraper ◄── you are hereIdealista ScraperImmobilienScout24 Scraper

When to use this Actor

  • You need an Airbnb occupancy monitor / Airbnb occupancy scraper that returns structured JSON
  • You already know listing IDs (portfolio / comp set) or have a city search URL
  • You want occupancy %, blocked nights, min-stay, and booking pace — not a generic listing dump
  • You want to scrape Airbnb calendars with Python, Node.js, or MCP and export a dataset

When not to use this Actor

  • Historical occupancy — Airbnb only exposes a forward calendar (about 12 months)
  • Guaranteed booked vs owner-blocked — the public calendar cannot tell them apart; this Actor labels that honestly
  • Guest PII, messages, or host inbox — public calendar and listing fields only
  • Long-term rental listings — use Idealista Scraper or ImmobilienScout24 Scraper
  • Whole-market 10k-listing crawls in one run — cap with maxListings and schedule by neighborhood

Key Features

  • Listing URLs or IDs — room URLs and bare numeric IDs
  • Search / location discovery — paste an Airbnb search URL or type Paris, France to take the first search page, then pull calendars
  • Forward calendar — 1–12 months of available / bookable, check-in / check-out, min / max nights
  • Occupancy windows — 30 / 60 / 90 / 365-day unavailable rates plus horizon totals
  • Booking pace — schedule the Actor and get newly unavailable / newly available nights vs the previous run
  • Honest metricsunavailableRate and occupancyEstimate are the same calendar signal, with an explicit host-block caveat
  • ADR / RevPAR only from real prices — never interpolated; often null on anonymous calendar reads
  • HTTP JSON path — Chrome TLS impersonation + dynamic GraphQL hash; no Playwright
  • Apify Proxy ready — US residential recommended on the platform
  • MCP / AI ready — call from assistants via Apify MCP

Use Cases

Use caseWhat you get
Comp-set occupancyForward unavailable % for rival Airbnb listings in your market
Booking paceNights that flipped unavailable (or opened) since the last scheduled run
Min-stay intelligenceMost common minimum-night rule across the horizon
Investment screeningOccupancy windows + rating / capacity from the public listing page
Revenue toolingPer-day calendar arrays into a pricing or BI pipeline
Market snapshotFirst page of a city search, then calendars for each listing

Quick Start

Known listings:

{
"listings": ["35329051", "1733978701934130004"],
"calendarMonths": 12,
"includeCalendar": true,
"proxyConfiguration": {
"useApifyProxy": true,
"apifyProxyGroups": ["RESIDENTIAL"],
"apifyProxyCountry": "US"
}
}

City search (first page of listings, then calendars):

{
"location": "Paris, France",
"calendarMonths": 6,
"maxListings": 20,
"includeListingDetails": true
}

Scheduled booking-pace monitor:

{
"listings": ["35329051"],
"calendarMonths": 12,
"monitor": true,
"includeCalendar": false
}

Input Parameters

ParameterTypeDefaultDescription
listingsArrayRoom URLs or numeric listing IDs
startUrlsArrayRoom URLs and/or Airbnb search URLs
locationStringCity / area used to build a search URL
calendarMonthsInteger12Forward months (1–12)
maxListingsInteger50Cap (0 = unlimited)
includeListingDetailsBooleantrueTitle, location, rating, capacity, host
includeCalendarBooleantruePer-day calendar[] array
monitorBooleanfalseBooking-pace vs previous run
currencyStringUSDISO code (prices often hidden)
proxyConfigurationObjectUS residentialStrongly recommended on Apify

Output Format

Each dataset item is one listing (or an error row if that listing failed).

FieldTypeDescription
listingIdStringAirbnb listing id
listingUrlStringRoom URL
titleStringListing title
cityStringLocalized area
propertyType / roomTypeStringProperty / space type
rating / reviewsCountNumber / IntegerPublic review stats
maxGuests / bedrooms / beds / bathroomsNumberCapacity when exposed
unavailableRateNumberUnavailable ÷ counted forward nights (0–1)
occupancyEstimateNumberSame value; labeled as an estimate
occupancy30d / 60d / 90d / 365dNumberWindowed unavailable rates
availableDays / unavailableDaysIntegerHorizon counts
firstAvailableDateStringNearest open night
minNightsModeIntegerMost common min-stay
adr / estimatedRevenue / revparNumberOnly from real calendar prices; else null
bookingPaceObjectPresent when monitor is on
calendarArrayPer-day availability (optional)
occupancyNoteStringHost-block caveat
scrapedAtStringISO timestamp

Example row:

{
"type": "listing",
"source": "airbnb",
"listingId": "35329051",
"listingUrl": "https://www.airbnb.com/rooms/35329051",
"title": "Cosy apartment close to Airport Link Station",
"city": "Khet Suan Luang",
"unavailableRate": 0.4342,
"occupancyEstimate": 0.4342,
"occupancy30d": 0.7,
"occupancy90d": 0.4342,
"availableDays": 43,
"unavailableDays": 33,
"firstAvailableDate": "2026-08-24",
"minNightsMode": 1,
"adr": null,
"currency": "USD"
}

How occupancy is calculated

Airbnb’s public calendar marks a night available or unavailable. An unavailable night can be a guest booking or a host calendar block. This Actor reports unavailableRate and occupancyEstimate as that share of upcoming nights, with occupancyNote on every row. It does not invent a booking-only occupancy figure.

Nightly price is included when Airbnb actually returns one. Anonymous calendar reads usually have price: null, so ADR / RevPAR stay null rather than a guessed market average.

Integration examples

Node.js

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('crawloop/airbnb-occupancy-monitor').call({
listings: ['35329051'],
calendarMonths: 12,
proxyConfiguration: {
useApifyProxy: true,
apifyProxyGroups: ['RESIDENTIAL'],
apifyProxyCountry: 'US',
},
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items.slice(0, 5));

Python

from apify_client import ApifyClient
client = ApifyClient(token)
run = client.actor("crawloop/airbnb-occupancy-monitor").call(
run_input={
"listings": ["35329051"],
"calendarMonths": 12,
"proxyConfiguration": {
"useApifyProxy": True,
"apifyProxyGroups": ["RESIDENTIAL"],
"apifyProxyCountry": "US",
},
}
)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item.get("listingId"), item.get("unavailableRate"), item.get("listingUrl"))

cURL

curl "https://api.apify.com/v2/acts/crawloop~airbnb-occupancy-monitor/runs?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"listings":["35329051"],"calendarMonths":12}'

MCP and AI assistants

Use this Actor from AI tools via Apify MCP. Connect your Apify account, then call crawloop/airbnb-occupancy-monitor.

Example prompts:

  • "Run Airbnb Occupancy Scraper for listing 35329051 with 12 months of calendar and return unavailableRate, occupancy30d, occupancy90d, firstAvailableDate"
  • "Scrape Airbnb occupancy for listings in Paris, France, max 15, and summarize 30-day occupancy estimates as JSON"
  • "Monitor these Airbnb room URLs weekly for booking pace, then run Idealista Scraper for long-term rental comps in the same city"

FAQ

Is this an official Airbnb API?
No. It reads the same public GraphQL calendar the website uses and returns structured dataset rows — a practical Airbnb API alternative for pipelines.

Airbnb occupancy scraper vs Airbnb listing scraper?
This Actor is calendar-first: occupancy %, blocked nights, min-stay, and booking pace. It is not a generic dump of amenities and photos.

Do I need an Airbnb login?
No — public calendars and listing pages only.

Can I scrape Airbnb occupancy with Python or Node.js?
Yes — use the Apify client examples above, or call the Actor from cURL / Apify MCP.

Why residential proxy?
Airbnb often challenges datacenter IPs. Residential (US) is the reliable default on the platform.

Is occupancy the same as booked nights?
No. Treat occupancyEstimate as unavailable share, including host blocks. That is the same limitation every calendar-based STR tool has.

Can I get historical occupancy?
No. The calendar is forward-only. Schedule the Actor to build your own history.

Does every listing include a nightly price?
Usually not on anonymous calendar reads. Occupancy still computes from availability flags.

How many listings per search?
A location / search URL contributes roughly one page of listing IDs (about 18–20). Pass explicit listings for a known portfolio.

ActorFocus
Airbnb Occupancy Scraper ◄── you are hereSTR calendars, occupancy %, booking pace
Idealista ScraperLong-term rental / sale listings (ES/IT/PT)
ImmobilienScout24 ScraperGerman long-term listings

Suite next step: after occupancy snapshots, run Idealista Scraper or ImmobilienScout24 Scraper for long-term rental comps in the same investment workflow.