Airbnb Calendar · Availability & Occupancy avatar

Airbnb Calendar · Availability & Occupancy

Pricing

from $0.80 / 1,000 results

Go to Apify Store
Airbnb Calendar · Availability & Occupancy

Airbnb Calendar · Availability & Occupancy

Paste a city search URL — scan all listings in that market and get day-level availability, blocked dates, min/max nights, and occupancy rate. Or paste individual listing URLs. No login. No API key.

Pricing

from $0.80 / 1,000 results

Rating

0.0

(0)

Developer

Corentin Robert

Corentin Robert

Maintained by Community

Actor stats

0

Bookmarked

14

Total users

4

Monthly active users

3 days ago

Last modified

Share

Airbnb Calendar Availability Scraper

Paste Airbnb URLs — listing URLs, search URLs, or a mix of both — and get the full availability calendar for every property. Day by day, for as many months ahead as you need: open dates, blocked dates, min/max night rules, and a calculated occupancy rate. One clean row per listing, export-ready.

Listing URL (airbnb.com/rooms/…) → calendar for that specific property.
Search URL (airbnb.com/s/Paris--France/homes) → discovers all listings in that market, fetches their calendars in one run.

No login. No API key. No Airbnb account.

Also available

The Store does not cross-sell this suite. Pick the Actor that matches the job:

ActorUse when
Airbnb Pro HostBusiness emails and phones by city
Airbnb Property DetailsAmenities, GPS, photos, completeness
This Actor — CalendarOccupancy and day-by-day availability
Airbnb Price MonitorNightly rates across a market
Airbnb Host PortfolioMap a host’s listings from profile URLs
Airbnb ExperiencesExperience hosts, emails when enriched

Who is this for?

You are…Typical goalSuggested setup
STR manager / conciergerieTrack competitor occupancy in your marketPaste a city search URL, monthsAhead: 6, run weekly
Revenue management analystFeed availability data to a dynamic pricing toolAPI/JSON, monthsAhead: 12, scheduled run
Travel agencyCheck availability before proposing a propertyPaste the listing URL, monthsAhead: 1 or 2
STR investorEstimate annual revenue potential before buyingmonthsAhead: 12 — look at occupancyRate + firstAvailableDate
Market research firmAggregate occupancy patterns at city levelSearch URL + discoveryMode: full, export CSV or JSON
Property managerMonitor your own listings' blocked calendarsYour own listing URLs, daily scheduled run

What you get by default: one row per listing with city, propertyType, rooms, beds, rating, availableDays, blockedDays, occupancyRate, firstAvailableDate, and the full calendar array (one entry per day).

Part of the Airbnb Actors suite — see linked Actors for host discovery, listing depth, reviews, and atypical stays.

Quick start

  1. Open the Actor on Apify Console.
  2. Paste an Airbnb search URL (city) or listing URL (/rooms/…) — you can mix both.
  3. Keep Months ahead at 3 for a first run (quick discovery).
  4. Click StartOverview for one row per listing, Flat calendar for one row per day.

Ready-made examples (published tasks)

ExampleBest for
Scan Paris Airbnb occupancy calendarsSTR managers tracking competitor occupancy in Paris.
Lyon Airbnb availability — 3 months aheadConciergerie ops benchmarking Lyon occupancy.
Monitor specific Airbnb listing calendarsTravel agencies checking availability before proposing a stay.
Airbnb day-by-day calendar export for CRMRevenue tools that need a day-level table, not a nested calendar array.
Scan Barcelona Airbnb occupancy calendarsSTR managers tracking competitor occupancy in Barcelona.
Scan Amsterdam Airbnb occupancy calendarsSTR managers tracking occupancy in Amsterdam.
Scan Lisbon Airbnb occupancy calendarsSTR managers tracking occupancy in Lisbon.
Scan Berlin Airbnb occupancy calendarsSTR managers tracking occupancy in Berlin.
Scan Rome Airbnb occupancy calendarsSTR managers tracking occupancy in Rome.
Scan London Airbnb occupancy calendarsSTR managers tracking occupancy in London.
Scan Nice Airbnb occupancy calendarsSTR managers tracking occupancy in Nice.
Monitor listing calendars — 6 months aheadOperators monitoring specific listings further ahead than the 3-month default.

