Airbnb Calendar & Availability Scraper avatar

Airbnb Calendar & Availability Scraper

Pricing

$0.30 / listing calendar scraped

Go to Apify Store
Airbnb Calendar & Availability Scraper

Airbnb Calendar & Availability Scraper

Scrapes Airbnb calendar availability, pricing, and occupancy data for 1-12 months forward. Supports listing IDs, URLs, search URLs, bounding boxes, and location names.

Pricing

$0.30 / listing calendar scraped

Rating

0.0

(0)

Developer

Luis Segura

Luis Segura

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

6 days ago

Last modified

Share

The fastest way to pull day-by-day Airbnb availability, pricing, and occupancy for any listing — or every listing in an entire city — directly into JSON, CSV, or your data pipeline.

Most Airbnb scrapers only tell you what a listing looks like. This actor tells you whether it's booked, how much it costs per night, and how full it is over the next 12 months — the data that actually moves the needle for revenue estimation, investment analysis, and dynamic pricing.

What you get

For every listing, the actor returns:

  • Day-by-day availability (available / blocked) for 1–12 months forward
  • Nightly prices in your chosen currency
  • Min / max night requirements per date
  • Check-in / check-out eligibility per date
  • Occupancy rate (% of days blocked)
  • Average, minimum, and maximum nightly price
  • Full listing metadata when scraping by area (title, coordinates, room type, bedrooms, rating)

Why use this actor

  • Bulk-capable — point it at a bounding box or a city name and it will discover every listing in the area and pull its calendar. No per-listing manual work.
  • Precision-safe — 19-digit Airbnb listing IDs are handled as strings throughout, so you never lose data to JavaScript number precision.
  • Adaptive rate limiting — the actor speeds up when Airbnb is responsive and automatically backs off on HTTP 429 / 403, so long runs don't die halfway.
  • Session rotation built in — Playwright rotates cookies automatically; you don't need to babysit expired sessions.
  • 5 ways to define input — direct IDs, URLs, search-page URLs, bounding boxes, or plain location names.
  • Ready for scheduling — combine with an Apify schedule to run daily and detect new bookings by diffing the calendar over time.

Input modes

ModeFieldUse case
AlistingIdsYou already know which listings to track
BurlsCopy-paste listing URLs from your browser
CsearchUrlPaste an Airbnb search page URL with map view
DboundingBoxDefine a geographic rectangle by lat/lng corners
ElocationJust type "Punta Cana" or "Barcelona, Spain"

Provide one of these — the actor will resolve it to the listing IDs and pull calendars for each.

Example inputs

Mode A — Specific listing IDs

{
"listingIds": ["1415214853332746816", "1060090216136524847"],
"calendarMonths": 12,
"currency": "USD"
}

Mode D — All listings in a bounding box

{
"boundingBox": {
"ne_lat": 18.75,
"ne_lng": -68.30,
"sw_lat": 18.50,
"sw_lng": -68.55
},
"calendarMonths": 6,
"currency": "USD"
}

Mode E — An entire city by name

{
"location": "Las Terrenas, Dominican Republic",
"calendarMonths": 12,
"maxListings": 50
}

Example output

One record per listing:

{
"listingId": "1415214853332746816",
"title": "Brand New Beach Apartment with Private Pool",
"url": "https://www.airbnb.com/rooms/1415214853332746816",
"scrapedAt": "2026-04-09T14:30:00.000Z",
"calendarMonths": 12,
"location": { "lat": 18.6108, "lng": -68.7158 },
"listingDetails": {
"roomType": "Entire home",
"bedrooms": 2,
"bathrooms": 2,
"maxGuests": 4,
"rating": 4.92,
"reviewCount": 138
},
"summary": {
"totalDays": 365,
"daysAvailable": 249,
"daysBlocked": 116,
"occupancyRate": 0.318,
"avgNightlyPrice": 85.00,
"minPrice": 65.00,
"maxPrice": 150.00,
"currency": "USD"
},
"calendar": [
{
"date": "2026-04-09",
"available": false,
"price": 85.00,
"minNights": 2,
"maxNights": 30,
"checkinAllowed": false,
"checkoutAllowed": true
}
]
}

Use cases

  • Revenue estimation — multiply occupancy × average nightly price to project annual revenue
  • Competitor tracking — monitor a set of rival listings and detect when they change pricing
  • Market research — occupancy trends across neighborhoods, cities, or seasonal periods
  • Dynamic pricing — feed prices back into a pricing-optimization model
  • Investment due diligence — evaluate a property's short-term rental potential before purchase
  • Booking pace / demand tracking — schedule daily runs and diff the calendar to see new bookings

Performance

  • ~2 listings/second at default rate (tunable up to 5/sec)
  • 100 listings in ~1 minute
  • 1,000 listings in ~10 minutes
  • Memory: ~256 MB (Playwright is only used briefly for session setup)

Proxy recommendations

For large runs, use Apify Proxy with the residential group for best reliability. The actor also works without a proxy for small runs or quick tests.

Integrations

Results can be exported to JSON, CSV, Excel, or piped into Google Sheets, Zapier, Make, Slack, or any HTTP endpoint via the built-in Apify integrations.

Pricing

This actor is priced per 1,000 calendar days returned, so you only pay for data you actually receive. A single listing scraped for 12 months = 365 days ≈ one third of a unit. Failed or empty listings are not charged.

Use this actor only for data that Airbnb makes publicly available. You are responsible for complying with Airbnb's Terms of Service and any applicable laws in your jurisdiction (including GDPR, CCPA, and local data-protection rules). This actor does not collect reviews, personal information about hosts, or any private data.

Support

Found a bug or have a feature request? Open an issue on the actor's page or reach out through the Apify console. Pull requests and suggestions welcome.