Airbnb Scraper & Market Monitor
Pricing
$2.00 / 1,000 listing scrapeds
Airbnb Scraper & Market Monitor
Reliable Airbnb scraper: location/URL search, property details, availability calendar (with prices), and reviews in one Actor — plus an incremental monitoring mode that tracks new listings, price changes, availability changes and delistings over time. Public listing & host-operational data only.
Pricing
$2.00 / 1,000 listing scrapeds
Rating
0.0
(0)
Developer
Scrape Sage
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 hours ago
Last modified
Categories
Share
Scrape Airbnb listings, prices, availability calendars, host operational data, and reviews by location, search URL, or direct room URL — then re-run in incremental monitoring mode to track new listings, price changes, availability changes, and delistings over time. Public listing and host-operational data only.
Why this Airbnb scraper?
| Typical Airbnb scrapers | This actor | |
|---|---|---|
| Coverage | search OR detail OR reviews, often split across separate actors | search + property detail + availability calendar + reviews in one run |
| Result depth | capped at Airbnb's ~270 results per search | automatic price-band splitting (plus optional map subdivision) to go beyond the cap |
| Change tracking | one-off snapshots only | built-in incremental monitoring of new / price / availability / delisted listings |
| Proxy strategy | residential-only (expensive) or fragile datacenter-only | datacenter-first with automatic residential fallback on blocks |
| Cost fairness | charged for empty / unavailable results | empty, unavailable, delisted, and zero-result outcomes are reported as success, not charged |
| Privacy | scrapes host/reviewer personal profiles | public listing and host-operational data only — no host or reviewer names, photos, or profiles |
Use cases
- Short-term-rental revenue management — pull nightly prices and the availability calendar across a market to benchmark your own listing and set competitive rates.
- STR investment research — measure supply, property mix, ratings, and Superhost density in a target city before buying.
- Market monitoring — schedule incremental runs to catch price moves, newly listed properties, and delistings the day they happen.
- Compliance and registration checks — collect the property registration / license number (e.g. an AL number) shown in regulated markets.
- Travel and accessibility analysis — gather amenities, accessibility features, house rules, and full photo galleries for filtered, structured comparison.
How to use
- Sign up for Apify — the free plan is enough to try this actor.
- Open the Airbnb Scraper & Market Monitor, fill in the inputs you need, and click Start.
- Watch results stream into the dataset table as each record is parsed.
- Export as JSON, CSV, Excel, XML, or RSS — or pull results programmatically via the Apify API.
Input
Provide at least one source: location queries, pre-filtered search URLs, or direct listing URLs. Out of the box the actor returns the richest data — detail pages are ON (skipDetailPages: false) and reviews are ON (scrapeReviews: true). Set skipDetailPages: true for a fast, cheap search-only run, and/or scrapeReviews: false to skip reviews.
{"locationQueries": ["Lisbon, Portugal"],"checkIn": "2026-07-01","checkOut": "2026-07-05","adults": 2,"currency": "EUR","calendarMonths": 2,"scrapeReviews": true,"maxReviewsPerListing": 50,"maxListings": 200,"proxyConfiguration": { "useApifyProxy": true }}
Core fields:
locationQueries— free-text locations to search, e.g."London","Lisbon, Portugal". Each becomes an Airbnb search.searchUrls— pre-filtered Airbnb search result URLs pasted from your browser after applying filters not exposed below (e.g. instant book, specific amenities).listingUrls— direct Airbnb property/room URLs (e.g.https://www.airbnb.com/rooms/12345678). A directly supplied listing URL is always fetched in full regardless ofskipDetailPages.checkIn/checkOut—YYYY-MM-DDdates that affect price and availability; leave empty for an undated search.adults/children/infants/pets— guest counts (default 1 adult).priceMin/priceMax/minBeds/minBedrooms/minBathrooms— search filters in the chosen currency / counts.propertyTypes— filter by room type:Entire home/apt,Private room,Shared room,Hotel room(unknown values are ignored).currency— currency for all prices (defaultUSD; 20 options including EUR, GBP, SGD, JPY).locale— language/locale for content (defaulten).skipDetailPages— OFF by default for full detail per listing; ON for fast search-card-only output.calendarMonths— months of future availability + nightly price to fetch per listing (0–12, default 0; each month is one extra request).scrapeReviews/maxReviewsPerListing— reviews are ON by default, capped at 50 per listing (set 0 for unlimited).maxListings— stop after this many unique listings across all sources (default 100; set 0 for unlimited).priceSplitCeiling/enableMapSplit— advanced controls for splitting past Airbnb's ~270-result search cap by price band and (optionally) map area.proxyConfiguration— defaults to datacenter proxies with automatic residential fallback on blocks; force residential by selecting the RESIDENTIAL group.maxConcurrency/maxRequestsPerMinute/maxRequestRetries— tuning knobs to stay polite and avoid blocks.
Output
Each listing is one dataset record (status ok). Fields appear only when present at the source or enabled by input — calendar requires calendarMonths > 0, isAvailable requires check-in/out dates, rating is omitted entirely when a listing has no reviews, and registrationNumber appears in regulated markets. Host data is public/operational only — never host name, photo, profile, or personal attributes.
{"id": "12345678","url": "https://www.airbnb.com/rooms/12345678","title": "Sunny Studio in Alfama","propertyType": "Entire rental unit","roomType": "Entire home/apt","personCapacity": 4,"minNights": 2,"registrationNumber": "AL/12345","coordinates": { "lat": 38.7139, "lng": -9.1334 },"location": "Lisbon, Portugal","pricing": {"price": { "value": 95, "currency": "EUR" },"priceLabel": "€95 per night"},"rating": { "guestSatisfaction": 4.92, "cleanliness": 4.95, "reviewsCount": 218 },"isGuestFavorite": true,"badges": ["Superhost", "Guest favorite"],"host": {"hostId": "host-77","isSuperhost": true,"isVerified": true,"ratingAverage": 4.9,"ratingCount": 540,"timeAsHost": { "years": 6, "months": 4 },"responseRate": 100,"responseTime": "within an hour"},"amenities": [{ "title": "Bathroom", "values": [{ "title": "Hair dryer" }] }],"images": [{ "url": "https://.../1.jpg", "caption": "Living room", "orientation": "LANDSCAPE" }],"calendar": [{ "date": "2026-07-01", "available": true, "minNights": 2, "price": { "value": 110 } }],"reviews": [{ "reviewId": "rev-1", "text": "Amazing stay!", "rating": 5, "createdAtISO": "2026-05-01T10:00:00.000Z", "language": "en", "reviewerId": "user-501" }],"isAvailable": true,"sourceType": "locationQuery","sourceQuery": "Lisbon, Portugal","fetchTier": "ssr-json","status": "ok","scrapedAt": "2026-06-14T09:00:00.000Z"}
Notes:
- Empty results are reported as success, not errors. When a listing isn't bookable for the dates, is delisted, or a search genuinely returns nothing, the record carries
status: "empty"with a plain-Englishreason— these are not charged. - No personal data. Host records hold only operational signals (opaque
hostId, Superhost/verified flags, rating average/count, time as host, response rate/time). Reviews keep text, rating, date, language, and an opaquereviewerIdonly — never a reviewer name or photo. - A final non-charged run-summary record (
recordType: "runSummary") is emitted at the end with run statistics. changeType(new,priceChanged,availabilityChanged,delisted,unchanged) is set only in incremental monitoring runs.
Monitoring — get only new listings
Turn on incrementalMode and set a stable monitorKey (e.g. "lisbon-2br") to track a market over time. State is persisted in a named Key-Value store across runs:
- The first run captures a baseline of the whole market.
- Later runs emit only changes —
newlistings,priceChanged(old → new price and delta),availabilityChanged, anddelistedrecords for listings seen before but now absent. - Toggle exactly which changes you want with
trackPriceChanges,trackAvailabilityChanges, anddetectDelistings.
A monitoring run that finds no changes costs about the actor-start only. Pair it with Apify Schedules to run hourly or daily and keep your market view fresh.
{"locationQueries": ["Lisbon, Portugal"],"checkIn": "2026-07-01","checkOut": "2026-07-05","calendarMonths": 1,"incrementalMode": true,"monitorKey": "lisbon-2br-summer","trackPriceChanges": true,"trackAvailabilityChanges": true,"detectDelistings": true}
Automate & schedule
Run this actor on autopilot and pull results into your own stack:
- Apify API — start runs, fetch datasets, and manage schedules over REST.
- apify-client for JavaScript and apify-client for Python — official SDKs.
- Schedules — run it on a cron to keep your data fresh.
- Webhooks — trigger downstream actions the moment a run finishes.
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'MY_APIFY_TOKEN' });const run = await client.actor('scrapesage/airbnb-scraper').call({locationQueries: ['Lisbon, Portugal'],checkIn: '2026-07-01',checkOut: '2026-07-05',adults: 2,currency: 'EUR',calendarMonths: 2,maxListings: 200,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(`Got ${items.length} records`);
Integrate with any app
Connect the dataset to 5,000+ apps — no code required:
- Make — multi-step automation scenarios.
- Zapier — push new records straight into your CRM or sheet.
- Slack — get notified when a run finds something new.
- Google Drive / Sheets — auto-export every run to a spreadsheet.
- Airbyte — pipe results into your data warehouse.
- GitHub — trigger runs from commits or releases.
Use with AI assistants (MCP)
The output is clean, LLM-ready JSON. Call this actor from Claude, ChatGPT, or any agent framework through the Apify MCP server — ask your assistant to "find available 2-bedroom Airbnbs in Lisbon for next month under €150 a night with their ratings and host response times" and let it run this scraper for you.
More scrapers from scrapesage
Need data from somewhere else? Try these:
- 99.co Property Scraper — Singapore property listings, prices & agent leads.
- EdgeProp Singapore Scraper — Singapore property & agent leads.
- SGCarMart Used Car Scraper — Singapore used-car prices, COE/OMV/ARF & dealer leads.
- Eventbrite Scraper — events plus organizer leads with contacts.
- Facebook Ad Library Scraper — Meta/Instagram competitor ad intelligence.
- Google Ads Transparency Scraper — see who's advertising what on Google.
- Telegram Scraper — channels, messages, media & search.
Tips
- Leave detail and reviews on for the richest data, but flip
skipDetailPages: true(andscrapeReviews: false) for a fast, cheap survey of a whole city in search-card form. - Set
checkIn/checkOutto get accurate dated pricing, theisAvailableflag, and a meaningful availability calendar; an undated search returns generic prices. - To exceed Airbnb's ~270-result-per-search cap, raise
maxListingsand let price-band splitting work; for very dense cities also enableenableMapSplit. - For monitoring, keep the same
monitorKeyacross runs so state carries over — changing it starts a fresh baseline. - Start on the default datacenter proxy (cheapest) and only force RESIDENTIAL if you see persistent blocks; keep
maxConcurrencyconservative (5–10).
FAQ
What data does this actor collect? Public Airbnb listing data: title, property/room type, pricing, availability calendar with nightly prices, ratings, amenities, accessibility features, house rules, photo galleries, registration/license numbers where shown, reviews, and host operational signals.
Does it collect host or reviewer personal information? No. It captures host-operational data only (opaque ID, Superhost/verified flags, ratings, time as host, response rate/time) and review text with an opaque reviewer ID — never names, photos, profiles, or personal attributes.
Can I get more than Airbnb's ~270 results per search? Yes. When a search hits the cap, the actor splits it by price band (and optionally by map area for dense cities) and dedupes by listing ID, so you can pull thousands.
Am I charged for empty or unavailable listings? No. Empty, unavailable, delisted, and zero-result outcomes are reported as successful, self-explaining records and are not charged; the final run-summary record is also free.
How do I export the data? Export any run as JSON, CSV, Excel, XML, or RSS from the dataset, or pull it programmatically via the Apify API and the JavaScript/Python clients.
Do I need a login or cookies? No. The actor works over public Airbnb endpoints with proxy rotation — no account, login, or cookies required.
Need help?
Open an issue on the actor's Issues tab, or visit the Apify help center. Feature requests are welcome — this actor is actively maintained.