Airbnb Listings Scraper - Prices, Ratings & Hosts
Pricing
from $0.40 / 1,000 listings
Airbnb Listings Scraper - Prices, Ratings & Hosts
An Airbnb price only exists once you name dates and a guest count, so those are inputs here rather than filters. Listing ID, name, room type, price, rating, review count, host and direct URL in clean JSON. No Airbnb account, no API key. Built for short-let market research.
Pricing
from $0.40 / 1,000 listings
Rating
0.0
(0)
Developer
Dami's Studio
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
0
Monthly active users
2 days ago
Last modified
Categories
Share
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}
