Short-Term Rental Market Occupancy Estimator (Airbnb data)
Pricing
Pay per event
Short-Term Rental Market Occupancy Estimator (Airbnb data)
Estimate Airbnb occupancy for any city or area: samples listings, reads calendars, returns monthly median occupancy % and median nightly price. STR market data.
Pricing
Pay per event
Rating
0.0
(0)
Developer
Bogdan Glisici
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
24 days ago
Last modified
Categories
Security
Limited permissionsShare
Estimate Airbnb occupancy for a whole city or area in one run. Enter a city (for example "Lisbon, Portugal") or a map bounding box. The actor samples active listings, reads each listing's public availability calendar, and returns the market occupancy rate per month (median, mean, 25th and 75th percentile) and the median nightly price. It's quick STR market data for investors, hosts and analysts, with no login or coding needed.
Keywords: airbnb occupancy rate by city, STR market data, short-term rental market analysis, vacation rental occupancy, airbnb market research, average daily rate.
Use cases
- Before buying an investment property: see how busy the market really is for the next 1 to 6 months.
- Comparing cities or neighbourhoods: run the same input for several areas, or draw bounding boxes.
- Hosts and property managers: benchmark your own occupancy against the local median.
- Market reports and dashboards: schedule weekly runs and track booking pace.
Input
{ "location": "Brasov, Romania", "sampleSize": 36, "monthsAhead": 3 }
Or use a bounding box instead: "boundingBox": {"neLat":44.46,"neLng":26.12,"swLat":44.42,"swLng":26.07}.
Output
- Market summary, in the key-value store as
MARKET_SUMMARY(JSON) andMARKET_SUMMARY_CSV(CSV). Both are linked on the run's Output tab:
| month | listingsCounted | medianOccupancyPct | p25 | p75 | medianNightlyPrice |
|---|---|---|---|---|---|
| 2026-10 | 10 | 73.7 | 55.2 | 78.9 | 123.07 USD |
| 2026-11 | 10 | 20.0 | 17.5 | 36.7 | 123.07 USD |
(Real test results for Brașov, 13 Oct 2026, 10 listings sampled.)
- Sampled listings (dataset): one row per listing per month with listingId, name, lat/lng, rating, nightlyPrice, occupancyPct and blockedNights.
How occupancy is estimated
Occupancy = blocked nights ÷ nights counted. Airbnb's public calendar does not separate booked nights from nights the host blocked, so treat it as an upper-bound estimate. Past days and months beyond a host's booking window are excluded.
Nightly price: when optional inputs checkIn, checkOut, and adults are set, median nightly price is the rate shown in search for that stay (before fees, discounts, and taxes). Recommended defaults for comparable city snapshots: Tuesday 5 weeks out, Tuesday to Friday (3 nights), 2 adults — so both price and occupancy share one "checked on" date. Leave dates empty for Airbnb's undated/default sample dates; those often skew higher than a real dated stay.
Pricing
$0.03 per listing sampled, covering all requested months. A 36-listing city snapshot costs about $1.08.
Tips
- Use a sample of 30 to 100 listings for stable medians.
- For honest price comparisons, set
checkIn/checkOut/adults(e.g. a mid-week 3-night stay for 2 adults). Undated search prices are not comparable across markets. - Optional
priceOnly: truewith dates returns dated nightly prices without reading calendars (use a separate undated run for occupancy). - If a run reports a bot check, wait for the automatic no-proxy retry first; use Apify Residential only if that still fails.
- For per-listing calendars, see Vacation Rental Calendar & Occupancy by nimble_levi.
Troubleshooting
- Bot check / "Search page returned no listing data": Airbnb sometimes serves a soft block on Apify datacenter proxies. The actor automatically retries with no proxy, then (if still blocked) with Residential. Prefer letting that ladder run; only set
proxyConfiguration.apifyProxyGroupsto["RESIDENTIAL"]if no-proxy also fails (Residential costs more). - Empty results for a known city: The actor tries location variants (with/without diacritics), then a Nominatim geocode → map bounding-box search. You can also pass
boundingBoxyourself (neLat/neLng/swLat/swLng). - Which proxy actually worked? Each run logs
Proxy used/fallbackPath, and writesproxyMode,searchStrategy, andfallbackPathintoMARKET_SUMMARYand theOUTPUTkey-value record (e.g.datacenter→nonemeans the no-proxy fallback succeeded). - Proxy options: default is Apify datacenter (
useApifyProxy: true);useApifyProxy: falseforces direct; Residential is last-resort only.
Airbnb is a trademark of Airbnb, Inc. This tool is independent and not affiliated with Airbnb.