What you get

FieldTypeDescription
listingIdstringNumeric Airbnb listing ID
listingUrlstringCanonical airbnb.com/rooms/ID URL
listingNamestringListing title as shown on Airbnb
propertyTypestringe.g. Apartment in Paris, Private room in Lyon
citystringCity from listing title
roomsnumberNumber of bedrooms
bedsnumberNumber of beds
bathroomsnumberNumber of bathrooms
searchPricestringPrice shown in search results (e.g. $1,156)
searchPriceQualifierstringPrice context (e.g. for 5 nights, per night)
ratingnumberNumeric rating (e.g. 4.92) — null for new listings
reviewCountnumberNumber of reviews — null for new listings
sourceUrlstringThe search URL that found this listing
searchRanknumberPosition in discovery results
scrapedAtstringISO 8601 scrape timestamp
firstDateScannedstringFirst date in the calendar window
lastDateScannedstringLast date in the calendar window
currencystringCurrency used for pricing
monthsScrapednumberMonths returned by the API
totalDaysnumberTotal days scanned
availableDaysnumberDays open to booking
blockedDaysnumberDays blocked (booked or owner-blocked)
occupancyRatenumberblockedDays / totalDays × 100 (%)
firstAvailableDatestringNearest open check-in date
calendararrayOne object per day (see below)

listingName, propertyType, city, rooms, beds, bathrooms, searchPrice, and rating come from Airbnb's search result JSON — they are only available when a search URL is used as input. With direct listing URLs, these fields are absent.

Calendar day object

FieldTypeDescription
datestringYYYY-MM-DD
availablebooleanOpen for booking
availableForCheckinbooleanCheck-in allowed
availableForCheckoutbooleanCheck-out allowed
bookablebooleanFully bookable (checkin + min nights satisfied)
minNightsnumberMinimum stay from this date
maxNightsnumberMaximum stay from this date
pricestring|nullFormatted nightly price — null when not exposed by Airbnb

Typical fill rates

FieldFillNotes
available, availableForCheckin/out, bookable100%Every day returned by the API
minNights, maxNights100%Always present
occupancyRate, firstAvailableDate100%Computed from calendar
listingName, propertyType, city, rooms, beds~100% (search URL only)From search JSON
rating, reviewCount~90% (search URL only)New listings have no rating yet → null
price~0–30%Only when Airbnb exposes it via the calendar API

How it works

  1. Parse input — each URL is classified as a listing URL or a search URL.
  2. For listing URLs — extract the listing ID and call Airbnb's PdpAvailabilityCalendar API directly (up to 12 months per request, auto-heals stale hashes).
  3. For search URLs — fetch search result pages, extract listing IDs and metadata from the embedded JSON. In Quick scan mode this is 1 pass; in Maximum coverage mode, 17 passes with different date windows, guest counts, and trip lengths (finds 4–6× more listings).
  4. Fetch calendars — 10 listings in parallel for all discovered listings.
  5. Push data — one dataset row per listing as soon as the calendar is fetched.

HTTP-only — no browser, no Airbnb login, 256 MB RAM.

Performance

InputListingsMonthsWall time
1 listing URL13~3 s
20 listing URLs203~8 s
Search URL — quick scan100–4003~1–2 min
Search URL — maximum coverage (Paris)2 000–3 0003~10–20 min

For 500+ listings, add proxyConfiguration to avoid rate limiting on the calendar API.

Airbnb Actors suite (Outreacher / corent1robert)

StepActorLinkBest for
1 — Discover hostsAirbnb Pro Host Business Email ScraperStore →City search, pro host contacts
2 — Size portfoliosAirbnb Host Portfolio ScraperStore →Profile URLs → listing count, geo, room counts
3 — Full listing rowsAirbnb Property Details ScraperStore →30+ fields: amenities, GPS, photos, pricing
4 — Atypical staysAirbnb Atypical Stays ScraperStore →Castles, treehouses, boats
5 — ReviewsAirbnb Reviews ScraperStore →Every review — rating, comment, date
6 — Calendar & occupancyThis ActorConsole →Day-level availability, occupancy rate

