Airbnb Scraper
Pricing
from $3.50 / 1,000 results
Airbnb Scraper
Scrape Airbnb listings via location search or direct URLs. Three modes: search-fast (cards only), search-full (full details), urls (specific listings). HTTP-only, no browsers.
Pricing
from $3.50 / 1,000 results
Rating
0.0
(0)
Developer
Blynx
Maintained by CommunityActor stats
0
Bookmarked
5
Total users
2
Monthly active users
11 days ago
Last modified
Categories
Share
Single Apify actor that combines three search modes for Airbnb listings:
search-fast— fast scrape of listing cards from/api/v3/StaysSearch(price, rating, basic facts; no detail page hit).search-full—search-fast+ full listing details merged in (StaysPdpSectionsper listing).urls— full details for an explicit list ofhttps://www.airbnb.com/rooms/<id>URLs.
HTTP-only — no Playwright/Selenium/Puppeteer/nodriver in the production image. The actor talks to Airbnb's internal Niobe GraphQL persisted-query endpoint directly through curl_cffi(impersonate="chrome") so TLS/HTTP-2 fingerprints look like real Chrome.
Modes
| Mode | Inputs | Output | Speed | Cost |
|---|---|---|---|---|
search-fast | locationQueries[] | cards only | fastest | cheapest |
search-full | locationQueries[] | cards + listing details | medium | per listing |
urls | startUrls[] | listing details | medium | per listing |
If mode is omitted, it's auto-detected: startUrls present → urls, else search-fast.
Quick start (Apify Console)
Default prefill runs out of the box and is sized to satisfy Apify's quality test:
{"mode": "search-fast","locationQueries": ["Prague"],"maxItemsPerQuery": 5,"currency": "USD","locale": "en"}
Example: search-fast
{"mode": "search-fast","locationQueries": ["Prague", "Berlin"],"checkIn": "2026-06-01","checkOut": "2026-06-07","adults": 2,"minPrice": 50,"maxPrice": 250,"roomType": "Entire home/apt","maxItemsPerQuery": 100,"currency": "USD","locale": "en"}
Returns one item per listing with: id, url, name, coordinates, rating, bedrooms/beds/bathrooms, price (for the requested dates, including original price and discounts), images, badges.
Example: search-full
{"mode": "search-full","locationQueries": ["Prague"],"checkIn": "2026-06-01","checkOut": "2026-06-07","adults": 2,"maxItemsPerQuery": 30,"includeReviews": true,"includeCalendar": true,"currency": "USD","locale": "en"}
Same as search-fast plus from the listing detail: propertyType, host (Superhost status, years hosting, rating count, profile photo, cohosts), amenities (categorised), highlights, description, sleepingArrangement, houseRules, safety, full image set, and optionally reviews and availabilityCalendar.
Example: urls
{"mode": "urls","startUrls": [{ "url": "https://www.airbnb.com/rooms/53997462" },{ "url": "https://www.airbnb.com/rooms/20277576?adults=2&check_in=2026-06-01&check_out=2026-06-07" }],"adults": 2,"checkIn": "2026-06-01","checkOut": "2026-06-07","includeCalendar": true,"currency": "USD","locale": "en"}
Output schema
Every item contains (null keys are dropped):
{"id": "53997462","url": "https://www.airbnb.com/rooms/53997462","name": "Cozy apartment at historical center","propertyType": "Entire condo", // search-full / urls only"roomType": "Entire home/apt", // search-full / urls only"personCapacity": 2, // search-full / urls only"bedrooms": 1, "beds": 2, "bathrooms": 1, // from search card"coordinates": { "lat": 40.6298, "lng": 22.9497 },"neighborhood": "Thessaloniki, Greece", // search-full / urls only"rating": {"value": 4.95,"reviewsCount": 65,"categories": { // search-full / urls only"accuracy": 4.91, "checkin": 4.97, "cleanliness": 4.94,"communication": 5.0, "location": 4.98, "value": 4.95, "overall": 4.95}},"images": [{ "id": "...", "url": "https://a0.muscache.com/..." }],"imageCount": 46, // search-full / urls only"price": {"currency": "USD","displayPrice": "$954","originalPrice": "$1,400","qualifier": "total","breakdown": { /* full Airbnb price breakdown */ }},"badges": ["Superhost", "Guest favorite"],"amenities": [{ "category": "Bathroom", "items": [...] }], // search-full / urls"highlights": [{ "type": "...", "headline": "...", "body": "..." }],"description": "...", // search-full / urls"descriptionLanguage": "en","sleepingArrangement": [{ "title": "Bedroom", "subtitle": "1 queen bed" }],"houseRules": ["Check-in after 3:00 PM", "Checkout before 11:00 AM"],"safety": ["Carbon monoxide alarm", "Smoke alarm"],"host": {"name": "Alexia", "isSuperhost": true, "ratingCount": 65,"ratingAverage": 4.95, "yearsHosting": 4, "monthsHosting": 4,"profilePictureUrl": "...", "cohosts": [...]},"reviews": { // only when includeReviews=true"total": 65,"fetched": 50,"reviews": [{ "id": "...", "rating": 5, "comments": "...", "createdAt": "...", "reviewer": {...} }],"tags": [...]},"availabilityCalendar": { // only when includeCalendar=true"constantMinNights": 2,"months": [{ "month": 6, "year": 2026, "days": [{ "date": "2026-06-01", "available": false, ... }] }]},"locale": "en","currency": "USD","sourceUrl": "https://www.airbnb.com/rooms/53997462"}
Pass "rawOutput": true to embed the raw GraphQL responses under _raw.
Notes & limits
- Currency is restricted to
USDandEUR. Anything else falls back toUSD. Rubles aren't supported on purpose — Airbnb left the Russian market in 2022. - Search ceiling is 270 listings per query (Airbnb returns at most 15 pages of 18). Use multiple
locationQueriesto scrape more. - Empty input is handled gracefully: the actor exits with code 1 and a readable status message instead of a stack trace.
- Proxy: The default is
{ "useApifyProxy": true }(Apify picks an available group automatically). If your plan has DATACENTER access, setapifyProxyGroups: ["DATACENTER"]for the cheapest path -- it works fine for Airbnb becausecurl_cffi(impersonate="chrome")handles TLS fingerprinting. Otherwise use["RESIDENTIAL"].
Throughput & maxConcurrency
maxConcurrency is a global cap on parallel HTTP requests to Airbnb -- every operation (search, listing details, calendar, reviews, BookIt) shares the same budget. Every listing in search-full fans out into 1-4 HTTP calls depending on which enrich flags are on, and the global semaphore makes sure they don't all burst at once.
Measured on a clean machine with no proxy, hitting the live Airbnb API, with search-full + includeReviews + includeCalendar (3-4 requests per listing) and 25 listings per query:
| maxConcurrency | items/sec | notes |
|---|---|---|
| 3 | ~1.0 | safe even for fragile residential proxies |
| 5 | ~1.5 | good balance for typical residential plans |
| 10 | ~2.6 | comfortable for datacenter proxies |
| 20 | ~3.7 | aggressive; datacenter / no-proxy territory |
| 30 | ~4.4 | maxed out -- Airbnb's own latency dominates |
| 50 | ~4.9 | no extra gain beyond ~30 |
Picking the right value
| Your proxy | Recommended maxConcurrency |
|---|---|
No proxy (useApifyProxy: false) | 20-30 |
| Apify DATACENTER | 10-20 |
| Apify RESIDENTIAL | 3-5 |
If the log starts spamming network/proxy error (ProxyError / Timeout) or transient status=503 -- halve maxConcurrency and rerun. The actor has three independent retry budgets (proxy_failures, captcha_failures, attempt), so transient errors don't lose listings; they just slow the run down.
Expected wall time for a full run
A full 270-listing search-full + reviews + calendar query is ~810-1080 HTTP calls. At measured rates:
- DATACENTER,
maxConcurrency=15: ~2 min - RESIDENTIAL,
maxConcurrency=5: ~10-15 min - No proxy,
maxConcurrency=30: ~1 min (but the IP gets hot fast)
Tech
apify >= 3.3, < 4SDK,crawlee >= 1.5, < 2curl_cffi >= 0.7.0— Chrome TLS/HTTP-2 fingerprintingpydantic >= 2.7— input validation- Default container: 512 MB RAM (HTTP-only — no browser needed)