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

54

Total users

12

Monthly active users

5 days ago

Last modified

Share

The fastest way to pull day-by-day Airbnb availability, nightly rates, 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, what 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 rate in your chosen currency, quoted from a real bookable date range
  • Optionally a price-by-lead-time curve (14/30/60/90 days out) — a property priced higher at 90 days out than at 14 is pricing for a season
  • Min / max night requirements per date
  • Check-in / check-out eligibility per date
  • Occupancy rate (% of days blocked)
  • Review count and rating, plus a isLikelyNewListing flag for listings with no reviews yet
  • Full listing metadata in every input mode — title, coordinates, room type, property type, capacity

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.
  • Coordinates on every record — including when you supply bare listing IDs, so a set of listings can go straight onto a map.
  • 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. The headline metrics are repeated at the top level so they render directly in the Apify table view and in a CSV export:

{
"listingId": "1628404036635042929",
"title": "Superior with 1 large bed and balcony B-201",
"url": "https://www.airbnb.com/rooms/1628404036635042929",
"scrapedAt": "2026-08-12T21:31:25.714Z",
"calendarMonths": 6,
"daysAvailable": 155,
"daysBlocked": 29,
"occupancyRate": 0.1576,
"nightlyRate": 49,
"avgNightlyPrice": 49,
"currency": "USD",
"reviewCount": 64,
"rating": 4.97,
"isLikelyNewListing": false,
"location": { "lat": 18.673405834467268, "lng": -68.44042093609185 },
"listingDetails": {
"roomType": "Private room",
"propertyType": "Room in aparthotel",
"maxGuests": 2,
"rating": 4.97,
"reviewCount": 64,
"locationName": "Punta Cana",
"subtitle": "Aparthotel in Punta Cana · ★4.97 · 1 bedroom · 1 bed · 1 private bath"
},
"summary": {
"totalDays": 184,
"daysAvailable": 155,
"daysBlocked": 29,
"occupancyRate": 0.1576,
"avgNightlyPrice": 49,
"minPrice": 49,
"maxPrice": 49,
"currency": "USD"
},
"pricing": {
"nightlyRate": 49,
"avgNightlyPrice": 49,
"minPrice": 49,
"maxPrice": 49,
"currency": "USD",
"source": "staysPdpSections",
"allDatesUnavailable": false,
"samples": [
{
"daysAhead": 14,
"checkIn": "2026-08-26",
"checkOut": "2026-08-28",
"nights": 2,
"totalPrice": 98,
"nightlyRate": 49,
"unavailable": false
}
]
},
"calendar": [
{
"date": "2026-08-12",
"available": false,
"price": null,
"minNights": 2,
"maxNights": 30,
"checkinAllowed": false,
"checkoutAllowed": true
}
]
}

Set pricingSamples to 2–4 to add quotes at 30, 60 and 90 days out to the samples array. Set includePricing: false to skip pricing entirely for a faster availability-only scan.

Use cases

  • Revenue estimation — multiply occupancy × nightly rate to project forward revenue
  • Competitor tracking — monitor a set of rival listings and detect when they change pricing
  • Market research — occupancy and rate spread across neighborhoods, cities, or seasonal periods
  • Dynamic pricing — feed the lead-time curve back into a pricing-optimization model
  • Investment due diligence — evaluate a property's short-term rental potential before purchase
  • New-supply monitoringisLikelyNewListing surfaces listings that have not yet accumulated reviews
  • Booking pace / demand tracking — schedule daily runs and diff the calendar to see new bookings

Performance

  • ~2 listings/second on availability alone (tunable up to 5/sec)
  • 1,000 listings in ~10 minutes with includePricing: false
  • 1,000 listings in ~20 minutes with pricing on (the default) — a price requires a second request, because Airbnb will not quote without dates

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

$0.30 per listing scraped. One listing = one result = $0.30, and the calendar length does not change it — 1 month and 12 months cost the same. There is no platform-usage surcharge on top of that.

Listings that fail or return an empty calendar produce no result and are not charged.

RunCost
1 listing$0.30
50 listings$15.00
1,000 listings$300.00

Because the price is per listing and not per day, ask for 12 months unless you have a reason not to — you get 365 days of data for the same $0.30 that 30 days would cost.

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 review text, host personal information, or any private data — the public review count and average rating are included.

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.