Airbnb Listings Scraper - Prices, Ratings & Hosts avatar

Airbnb Listings Scraper - Prices, Ratings & Hosts

Pricing

from $0.40 / 1,000 listings

Go to Apify Store
Airbnb Listings Scraper - Prices, Ratings & Hosts

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

Dami's Studio

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

2 days ago

Last modified

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 listing result 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

FieldTypeDefaultNotes
locationsstring arraynoneCity, region, or destination strings, such as Toronto, Ontario, Canada. Up to five per run. Leave empty for an uncharged sample row.
checkInstringnoneOptional YYYY-MM-DD check-in date.
checkOutstringnoneOptional YYYY-MM-DD check-out date; must be after check-in when both are supplied.
adultsinteger2Adult guest count sent to the public search page, from 1 to 16.
maxItemsPerLocationinteger20Hard cap on genuine listing rows saved for each location, from 1 to 20.
deadlineSecsinteger90Hard 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:

CodeMeaning
BAD_INPUTDates supplied incorrectly — only one of check-in/check-out, or checkout on or before check-in.
NOT_FOUNDThe public search page returned 404 for that location.
BLOCKEDAirbnb returned 403/429, a captcha, or an access wall.
NETWORKThe request timed out or the connection failed.
TARGET_ERRORThe page loaded but the embedded listing payload was missing or in an unrecognised shape.
NO_RESULTSThe search resolved but contained no new genuine listings within the configured bounds.
DEADLINEThe 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
}