Airbnb Scraper - Listings, Calendar, Reviews & Analytics
Pricing
from $1.20 / 1,000 listing scrapeds
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
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
7 days ago
Last modified
Categories
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 Radar | Typical Airbnb scraper | |
|---|---|---|
| Search + details + calendar + reviews | ✅ one actor | ❌ split across 3–4 actors |
| Beats Airbnb's ~240-results-per-search cap | ✅ fullCoverage 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.
| Event | What it covers |
|---|---|
| Listing | One full listing record (details + amenities) |
| Calendar | 12-month availability + occupancy analytics for a listing |
| Reviews | Guest 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+localefor 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.