Airbnb Scraper - Listings, Calendar, Reviews & Analytics avatar

Airbnb Scraper - Listings, Calendar, Reviews & Analytics

Pricing

from $1.20 / 1,000 listing scrapeds

Go to Apify Store
Airbnb Scraper - Listings, Calendar, Reviews & Analytics

Airbnb Scraper - Listings, Calendar, Reviews & Analytics

Scrape Airbnb listings, details, amenities, 12-month availability calendar, reviews and derived occupancy/revenue analytics. Full-coverage mode beats Airbnb's ~240-per-search cap. No login. Honest pay-per-result billing.

Pricing

from $1.20 / 1,000 listing scrapeds

Rating

0.0

(0)

Developer

Prime Vision

Prime Vision

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

7 days ago

Last modified

Share

Airbnb Radar — Search, Calendar, Reviews & STR Analytics Scraper

Scrape Airbnb listings at scale — search results, full listing details, amenities, a 12-month availability calendar, guest reviews, and derived short-term-rental analytics (occupancy, ADR, estimated revenue) — all in one actor. No login, no cookies, honest pay-per-result billing.

Built for STR investors, revenue managers, market analysts, and data teams who need clean, structured Airbnb data and got tired of scrapers that break, cap at the first page, or bill for empty runs.

Why this scraper

Airbnb RadarTypical Airbnb scraper
Search + details + calendar + reviews✅ one actor❌ split across 3–4 actors
Beats Airbnb's ~240-results-per-search capfullCoverage map subdivision❌ "Airbnb-side limitation"
12-month availability calendar❌ or a separate paid actor
Occupancy / revenue analytics✅ derived from calendar
Direct room-URL and location search✅ same actor❌ needs a second actor for URLs
Reviews✅ inline❌ separate actor
Billing when nothing parses✅ run fails, you pay nothing❌ "Succeeded", 0 items, still billed
maxCostPerRun honored via API⚠️ often UI-only

Full coverage: get all the listings, not the first 240

Airbnb caps any single search at roughly 240–270 results. Most scrapers stop there — so a city with 478 listings returns 41. Turn on fullCoverage and the actor recursively splits the map into quadrants until every cell is under the cap, then de-duplicates. In testing this turned a 256-listing cap into 1,000+ unique listings from one location.

What you get per listing

{
"id": "54032513",
"url": "https://www.airbnb.com/rooms/54032513",
"name": "Warsaw Downtown — Luxurious 1BR with AC",
"coordinates": { "latitude": 52.2337, "longitude": 20.9875 },
"rating": 4.86,
"reviewsCount": 181,
"price": { "displayPrice": 313.0, "qualifier": "total", "displayPriceString": "$313" },
"maxGuestCapacity": 4,
"overviewItems": ["Entire rental unit", "2 beds", "1 bath"],
"description": "Welcome to our high-end furnished apartment ...",
"host": { "id": "78460722", "name": "OompH", "isSuperhost": true, "profileUrl": "..." },
"amenities": [{ "group": "Bathroom", "title": "Hair dryer", "available": true }],
"images": ["https://a0.muscache.com/im/pictures/..."],
"houseRules": ["Check-in after 4:00 PM", "Checkout before 11:00 AM", "4 guests maximum"],
"sleepingArrangement": [{ "title": "Bedroom", "subtitle": "1 queen bed" }],
// when scrapeCalendar = true
"calendar": [
{ "date": "2026-08-01", "available": true, "availableForCheckin": true, "minNights": 2 }
],
"analytics": {
"occupancyNext30d": 0.63, "occupancyNext90d": 0.55, "occupancyNext365d": 0.41,
"availableNights365": 215, "unavailableNights365": 150,
"minNightsMode": 2, "estimatedNightlyPrice": 78.25, "estimatedRevenueNext30d": 1486.75
},
// when scrapeReviews = true
"reviews": [{ "rating": 5, "date": "3 weeks ago", "comment": "...", "reviewerName": "Kal" }],
"reviewTags": [{ "name": "Location", "count": 83 }],
"scrapedAt": "2026-07-20T12:00:00Z"
}

Input

Search one or more places, paste search URLs, or feed listing URLs/IDs directly — mix all three in a single run.

{
"locationQueries": ["Lisbon, Portugal", "Porto, Portugal"],
"checkIn": "2026-09-05",
"checkOut": "2026-09-09",
"adults": 2,
"priceMax": 200,
"roomTypes": ["Entire home/apt"],
"maxResults": 500,
"fullCoverage": true,
"scrapeCalendar": true,
"calendarMonths": 12,
"scrapeReviews": true,
"maxReviewsPerListing": 50,
"currency": "USD",
"maxCostPerRun": 5.0
}

Scrape specific listings only:

{
"roomUrls": ["https://www.airbnb.com/rooms/54032513", "1234567890"],
"scrapeCalendar": true,
"scrapeReviews": true
}

Key options: locationQueries, startUrls (search URLs; room URLs pasted here are auto-detected), roomUrls, maxResults, fullCoverage, checkIn/checkOut, adults/children/infants/pets, priceMin/priceMax, minBedrooms/minBeds/minBathrooms, roomTypes, scrapeCalendar + calendarMonths, scrapeReviews + maxReviewsPerListing, currency, locale, maxCostPerRun, proxyConfiguration.

Pricing (pay per result)

You pay only for listings that were genuinely parsed. Calendar and reviews are optional premium add-ons charged only when you enable them.

EventWhat it covers
ListingOne full listing record (details + amenities)
Calendar12-month availability + occupancy analytics for a listing
ReviewsGuest reviews + review-tag counts for a listing

Zero-yield guarantee: if Airbnb changes its page structure and parsing collapses, the run fails and you are not billed for the empty output — instead of finishing "Succeeded" with an empty dataset.

Proxy & reliability

Airbnb blocks datacenter IPs, so the actor defaults to Apify Residential proxy (US) and uses browser-grade TLS fingerprinting. The public API key and GraphQL query hashes are refreshed at runtime, requests are paced and retried with automatic session rotation on rate-limits, and a nightly self-check catches structure changes early.

Notes

  • Scrapes only public, non-logged-in Airbnb data.
  • Unofficial — not affiliated with, endorsed by, or connected to Airbnb, Inc.
  • Prices/availability reflect what Airbnb shows anonymously for the given currency, locale and proxy region; pin currency + locale for reproducible output.
  • Occupancy counts a night as "unavailable" whether it is booked or host-blocked (Airbnb does not distinguish the two); revenue figures are labelled estimates.