Airbnb Market Intel Scraper | Listings, Occupancy & Revenue avatar

Airbnb Market Intel Scraper | Listings, Occupancy & Revenue

Pricing

from $2.80 / 1,000 listing (search data)s

Go to Apify Store
Airbnb Market Intel Scraper | Listings, Occupancy & Revenue

Airbnb Market Intel Scraper | Listings, Occupancy & Revenue

Scrape any Airbnb market: nightly price, rating, reviews, bedrooms + 12-month calendar turned into occupancy 30/60/90, est. monthly revenue, RevPAR, superhost & host stats, plus a free market-summary row. AirDNA-style comps for STR investors & hosts. HTTP-only, pay per result, MCP-ready.

Pricing

from $2.80 / 1,000 listing (search data)s

Rating

0.0

(0)

Developer

Mr Zack

Mr Zack

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

1

Monthly active users

7 hours ago

Last modified

Share

Airbnb Market Intel Scraper — Listings, ADR, Occupancy & Revenue Estimate

Answer "what does a 2-bedroom in this market actually earn?" in one run. Scrape any Airbnb search (city, neighborhood, region or a pasted Airbnb URL with your filters) and get every listing's nightly price, rating, reviews, bedrooms/beds/baths, badges and coordinates — plus, per listing, the 12-month availability calendar turned into occupancy 30/60/90/365, estimated monthly revenue and RevPAR, superhost status, guest capacity, sub-ratings and host stats. A free market-summary row rolls it up: median / p25 / p75 nightly price, share of superhosts and guest favorites, median occupancy & revenue, and a breakdown by bedroom count.

