Airbnb Market Intel Scraper
Pricing
from $2.50 / 1,000 results
Airbnb Market Intel Scraper
Extract Airbnb listings, prices, ratings, and occupancy data from any market. HTTP-only, no browser. Parse the SSR StaysSearch payload for prices, GPS coordinates, and optional 12-month calendars turned into occupancy and revenue estimates.
Pricing
from $2.50 / 1,000 results
Rating
0.0
(0)
Developer
Aurenic
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
5 days ago
Last modified
Categories
Share
Extract Airbnb listings, prices, ratings, and occupancy data from any market. HTTP-only, no browser. Parse the SSR StaysSearch payload for prices, GPS coordinates, and optional 12-month calendars turned into occupancy and revenue estimates.
What does Airbnb Market Intel Scraper do?
Scrape short-term rental market data from Airbnb in two modes:
- Search listings by market — pass a location (
Austin, Texas) and dates, get every listing with price (nightly + total + discount), rating, reviews, bedrooms, GPS coordinates, and badges. Walks the search pagination up to Airbnb's ~270-listing cap. - Listing detail — pass listing URLs, get the full 365-day availability calendar turned into occupancy 30/60/90, ADR, RevPAR, and estimated monthly/annual revenue — AirDNA-style metrics for STR investors and property managers.
HTTP-only, no browser. Airbnb ships its full search response as an inline <script id="data-deferred-state-0"> payload in the HTML — the same JSON the React app would fetch. The actor reads it directly, backed by residential proxy rotation to clear PerimeterX.
Output fields
Listing (search mode)
| Field | Description |
|---|---|
| listingId | Numeric Airbnb listing ID |
| url | Direct room URL |
| name | Listing name |
| roomType / propertyType | Room and property classification |
| rating / reviewsCount | Average rating and review count |
| priceTotal | Total price for the date range |
| priceNightly | Derived nightly rate |
| priceOriginalTotal / discountPercent | Discount info |
| latitude / longitude | GPS coordinates |
| bedrooms / beds / baths / maxGuests | Capacity |
| isSuperhost | Superhost flag |
| badges | Guest favorite, etc. |
| picture | Primary photo URL |
| searchLocation / checkIn / checkOut / nights | Search context |
Listing Intel (detail mode)
Everything above, plus:
| Field | Description |
|---|---|
| calendar | 365-day availability array |
| occupancy30 / occupancy60 / occupancy90 | % booked in each window |
| adr | Average daily rate |
| revpar | Revenue per available room |
| estimatedMonthlyRevenue | RevPAR × 30 |
| estimatedAnnualRevenue | RevPAR × 365 |
Who is it for?
- STR investors running AirDNA-style comps for acquisition underwriting
- Property managers benchmarking rates against the market
- Revenue managers tracking nightly pricing and occupancy trends
- Market researchers analyzing supply and pricing by neighborhood
- Real estate developers evaluating short-term rental yields
- Travel platforms enriching destination pages with market context
Pricing
$2.50 per 1,000 results. No subscription.
| Results | Cost |
|---|---|
| 100 | $0.25 |
| 1,000 | $2.50 |
| 10,000 | $25.00 |
How to use it
- Pick a Mode.
- For search: enter one or more Locations and set Check-in / Check-out.
- For detail: paste Listing URLs.
- Optionally set bedrooms, price, and property type filters.
- Click Start.
Output example
{"recordType": "listing","listingId": "1652957843916333450","url": "https://www.airbnb.com/rooms/1652957843916333450","name": "Stylish Pool Home 4BR Near Siesta Key","roomType": "Entire home/apt","rating": 5.0,"reviewsCount": 8,"priceTotal": 3190,"priceNightly": 638,"priceOriginalTotal": 3544,"discountPercent": 10,"latitude": 27.30754,"longitude": -82.52108,"bedrooms": 4,"beds": 4,"baths": 3,"maxGuests": 8,"isSuperhost": true,"badges": ["Guest favorite"],"searchLocation": "Siesta Key, Florida","checkIn": "2026-10-15","checkOut": "2026-10-20","nights": 5,"scrapedAt": "2026-09-26T12:00:00.000Z"}
Technical details
- Airbnb serializes its GraphQL cache as inline JSON in
<script id="data-deferred-state-0">. The search response lives atniobeClientData[*][1].data.presentation.staysSearch.results.searchResults. The actor parses that directly — no DOM scraping, no selectors that break on redesign. - Listing IDs are base64-encoded in
demandStayListing.id. Decoded →DemandStayListing:{id}→ numeric room ID. /api/v3/StaysSearchGraphQL is NOT called. Persisted-query hashes rotate and require device fingerprinting. The SSR script tag carries the same response, served inline. This is the entire moat.- Bot check detection — if the response lacks
data-deferred-state-0, Airbnb served a PerimeterX shell. The actor rotates the residential proxy session and retries up to 8 times. - Residential proxy is mandatory. Airbnb blocks datacenter IPs. The actor defaults to Apify RESIDENTIAL with US country.
- ~270-listing cap per search. Airbnb paginates via
items_offsetup to 252 (15 pages × 18). For larger markets, split by neighborhood or price band and dedupe bylistingId. - PDP data shape is different — the listing page uses
StaysPdpSections, notStaysSearch. The actor has a separate decoder for detail mode.
Known limits
- Prices are for the requested stay, not a nightly rate. The actor derives
priceNightlyby dividing by nights. This is an approximation — Airbnb applies length-of-stay discounts. - Currency depends on the proxy's IP country. The actor defaults to US residential, so prices are USD. Set
apifyProxyCountryin code for other markets. - ~270 listings max per search. Larger markets need subdivision. Map-bounded searches (
search_by_map=true) return a more precise count and allow quadtree splitting. includeCalendarrequires detail mode. Calendar parsing walks the PDP sections array. Some listings have the calendar behind a stub section; those returncalendarDays: 0.- Price and currency shift by IP location. The actor pins US residential; results are USD. Some non-US listings may return null prices.
- No reviews extraction. Reviews live on a separate XHR. Planned for a future release.
FAQ
Do I need an Airbnb account? No. Public data only.
Do I need a proxy? Yes. Airbnb blocks datacenter IPs with PerimeterX. Residential proxy is pre-configured.
Why no browser? Airbnb ships the full search payload inline in the HTML. Parsing that is faster and more reliable than running a headless browser.
How do I cover a whole city that has more than 270 listings? Split into narrower searches — by neighborhood, price band, or map bounding box — and dedupe by listingId across runs.
What are occupancy and RevPAR? Occupancy = % of nights booked in the window. ADR = average daily rate. RevPAR = ADR × occupancy. Estimated monthly revenue = RevPAR × 30. These are the standard STR investment metrics.
How do I export data? After a run, go to Storage → Export as JSON, CSV, Excel.
Support
Open an issue on the Actor's page for bugs or feature requests.