Input

Console fields

FieldDefaultDescription
urls1 sample listing URLListing URLs (/rooms/…) and/or search URLs (/s/…) — mix freely
monthsAhead"3"How many months to fetch: "1", "2", "3", "6", or "12"
discoveryMode"quick"For search URLs: "quick" = 1 pass (fast), "full" = 17 passes (4–6× more listings)

API-only fields

FieldDefaultDescription
currencyauto-detectedISO 4217 code (e.g. "EUR") — inferred from the search URL location
proxyConfigurationApify proxy config; recommended for 500+ listing runs
verboseLogsfalseLog API hash and per-request timing

Example — listing URLs

{
"urls": ["https://www.airbnb.com/rooms/25497233"],
"monthsAhead": "3"
}

Example — city quick scan

{
"urls": ["https://www.airbnb.com/s/Lisbon--Portugal/homes"],
"monthsAhead": "3"
}

Example — full market scan

{
"urls": ["https://www.airbnb.com/s/Paris--France/homes"],
"monthsAhead": "3",
"discoveryMode": "full",
"proxyConfiguration": { "useApifyProxy": true }
}

Example — mix

{
"urls": [
"https://www.airbnb.com/s/Barcelona--Spain/homes",
"https://www.airbnb.com/rooms/25497233"
],
"monthsAhead": "6",
"discoveryMode": "full"
}

Output sample

{
"listingId": "1672982064669323496",
"listingUrl": "https://www.airbnb.com/rooms/1672982064669323496",
"listingName": "Marais district - Authentic, quiet, Parisian charm",
"propertyType": "Apartment in Paris",
"city": "Paris",
"rooms": 1,
"beds": 2,
"bathrooms": 1,
"searchPrice": "$1,156",
"searchPriceQualifier": "for 5 nights",
"rating": 4.92,
"reviewCount": 47,
"sourceUrl": "https://www.airbnb.com/s/Paris--France/homes",
"searchRank": 2,
"scrapedAt": "2026-05-30T09:00:00.000Z",
"firstDateScanned": "2026-05-30",
"lastDateScanned": "2026-08-30",
"currency": "EUR",
"monthsScraped": 3,
"totalDays": 92,
"availableDays": 8,
"blockedDays": 84,
"occupancyRate": 91.3,
"firstAvailableDate": "2026-07-13",
"calendar": [
{
"date": "2026-05-30",
"available": false,
"availableForCheckin": false,
"availableForCheckout": true,
"bookable": false,
"minNights": 5,
"maxNights": 90,
"price": null
}
]
}

How much does it cost to scrape Airbnb calendars?

HTTP calendar fetches — compute stays low. You pay Apify platform usage plus any proxy you enable on large runs.

ScenarioApprox. cost
10 listings, 3 months (Try)< $0.05
200 listings, 3 months~$0.20–0.50
Full city + 12 monthsdepends on listing count and proxy

Residential proxy is optional; use it when a large market scan is blocked. Documented as API-only proxyConfiguration.

This Actor only reads availability data Airbnb shows publicly on listing and search pages. No login. Calendars can relate to hosts' activity — comply with GDPR and Airbnb's terms for your use case.

Limitations

  • Availability only, no booking. Reads the public calendar — does not book, hold, or request dates.
  • Price is often null. Only populated when Airbnb exposes it via the calendar API. For pricing on a specific date range, use Property Details Scraper.
  • Max 24 months ahead. Airbnb's calendar returns no data beyond ~2 years out.
  • Deleted / private listings return a 403 — the Actor writes an error row with an error field instead of crashing.
  • Listing metadata (city, rooms, beds…) requires a search URL. With direct listing URLs, these fields are absent.
  • Rate limits on large runs. For 500+ listings, add proxyConfiguration to avoid 429 errors.
  • Maximum coverage is slow on dense cities. Paris or Barcelona can yield 2 000–3 000 listings across 17 discovery passes. Expect 10–20 minutes.

Local development

npm install
apify run

Output in storage/datasets/default/. Edit .actor/INPUT.json to change the input.

Support

Questions or custom workflows: corentin@outreacher.fr