Airbnb Listings Scraper
Scrape Airbnb search results by location, dates and guest count: listing ID, name, room type, price, rating, reviews and host. No account or API key.
How it works
- 1Open it on Apify
Hit Run on Apify — it opens the tool in the cloud, no install.
- 2Set the inputs
Adjust
locations,checkIn,checkOut(sensible defaults are pre-filled). - 3Click Run
The tool runs on Apify’s cloud and collects the data for you.
- 4Export the results
Download as JSON, CSV or Excel, or pipe straight into your app, Google Sheets, or an AI agent.
Pricing
Pay-per-event pricing: you are billed per result, not per subscription — a run that returns nothing costs nothing beyond the start fee. Billing is handled by Apify on your own account. These are the live Apify store prices, in effect since 2026-07-29, and they are what you are actually charged.
Inputs
| Field | What it does | Type |
|---|---|---|
locations | City, region, or destination strings for public Airbnb stays search. Leave empty for an uncharged sample row. | array |
checkIn | Optional YYYY-MM-DD check-in date. Use both dates to receive date-specific displayed prices. | string |
checkOut | Optional YYYY-MM-DD check-out date. Must be after check-in when both are supplied. | string |
adults | Number of adult guests sent to the public search page. | integer |
maxItemsPerLocation | Hard cap on genuine listing rows saved for each location. | integer |
deadlineSecs | Hard wall-clock budget for all locations. | integer |
What you get
A structured dataset — each result includes fields like:
listingIdnamepropertyTyperatingreviewCountpricecurrencylistingUrlExport every run as JSON, CSV or Excel, or send it to your app, a database, Google Sheets, or an AI agent.
Related tools in Travel, Hotels & Events
Other ready-to-run tools in the same category — all pay-per-use on the Apify cloud.
Google Hotels Scraper
Scrape Google Hotels by destination and dates: hotel name, nightly price, currency, rating, review count, provider and direct link.
Luma Events Scraper
Scrape lu.ma events by city, calendar or URL. Get event name, date with timezone, venue, host, ticket price, guest count and event link as JSON.
Booking.com Reviews Scraper
Extract public Booking.com guest reviews: rating, review title, positive and negative text, reviewer name and country.
Tripadvisor Reviews Scraper
Extract Tripadvisor reviews for hotels, restaurants and attractions: rating, full text, reviewer, hometown, trip type, owner response and review URL.
Where this tool sits
- Categories
- Travel, Hotels & Events Real Estate & Classifieds
- Platforms
- Airbnb
Airbnb Listings Scraper
Collect a bounded set of publicly displayed Airbnb search listings without login. The actor requests the public search page directly, follows Airbnb's ordinary country-domain handoff when present, and extracts the structured listing data returned in that page.
Pricing
$0.40 per 1,000 listings ($0.0004 each), with no run-start fee. Flat rate — no volume tiers, no plan gates — and you are charged only for listings actually returned.
The listing event is charged once per genuine row, and only after that row has been written to the dataset. Samples, diagnostics, duplicates, empty results, and blocked responses are never charged, so a run that finds nothing costs nothing at all.
Behavior
- Direct HTTP is always tried first. It does not silently use a proxy.
- Direct HTTP is the only transport. A blocked page returns an uncharged diagnostic and never starts a residential proxy.
- Each location is capped at 20 output rows; at most five locations may be supplied per run.
- The overall wall-clock deadline is capped at 180 seconds.
- A genuine listing is written before its
listingresult event is charged. Samples, diagnostics, duplicates, empty results, and blocked responses are not charged. - Empty input returns one explicit sample row and makes no network request or charge.
Input
| Field | Type | Default | Notes |
|---|---|---|---|
locations | string array | none | City, region, or destination strings, such as Toronto, Ontario, Canada. Up to five per run. Leave empty for an uncharged sample row. |
checkIn | string | none | Optional YYYY-MM-DD check-in date. |
checkOut | string | none | Optional YYYY-MM-DD check-out date; must be after check-in when both are supplied. |
adults | integer | 2 | Adult guest count sent to the public search page, from 1 to 16. |
maxItemsPerLocation | integer | 20 | Hard cap on genuine listing rows saved for each location, from 1 to 20. |
deadlineSecs | integer | 90 | Hard wall-clock budget for all locations, from 15 to 180 seconds. |
checkIn and checkOut must be supplied together — one without the other is rejected as BAD_INPUT rather than silently ignored. Supplying dates lets Airbnb return date-specific displayed prices instead of generic nightly rates.
Output
Each genuine row is ok: true, recordType: "listing", and carries:
listingId, listingUrl, name, propertyType, rating, reviewCount, price, priceAmount (the numeric value parsed out of the displayed string), currency, priceQualifier (for example total or night), priceAccessibilityLabel, badges[] (such as Guest favourite), spaceDetails[] (the short bed/guest/bath lines Airbnb prints under the title), latitude, longitude, photoUrls[] (up to five public image URLs), plus the search inputs that produced the row — searchLocation, checkIn, checkOut, adults — and source.
Prices are displayed search-page values, not a booking quote or availability guarantee. Fields Airbnb does not publish for a given listing come back as null or an empty array rather than being dropped.
Diagnostics
Problems exit successfully as an uncharged row with ok: false, recordType: "diagnostic", and a code:
| Code | Meaning |
|---|---|
BAD_INPUT | Dates supplied incorrectly — only one of check-in/check-out, or checkout on or before check-in. |
NOT_FOUND | The public search page returned 404 for that location. |
BLOCKED | Airbnb returned 403/429, a captcha, or an access wall. |
NETWORK | The request timed out or the connection failed. |
TARGET_ERROR | The page loaded but the embedded listing payload was missing or in an unrecognised shape. |
NO_RESULTS | The search resolved but contained no new genuine listings within the configured bounds. |
DEADLINE | The wall-clock budget ran out before this location was reached. |
One failing location does not stop the others; each is reported on its own row.
Limitations
Airbnb can vary, block, or remove public search data by locale and request context. This actor does not log in, bypass CAPTCHA, collect private data, or promise availability. It returns an uncharged diagnostic when public data is unavailable instead of inventing listings or billing empty output.
Example
{
"locations": ["Toronto, Ontario, Canada"],
"checkIn": "2026-08-10",
"checkOut": "2026-08-12",
"adults": 2,
"maxItemsPerLocation": 20,
"deadlineSecs": 90
}