Airbnb Availability Calendar Scraper avatar

Airbnb Availability Calendar Scraper

Pricing

from $2.50 / 1,000 results

Go to Apify Store
Airbnb Availability Calendar Scraper

Airbnb Availability Calendar Scraper

Scrape day-by-day availability for any Airbnb listing. Returns up to 12 months of calendar data per request: available/booked status, minimum and maximum stay nights, check-in and check-out eligibility, and the nightly price string when visible. Fast HTTP-only scraper, no browser needed.

Pricing

from $2.50 / 1,000 results

Rating

0.0

(0)

Developer

Crikit

Crikit

Maintained by Community

Actor stats

0

Bookmarked

9

Total users

6

Monthly active users

15 days ago

Last modified

Categories

Share

Scrape day-by-day availability for any Airbnb listing. Returns up to 12 months of calendar data per request: available/booked status, min and max stay nights, check-in and check-out eligibility, and the nightly price string when visible. HTTP-only — no headless browser, ~300 ms per listing.

What you give it

FieldTypeRequiredNotes
startUrlsarray of URLsone of theseFull Airbnb listing URLs https://www.airbnb.com/rooms/<id>.
listingIdsarray of stringsone of theseBare numeric listing IDs if you already have them.
monthsinteger (1-12)noHow many months to fetch. Defaults to 12 (single request per listing).
startMonthinteger (1-12)noFirst month. Defaults to current UTC month.
startYearintegernoFirst year. Defaults to current UTC year.
currencystringnoISO 4217 (e.g. USD, EUR). Defaults to USD. Affects priceFormatted.
localestringnoe.g. en-US, en-GB. Defaults to en-US.
maxItemsintegernoHard cap on total items. 0 means unlimited.
proxyConfigurationobjectnoApify Proxy enabled by default (default group is sufficient).

What you get back

One row per listing. Each row contains a days array with one record per calendar day.

Top-level fields (per listing)

  • listingId — Airbnb numeric ID
  • url — canonical listing URL
  • currency, requestedMonths, startMonth, startYear
  • firstDate, lastDate — YYYY-MM-DD bounds of the calendar slice
  • totalDays, availableDays, blockedDays
  • scrapedAt — ISO timestamp
  • days[] — see below

Per-day fields (in days[])

  • calendarDate — YYYY-MM-DD
  • available — boolean
  • availableForCheckin — boolean (some dates are only allowed as checkout)
  • availableForCheckout — boolean
  • minNights, maxNights — host stay-length constraints for that date
  • bookable — nullable boolean (null on blocked days; true on available days that pass policy)
  • priceFormatted — pretty price string like "$120" when available, null on blocked days

Pricing (pay-per-event)

TierPer calendar resultActor start (per GB)
FREE$0.0025$0.0075
BRONZE$0.0022$0.0070
SILVER$0.0020$0.0060
GOLD$0.0018$0.0050
PLATINUM$0.0016$0.0045
DIAMOND$0.0014$0.0040

A "calendar result" is one full listing with up to 365 days of data. There is no per-day or per-event surcharge — pricing data is bundled in.

Billing note. Every record pushed to the default dataset counts as one result. The scraper pushes a warning row when a listing returns no data (invalid ID, removed listing, hotel-style multi-unit) or when input cannot be parsed; those rows are billed at the same per-result rate. This keeps the run from silently returning zero items.

Worked examples (FREE tier, 512 MB memory => 0.5 GB start charge):

  • 100 listings: 100 × $0.0025 + $0.0075 × 0.5 = $0.254
  • 1,000 listings: 1000 × $0.0025 + $0.0075 × 0.5 = $2.504
  • 10,000 listings: 10000 × $0.0025 + $0.0075 × 0.5 = $25.004

Measured local coverage (build 0.1)

FieldDays testedExtractedCoverage
calendarDate18251825100.0%
available18251825100.0%
availableForCheckin18251825100.0%
availableForCheckout18251825100.0%
minNights18251825100.0%
maxNights18251825100.0%

Reliability: 5/5 listings returned full 365-day calendars. Zero value mismatches against ground truth.

Cloud variance (3 runs across 2+ hours) will be added after first deploy.

Limits to be aware of

  • The persisted GraphQL hash can rotate (Airbnb operational change). The actor self-heals: on PersistedQueryNotFound, it scrapes a fresh hash from the live listing page and retries.
  • priceFormatted is always null for blocked days (true negative — that's Airbnb's API, not a scraper miss).
  • bookable is null for blocked days (same reason).
  • The endpoint returns max 12 months per request. Set months and startMonth/startYear to scan further out.
  • "Property-level" calendars (multi-unit hotels) are not returned; the default config skips them. Open an issue if you need this.

FAQ

Why is this cheaper than the alternative actor on Apify? We charge once per listing instead of separately for "actor-start", "result", and "available-date price" events. The math comes out ~25-40 % cheaper on typical workloads.

Does it need login? No.

Does it work on Airbnb Plus / Luxe? Yes — same endpoint shape.

Can I batch a portfolio? Yes. Pass any number of URLs in startUrls. Concurrency is 10, so 1,000 listings ≈ a few minutes.

Changelog

  • 0.1 — Initial release.