HTTP-only (server-rendered pages + Airbnb's public calendar endpoint), no login, no proxy, no cookies. Pay per result: $4 per 1,000 listings, $6 per 1,000 enriched listings (calendar + details). Duplicates, failed listings and the summary row are never charged.

Who uses this

  • Short-term-rental investors comparing markets before buying — ADR, occupancy and revenue estimates per bedroom count, without a $100+/month AirDNA seat.
  • Hosts & property managers pricing against the competition: who charges what, who is booked out, who is superhost, minimum nights.
  • Real-estate agents & lenders building STR underwriting comps for a specific address or neighborhood.
  • Analysts & AI agents that need a clean, structured snapshot of an Airbnb market on a schedule.

Input

FieldDefaultWhat it does
locationAustin, TXAnything you would type into Airbnb search.
locations[]Several markets in one run (one per line).
searchUrls[]Advanced: full airbnb.com/s/... URLs with your own filters (map area, amenities, instant book…).
checkIn / checkOut4 weeks out, 3 nightsStay dates drive the nightly price Airbnb shows.
adults2Guest count.
children / infants / pets0New in 0.0.3. Party details — same effect on price/availability as on airbnb.com; pets = pet-friendly listings only.
roomTypeanyentire_home or private_room to filter.
minBedrooms0Minimum bedrooms.
minBeds / minBathrooms0New in 0.0.3. Airbnb min_beds / min_bathrooms.
minRating / minReviews / guestFavoriteOnly0 / 0 / falseNew in 0.0.3. Post-filters on the search card (rating, review count, Guest Favorite badge) — dropped listings are never charged. Use minReviews: 20 to keep only proven earners.
priceMin / priceMax0Nightly price filter in currency.
maxListings54Charged listings per location (18 per page, Airbnb caps a search at 270).
enrichCalendartrueAdd calendar KPIs + detail fields (2 extra requests per listing).
maxEnrich30Enrich only the first N listings; 270 = all.
currencyUSDAny ISO code (EUR, GBP, AUD, IDR…).
marketSummarytrueAppend the free roll-up row (also saved as key-value record MARKET_SUMMARY).

Output — listing row

FieldExampleNotes
listingId, url547878270470501768Airbnb listing
title, nameGuest suite in Austin, Serene & Sunny SoCo Sanctuary…
propertyTypeShort, areaGuest suite, Austinparsed from title
rating, reviewsCount, isNewListing4.99, 114, false
isGuestFavorite, isTopGuestFavorite, badgestrue, true, ["Guest favorite"]
bedrooms, beds, baths1, 1, 1studio = 0 bedrooms
nightlyPrice, nights, totalPrice, originalTotalPrice, discountPct, currency274.33, 3, 823, null, null, USDprice for the searched dates, before taxes
checkIn, checkOut, freeCancellation2026-10-09, 2026-10-12, true
latitude, longitude, pictureUrl, rank, searchLocation, scrapedAt
Enriched (enriched: true)
roomType, propertyType, personCapacityEntire home/apt, Entire guest suite, 2
isSuperhost, hostName, hostRating, hostReviewCount, hostYears, hostIsVerifiedtrue, Mary, 4.99, 114, 4.5, true
ratingCleanliness, ratingAccuracy, ratingCheckin, ratingCommunication, ratingLocation, ratingValue5, 4.99, 4.98, 5, 4.97, 4.95
occupancy30, occupancy60, occupancy90, occupancy3650.367, 0.417, 0.311, 0.269share of calendar nights unavailable
bookedNights30/60/90/365, availableNights30/90/36511, 25, 28, 97
estRevenue30, estRevenue90, estRevenue3653018, 7681, 26610nightlyPrice × unavailable nights
revPar30, revPar90100.59, 85.35nightlyPrice × occupancy
minNights, maxNights, nextAvailableDate, calendarFrom, calendarTo2, 1125, 2026-09-13, …

How to read occupancy: Airbnb only exposes availability, so an unavailable night is either booked or blocked by the host. That is the same public-data proxy every STR analytics tool starts from — treat it as an upper bound and compare listings against each other rather than as an audited P&L.

Output — market-summary row (free)

type: "market-summary", listings, listingsEnriched, medianNightlyPrice, avgNightlyPrice, p25NightlyPrice, p75NightlyPrice, minNightlyPrice, maxNightlyPrice, avgRating, medianReviews, totalReviews, shareGuestFavorite, shareNewListings, shareSuperhost, medianOccupancy30, medianOccupancy90, medianEstRevenue30, medianRevPar30, medianMinNights, medianPersonCapacity, bedroomBreakdown[] (bedrooms, listings, medianNightlyPrice, medianOccupancy30, medianEstRevenue30, avgRating).

Example output (one real enriched row, 6 Sep 2026, "Austin, TX")

{
"listingId": "547878270470501768",
"url": "https://www.airbnb.com/rooms/547878270470501768",
"title": "Guest suite in Austin",
"name": "Serene & Sunny SoCo Sanctuary with Farmhouse Feel",
"rating": 4.99, "reviewsCount": 114, "isGuestFavorite": true,
"bedrooms": 1, "beds": 1, "baths": 1,
"nightlyPrice": 274.33, "nights": 3, "totalPrice": 823, "currency": "USD",
"roomType": "Entire home/apt", "personCapacity": 2, "isSuperhost": true,
"hostName": "Mary", "hostRating": 4.99, "hostYears": 4.5,
"occupancy30": 0.367, "occupancy90": 0.311, "occupancy365": 0.269,
"estRevenue30": 3018, "estRevenue90": 7681, "revPar30": 100.59,
"minNights": 2, "nextAvailableDate": "2026-09-13", "enriched": true
}

Default input (Austin, 54 listings, 30 enriched) costs about $0.28 and runs in under a minute.

Pricing

EventPrice
Listing (search data)$0.004 ($4 / 1,000)
Listing enriched (calendar + details)$0.006 ($6 / 1,000) — replaces the listing fee for that row
Actor start$0.001

Compute is included. Duplicates across pages/locations, listings that fail to parse and the market-summary row are never charged. A failed enrichment falls back to the plain listing fee.

Schedule it

Markets move weekly. In Apify Console open the Actor → Schedules → e.g. every Monday 06:00 with your locations, then connect the dataset to Google Sheets, Airtable, Slack or a webhook via Integrations. Compare MARKET_SUMMARY records week over week to spot price drops and occupancy shifts before your competitors do.

Use it from code or AI agents (MCP)

curl -X POST "https://api.apify.com/v2/acts/tactful_anvil~airbnb-market-intel-scraper/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"location":"Canggu, Bali","roomType":"entire_home","minBedrooms":2,"maxListings":90,"maxEnrich":90,"currency":"USD"}'

Works out of the box with the Apify MCP server (https://mcp.apify.com) — add this Actor to your Claude, Cursor, ChatGPT or custom agent and ask "compare Airbnb occupancy and ADR for 2-bedroom homes in Austin vs Nashville". Python: ApifyClient(token).actor("tactful_anvil/airbnb-market-intel-scraper").call(run_input={...}).

Why this Actor

  • Market intelligence, not just listings — occupancy, revenue estimate and RevPAR per listing plus a market roll-up; competitors stop at price and rating.
  • HTTP-only & fast — ~1 s per page, ~0.7 s per enriched listing, no browser, no proxies to pay for.
  • Fail-loud — if Airbnb changes its layout the run fails with a clear message instead of "succeeding" with 0 rows.
  • Fair pricing — flat per-result fees, nothing charged for duplicates, failures or the summary.

Found this useful? Bookmark & review

A bookmark or a short review on this page helps other hosts and investors find it — and tells me which fields to add next (reviews text, amenities, price history?). Issues tab is open.

Changelog

  • 0.0.4 (13 Sep 2026)bedrooms fill: Airbnb search cards sometimes omit the bedroom line (≈10–20 % of cards, mostly studios). When the listing name says “studio” the row now gets bedrooms: 0 instead of null; other cards without the line stay null until the room page fills it (fetchDetails). No other field changed.
  • 0.0.3 (8 Sep 2026) — billing hardening: a charging hiccup can no longer abort a run that already returned listings (rows are delivered either way).
  • 0.0.3 (8 Sep 2026) — party details (children, infants, pets), minBeds / minBathrooms, quality post-filters minRating / minReviews / guestFavoriteOnly (never charged when dropped). No existing field changed.
  • 0.1 (6 Sep 2026) — launch: search pagination (15 pages), room details, 12-month calendar KPIs, market-summary row, multi-location, pasted search URLs.