Airbnb Market Analytics — ADR, RevPAR & Occupancy avatar

Airbnb Market Analytics — ADR, RevPAR & Occupancy

Pricing

from $5.00 / 1,000 results

Go to Apify Store
Airbnb Market Analytics — ADR, RevPAR & Occupancy

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

deusex machine

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

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 reviewsCount by 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

FieldDescription
idAirbnb listing ID
nameProperty title
urlDirect link to the Airbnb listing
priceTotal price for the stay, formatted
priceAmountPrice as a number (feeds ADR / RevPAR calcs)
priceCurrencyISO currency code
pricePerNightNightly breakdown string (drives ADR normalization)
ratingAverage guest rating (0–5)
reviewsCountNumber of guest reviews — occupancy proxy
ratingLabelFull rating description
isSuperhostBoolean — feeds Superhost density metric
badgesSuperhost, Guest favorite, etc.
roomInfoBedrooms, beds, bathrooms — segment by size
locationLabelNeighborhood or area name
latitudeGPS latitude for geographic clustering
longitudeGPS longitude for geographic clustering
photosArray of photo URLs
thumbnailMain photo
scrapedAtISO 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 pd
df = pd.read_json("airbnb_miami.json")
df["nightly"] = df["priceAmount"] / 4 # 4 nights in the query
adr = 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 pd
df = 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

ParameterTypeDefaultDescription
locationsarrayCities / neighborhoods to analyze
checkinstringYYYY-MM-DD
checkoutstringYYYY-MM-DD
adultsinteger2Number of guests
maxListingsinteger20Max listings per location (30–50 recommended for market analytics)
minPriceinteger0Minimum nightly price filter
maxPriceinteger0Maximum nightly price filter
roomTypestringentire, 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 UTC
curl -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 ApifyClient
import pandas as pd
client = 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"] / 4
summary = 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

CapabilityThis actorAirDNA MarketMinderMashvisorPriceLabs Market DataTransparent
Cost modelPay-per-result ($0.0015)$20–$99 / city / month$17–$67 / month$39+ / monthCustom enterprise
Raw data accessFull (JSON / CSV)Export locked to higher tierLimited exportsDashboard-firstFull but enterprise
Neighborhood granularityAny search term Airbnb supportsPre-defined marketsPre-defined zip codesPre-defined marketsCustom
ADR / RevPAR computationYou compute (your model, your assumptions)Pre-computedPre-computedPre-computedPre-computed
Historical dataTime-series via scheduled runsUp to 2 years baked-inUp to 2 yearsBaked-in3+ years
Custom geographic boundariesYes (GPS clustering on lat/lng)NoNoPre-definedCustom
Vendor lock-inNoneHighModerateModerateHigh
Best forBuilders, quants, investors with their own modelsInvestors wanting a polished dashboardAffordable dashboard alternativeDynamic pricing for hostsEnterprise 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:

  1. 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.
  2. Webhook — on run complete, Apify posts the dataset ID to a Cloudflare Worker.
  3. ETL — Worker pulls dataset → normalizes priceAmount per night → pushes into Neon Postgres (free tier).
  4. 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.
  5. 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:

  1. 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.
  2. A Python script computes neighborhood median nightly rate, 25th and 75th percentiles.
  3. 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.
  4. 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.

🙏 Running this for STR investment research? Leaving a review takes 10 seconds and keeps this tool cheap and well-maintained.