Airbnb Scraper & Market Monitor avatar

Airbnb Scraper & Market Monitor

Pricing

$2.00 / 1,000 listing scrapeds

Go to Apify Store
Airbnb Scraper & Market Monitor

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

Scrape Sage

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 hours ago

Last modified

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 scrapersThis actor
Coveragesearch OR detail OR reviews, often split across separate actorssearch + property detail + availability calendar + reviews in one run
Result depthcapped at Airbnb's ~270 results per searchautomatic price-band splitting (plus optional map subdivision) to go beyond the cap
Change trackingone-off snapshots onlybuilt-in incremental monitoring of new / price / availability / delisted listings
Proxy strategyresidential-only (expensive) or fragile datacenter-onlydatacenter-first with automatic residential fallback on blocks
Cost fairnesscharged for empty / unavailable resultsempty, unavailable, delisted, and zero-result outcomes are reported as success, not charged
Privacyscrapes host/reviewer personal profilespublic 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

  1. Sign up for Apify — the free plan is enough to try this actor.
  2. Open the Airbnb Scraper & Market Monitor, fill in the inputs you need, and click Start.
  3. Watch results stream into the dataset table as each record is parsed.
  4. 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 of skipDetailPages.
  • checkIn / checkOutYYYY-MM-DD dates 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 (default USD; 20 options including EUR, GBP, SGD, JPY).
  • locale — language/locale for content (default en).
  • 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-English reason — 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 opaque reviewerId only — 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 — new listings, priceChanged (old → new price and delta), availabilityChanged, and delisted records for listings seen before but now absent.
  • Toggle exactly which changes you want with trackPriceChanges, trackAvailabilityChanges, and detectDelistings.

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:

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:

Tips

  • Leave detail and reviews on for the richest data, but flip skipDetailPages: true (and scrapeReviews: false) for a fast, cheap survey of a whole city in search-card form.
  • Set checkIn/checkOut to get accurate dated pricing, the isAvailable flag, and a meaningful availability calendar; an undated search returns generic prices.
  • To exceed Airbnb's ~270-result-per-search cap, raise maxListings and let price-band splitting work; for very dense cities also enable enableMapSplit.
  • For monitoring, keep the same monitorKey across 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 maxConcurrency conservative (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.