Airbnb Occupancy & Dynamic Pricing Monitor
Pricing
from $2.50 / 1,000 listing occupancy records
Airbnb Occupancy & Dynamic Pricing Monitor
Reads public Airbnb listing/search HTML for calendar availability, blocked-date proxy occupancy, nightly prices, and cleaning fees.
Pricing
from $2.50 / 1,000 listing occupancy records
Rating
0.0
(0)
Developer
Shwetanshu Mehta
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
5 days ago
Last modified
Categories
Share
This Actor reads public Airbnb listing/search HTML and the public calendar request used by the listing page. It returns availability observations, currency-aware nightly pricing, cleaning fees, blocked dates, and price shifts. Because a blocked date may be an owner block, maintenance, or a booking, confirmed occupancy and revenue remain null; the Actor reports defensible minimum/maximum ranges instead.
Input
{"location": "Scottsdale, Arizona","monthsToLookAhead": 3,"includeBlockedDates": true,"currency": "USD","locale": "en-US","maxRetries": 2,"proxyConfiguration": { "useApifyProxy": false }}
You can instead provide listingIds, explicit public startUrls, or geo coordinates plus a radius; location is no longer required when one of those inputs is present. currency is sent to Airbnb as a display preference; values are not converted locally. Explicit same-origin pagination links are followed up to maxPages. Failed or challenged page/calendar requests get at most maxRetries retries. Proxying is opt-in; when enabled, each attempt uses a fresh proxy session. Public-site markup and anti-bot behavior can change; challenge pages are detected, retries are bounded, and CAPTCHAs are never solved or bypassed. Unexpected empty listing/calendar responses are reported as bounded, query-stripped warnings in RUN_SUMMARY instead of being silently treated as healthy. The Actor does not use private accounts or invent availability.
Output
Each record contains listingId, title, avgDailyRate, currency, pricing/calendar provenance, next-30-day calendar coverage, blocked rates, occupancyEstimateRangePct, estimatedMonthlyRevenueRange, cleaning fee, availability counts, blocked dates, price range, quality score, pricingDataAvailable, and charge status. USD aliases are populated only when the currency is explicitly USD. Partial calendar coverage widens the upper bound instead of pretending unobserved nights are available.
The listing-record paid event is emitted only when at least 21 of the next 30 dates have explicit availability and the record also has an explicit nightly rate plus ISO currency. Calendar-only observations remain in the dataset for diagnosis but are not charged; chargeabilityReason explains why.
occupancyRateNext30Days and estimatedMonthlyRevenueUsd intentionally remain null: public availability cannot distinguish a reservation from a host block. For example, 8 blocked nights across 30 observed days produces an occupancy range of 0–26.7%, not a claim of 26.7% occupancy.
Resource controls
- Listing maps are capped before detail fetches; one page is fetched at a time.
- Response bodies are streamed with hard timeouts and byte limits.
- Calendar entries are capped at 600 per listing and deduplicated by date.
- Optional proxy dispatchers are short-lived and closed after each request attempt.
- Records are emitted immediately after each listing is computed.
Monetization
The manifest declares listing-record at $0.0025 per useful record ($2.50 per 1,000). Records with fewer than 21 observed next-30-day calendar dates, or without explicit rate/currency data, are returned for transparency but not charged.
Local development
npm installnpm testnpm run checkapify validate-schema .actor/input_schema.jsonapify run --purge