Airbnb Market Analytics — ADR, RevPAR & Occupancy
Pricing
from $5.00 / 1,000 results
Airbnb Market Analytics — ADR, RevPAR & Occupancy
Airbnb market intelligence API for short-term rental investors. Pull ADR, occupancy signals, nightly price distribution, Superhost density and rating benchmarks for any city or neighborhood. No login — JSON and CSV export.
Pricing
from $5.00 / 1,000 results
Rating
0.0
(0)
Developer
deusex machine
Actor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
⭐ Useful? Leave a review — STR investors leaving reviews is how this actor rises in search and stays cheap to maintain.
Airbnb market intelligence for short-term rental (STR) investors, revenue managers and vacation rental analysts. Give this actor a list of cities or neighborhoods and it returns the raw Airbnb market data you need to calculate ADR (average daily rate), occupancy signals, RevPAR (revenue per available rental), Superhost density, rating benchmarks and nightly price distribution — the same numbers AirDNA, Mashvisor or PriceLabs charge hundreds of dollars a month for.
No login, no Airbnb API key, no subscription. Pay-per-result pricing. Export everything as JSON or CSV directly from the Apify console.
What this Airbnb market analytics actor does
For every neighborhood you feed it, the scraper pulls the top Airbnb listings for the date range you specify and captures the full data shape: price, rating, reviews count, room info (bedrooms / beds / baths), coordinates and Superhost badge. You can then compute — in a spreadsheet, notebook or BI tool:
- ADR (Average Daily Rate) =
mean(priceAmount / nights)across the dataset - Occupancy proxy =
reviewsCount ÷ listing age(well-known STR industry heuristic) - RevPAR =
ADR × occupancy - Superhost density =
% of listings with isSuperhost = true - Price distribution — median, p25, p75, p95 by room type
- Review velocity — distribution of
reviewsCountby property size - Geographic hot-spots — cluster listings by
latitude/longitude
Because the data is raw, you can slice it however your model wants. Pipe it into Python, Jupyter, R, Excel, Google Sheets, Tableau, Power BI or directly into your own investment dashboard.
Use cases for Airbnb market intelligence
- Vacation rental investment analysis — before you buy a short-term rental property, pull the comparable set for that neighborhood and compute ADR, occupancy and annual revenue potential.
- Airbnb arbitrage research — find cities where ADR is high but long-term rent is low.
- Dynamic pricing models — feed Airbnb data into your own rate-recommendation engine (a PriceLabs / Beyond Pricing alternative for hosts who want full control).
- Neighborhood-level market reports — build city-by-city or zip-code-by-zip-code vacation rental market reports for clients.
- Portfolio benchmarking — compare your own listing's rating, price and reviews against the neighborhood median.
- STR regulation research — track supply changes over time in cities tightening short-term rental rules.
- Hospitality consulting — pull Airbnb comps for hotel and boutique resort pricing analyses.
- Real-estate data products — sell enriched neighborhood-level vacation rental data to realtors, lenders or insurers.
Data fields extracted
| Field | Description |
|---|---|
id | Airbnb listing ID |
name | Property title |
url | Direct link to the Airbnb listing |
price | Total price for the stay, formatted |
priceAmount | Price as a number (feeds ADR / RevPAR calcs) |
priceCurrency | ISO currency code |
pricePerNight | Nightly breakdown string (drives ADR normalization) |
rating | Average guest rating (0–5) |
reviewsCount | Number of guest reviews — occupancy proxy |
ratingLabel | Full rating description |
isSuperhost | Boolean — feeds Superhost density metric |
badges | Superhost, Guest favorite, etc. |
roomInfo | Bedrooms, beds, bathrooms — segment by size |
locationLabel | Neighborhood or area name |
latitude | GPS latitude for geographic clustering |
longitude | GPS longitude for geographic clustering |
photos | Array of photo URLs |
thumbnail | Main photo |
scrapedAt | ISO timestamp of extraction (for time-series runs) |
How to use
Quick ADR sweep across neighborhoods
{"locations": ["South Beach Miami","Brickell Miami","Wynwood Miami","Little Havana Miami","Coral Gables Miami"],"checkin": "2026-07-10","checkout": "2026-07-14","adults": 2,"roomType": "entire","maxListings": 30}
Then in a Python notebook:
import pandas as pddf = pd.read_json("airbnb_miami.json")df["nightly"] = df["priceAmount"] / 4 # 4 nights in the queryadr = df.groupby("locationLabel")["nightly"].agg(["mean", "median", "count"])print(adr.sort_values("mean", ascending=False))
Compare ADR across a portfolio of cities
{"locations": ["Austin", "Nashville", "Phoenix", "Denver", "Charleston"],"checkin": "2026-09-01","checkout": "2026-09-05","adults": 4,"roomType": "entire","maxListings": 50}
Superhost density benchmark
{"locations": ["Lisbon", "Porto", "Madeira", "Algarve"],"checkin": "2026-06-01","checkout": "2026-06-07","adults": 2,"maxListings": 50}
import pandas as pddf = pd.read_json("airbnb_portugal.json")df.groupby("locationLabel")["isSuperhost"].mean() # % Superhost per market
Price distribution for rate-setting
{"locations": ["Tulum"],"checkin": "2026-12-20","checkout": "2026-12-27","adults": 4,"roomType": "entire","maxListings": 50}
Input parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
locations | array | — | Cities / neighborhoods to analyze |
checkin | string | — | YYYY-MM-DD |
checkout | string | — | YYYY-MM-DD |
adults | integer | 2 | Number of guests |
maxListings | integer | 20 | Max listings per location (30–50 recommended for market analytics) |
minPrice | integer | 0 | Minimum nightly price filter |
maxPrice | integer | 0 | Maximum nightly price filter |
roomType | string | — | entire, private, shared, hotel |
Output example
{"id": "14926879","name": "Ocean view studio in Cancun hotel zone","url": "https://www.airbnb.com/rooms/14926879","price": "$9,750 MXN","priceAmount": 9750,"priceCurrency": "MXN","pricePerNight": "4 nights x $2,437.49 MXN","rating": 4.89,"reviewsCount": 389,"isSuperhost": true,"badges": ["Superhost"],"roomInfo": "1 bedroom · 1 bed · 1 bath","locationLabel": "Cancun hotel zone","latitude": 21.04586,"longitude": -86.78288,"scrapedAt": "2026-04-21T04:30:00.000Z"}
STR glossary — the metrics you'll compute from this data
If you're new to short-term rental analytics, here's a plain-English definition of every metric this actor feeds into.
ADR (Average Daily Rate) — the mean nightly price across a comparable set of Airbnb listings. Computed from priceAmount normalized by nights in your query. A Manhattan studio might show an ADR of $240; a Cancun 2-bedroom $180. This is the number AirDNA and Mashvisor charge the most for.
Occupancy rate — percent of available nights that are actually booked. You can't see this directly on Airbnb, but the industry-standard proxy is reviewsCount ÷ months_listing_is_live × 0.5 (roughly 50% of stays leave reviews). Not forensic-grade but ~85% correlated with booking-confirmation data.
RevPAR (Revenue Per Available Rental) — ADR × occupancy. The single most important metric for STR investment. A listing with $250 ADR at 40% occupancy produces the same revenue as a $100 ADR at 100% occupancy. Always compute both.
Superhost density — % of listings in a market flagged isSuperhost = true. High density (>30%) means a mature, competitive market with experienced operators. Low density (<10%) signals opportunity for a well-run new entrant.
Review velocity — average reviewsCount per listing, normalized by listing age. A proxy for how much booking volume the average unit in that market is seeing.
Comparable set (comp set) — the specific slice of Airbnb listings you benchmark your property against. Typically same city, same room type, same bedroom count, same rating tier. This scraper makes it trivial to pull a clean comp set by combining locations, roomType and adults.
Rate parity / cannibalization — when your own listings are priced below the neighborhood median and are stealing bookings from your other properties. Use priceAmount across your portfolio + neighborhood comp-set to detect.
Pace — the rate at which future bookings are filling up. Not directly visible from search results, but comparing maxListings availability across future dates gives a rough pace signal.
LOS (Length of Stay) — pull the pricePerNight string and divide total price by nightly to infer typical LOS that Airbnb is showing for a given market on the selected dates.
Schedule recurring market runs
For time-series STR market research, schedule this actor to run weekly from the Apify Scheduler. Every run appends to a new dataset, giving you a week-over-week ADR and occupancy trend line. Combine with the Apify Dataset API to stream results into S3, BigQuery, Snowflake or Postgres.
# Trigger via cron, every Monday 09:00 UTCcurl -X POST 'https://api.apify.com/v2/acts/makework36~airbnb-market-data/run-sync?token=YOUR_TOKEN' \-H 'Content-Type: application/json' \-d '{"locations": ["Austin", "Nashville", "Phoenix"],"checkin": "2026-09-01","checkout": "2026-09-05","maxListings": 50}'
Python integration for market analysts
from apify_client import ApifyClientimport pandas as pdclient = ApifyClient("YOUR_APIFY_TOKEN")run = client.actor("makework36/airbnb-market-data").call(run_input={"locations": ["Austin", "Nashville", "Phoenix"],"checkin": "2026-09-01","checkout": "2026-09-05","adults": 4,"roomType": "entire","maxListings": 50,})items = list(client.dataset(run["defaultDatasetId"]).iterate_items())df = pd.DataFrame(items)# ADR per market (4-night trip)df["nightly"] = df["priceAmount"] / 4summary = df.groupby("locationLabel").agg(adr=("nightly", "mean"),median_adr=("nightly", "median"),listings=("id", "count"),superhost_pct=("isSuperhost", "mean"),avg_rating=("rating", "mean"),avg_reviews=("reviewsCount", "mean"),)print(summary.sort_values("adr", ascending=False))
How this compares to AirDNA, Mashvisor, PriceLabs and Transparent
| Capability | This actor | AirDNA MarketMinder | Mashvisor | PriceLabs Market Data | Transparent |
|---|---|---|---|---|---|
| Cost model | Pay-per-result ($0.0015) | $20–$99 / city / month | $17–$67 / month | $39+ / month | Custom enterprise |
| Raw data access | Full (JSON / CSV) | Export locked to higher tier | Limited exports | Dashboard-first | Full but enterprise |
| Neighborhood granularity | Any search term Airbnb supports | Pre-defined markets | Pre-defined zip codes | Pre-defined markets | Custom |
| ADR / RevPAR computation | You compute (your model, your assumptions) | Pre-computed | Pre-computed | Pre-computed | Pre-computed |
| Historical data | Time-series via scheduled runs | Up to 2 years baked-in | Up to 2 years | Baked-in | 3+ years |
| Custom geographic boundaries | Yes (GPS clustering on lat/lng) | No | No | Pre-defined | Custom |
| Vendor lock-in | None | High | Moderate | Moderate | High |
| Best for | Builders, quants, investors with their own models | Investors wanting a polished dashboard | Affordable dashboard alternative | Dynamic pricing for hosts | Enterprise data licensing |
Pragmatic take: if you want a pre-packaged ADR dashboard with no effort, AirDNA or Mashvisor wins. If you want raw Airbnb market data you can model yourself, at ~5% of the cost, this actor wins. Many STR investors use both — a cheap Mashvisor subscription for exploration, this actor for custom comp sets their own dashboard needs.
Extended use case — a $15/month STR market dashboard
A real workflow one of our users built:
- Scheduled run — this actor fires every Monday at 06:00 UTC, scraping 30 listings across 20 target neighborhoods. Cost:
30 × 20 × 0.0015 = $0.90/week = ~$3.60/month. - Webhook — on run complete, Apify posts the dataset ID to a Cloudflare Worker.
- ETL — Worker pulls dataset → normalizes
priceAmountper night → pushes into Neon Postgres (free tier). - Dashboard — Metabase on Fly.io (~$5/month) connects to Neon and renders ADR, RevPAR proxy, Superhost density and median rating per neighborhood, week-over-week.
- Alerts — Metabase → Slack webhook when ADR in a target neighborhood moves >10% week-over-week.
Total monthly cost: ~$8-15 for a market dashboard that would run $500-1,500 on AirDNA Enterprise. The tradeoff is you own and maintain the pipeline — but the pipeline is ~300 lines of code total.
Extended use case — dynamic pricing engine for 5 listings
Vacation rental host with 5 properties in Tulum:
- This actor scrapes the 30 closest Airbnb listings to each property (filtered by
roomType, bedrooms matched to each property) every morning at 04:00 local. - A Python script computes neighborhood median nightly rate, 25th and 75th percentiles.
- Host's own listings are re-priced daily: if market p50 moved up 5%, increase base rate 3%; if market p25 dropped 10%, lower minimum floor.
- All handled with
apify-client, no subscription software.
Cost: 5 properties × 30 comps × 30 days × 0.0015 = $6.75/month. Comparable PriceLabs subscription: $19.99/month per listing = $99.95. ~15× cheaper and fully customizable.
Pricing
- $0.0015 per listing extracted
- $5 Apify trial → ~3,300 listings, enough to evaluate 5–6 full neighborhood sweeps
- No subscription, no minimum commitment
Compare that to AirDNA MarketMinder ($20–$99/month per city), Mashvisor ($17–$67/month) or PriceLabs market data ($39+/month) — this actor gives you the same raw Airbnb signal at a fraction of the cost and with no lock-in.
FAQ
How is this different from AirDNA, Mashvisor, Transparent or PriceLabs? Those are hosted dashboards with pre-computed ADR, occupancy and RevPAR. This actor gives you the raw Airbnb data — you run the math your way, in your own model, with no monthly subscription and no vendor lock-in. Power users often run this into a custom BI dashboard that costs 10× less than AirDNA.
Is this really a replacement for AirDNA occupancy data?
For directional research and comparable-set analysis, yes. AirDNA pulls from booking confirmation signals you can't see publicly; this actor uses the industry-standard reviewsCount / listing_age occupancy proxy, which most STR analysts consider ~85% correlated. If you need forensic-grade booking data, use both.
What Airbnb data fields drive ADR and RevPAR calculations?
Primary inputs: priceAmount, pricePerNight, reviewsCount, scrapedAt, latitude, longitude, isSuperhost, roomInfo.
Can I do geographic clustering with this data?
Yes — every listing comes with GPS latitude and longitude. Feed them into k-means, DBSCAN or H3 / S2 buckets to build your own neighborhood geometries.
How often should I schedule runs? For market reports: weekly. For dynamic pricing: daily. For one-off investment analysis: a single run is usually enough.
Does this scraper require an Airbnb login? No. It reads publicly visible Airbnb search data.
Export format? JSON, CSV, Excel, XML — all available from the Apify console or via the Apify Dataset API. You can also stream results into webhook endpoints.
Troubleshooting
ADR numbers look way too low or too high
Airbnb shows total trip price for the date range you query, not nightly. Always divide priceAmount by the nights in your query. Missed this and you'll get ADR off by 4-7x.
Superhost density looks suspiciously high
Airbnb's search ranking favors Superhosts — the top-20 listings are oversampled vs the real distribution. For a cleaner density signal, bump maxListings to 50+ and expect 25-40% Superhost density in most mature markets.
Occupancy proxy gives different numbers across markets
Airbnb review volume varies by culture (Asian markets have ~40% lower review rates than US / EU). For Asia-Pacific markets, multiply the reviewsCount-based occupancy proxy by 1.4-1.5 as a rough correction.
Dates past 12 months return empty Airbnb's calendar typically only allows booking 12-14 months out. For future dates beyond that window, the scraper will return listings without prices. Query nearer-term windows for reliable ADR.
Listings repeat across neighborhoods
If you search "Miami" and "South Beach" in the same run, you'll get overlapping listings. De-duplicate by id before computing ADR to avoid double-counting.
Currency inconsistencies
If listings in a single market return mixed currencies (e.g. USD and MXN in Cancun), pass adults along with a clean search term. Use a currency conversion table (fixed daily rate) to normalize priceAmount before aggregating.
Data licensing and terms
This actor only reads publicly visible Airbnb search data — the same content a browser fetches. It does not log in, does not bypass paywalls, does not access private host or guest data. Use of the output data is governed by Airbnb's terms of service in your jurisdiction; commercial reselling of raw Airbnb data may require separate licensing. This is standard across every Airbnb scraper on the market; nothing unique to this actor.
Changelog
- v1.0 (2026-04-21) — Full STR-investor rewrite, added Python analytics examples, categories
TRAVEL / DEVELOPER_TOOLS / LEAD_GENERATION, added ADR / RevPAR / occupancy documentation. - v0.9 (2026-04-15) — Initial release.
Related actors
- Airbnb Scraper — Listings, Prices, Photos & Hosts API — raw search-level Airbnb scraper
- Airbnb MCP Server — Claude, Cursor & AI Agents — same data as AI tools for Claude and Cursor
🙏 Running this for STR investment research? Leaving a review takes 10 seconds and keeps this tool cheap and well-maintained.
