Airbnb Calendar & Availability Scraper
Pricing
$0.30 / listing calendar scraped
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
Actor stats
0
Bookmarked
2
Total users
1
Monthly active users
6 days ago
Last modified
Categories
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
| Mode | Field | Use case |
|---|---|---|
| A | listingIds | You already know which listings to track |
| B | urls | Copy-paste listing URLs from your browser |
| C | searchUrl | Paste an Airbnb search page URL with map view |
| D | boundingBox | Define a geographic rectangle by lat/lng corners |
| E | location | Just 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.
Legal
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.