Airbnb Listing Scraper — Amenities, Host & Reviews avatar

Airbnb Listing Scraper — Amenities, Host & Reviews

Pricing

from $5.10 / 1,000 results

Go to Apify Store
Airbnb Listing Scraper — Amenities, Host & Reviews

Airbnb Listing Scraper — Amenities, Host & Reviews

Get everything on an Airbnb listing page. Paste one room link or a whole list and each stay comes back with its full description, the amenity list marking what it does and does not have, the host and their superhost status, exact coordinates, and review scores split by category.

Pricing

from $5.10 / 1,000 results

Rating

0.0

(0)

Developer

The Netaji

The Netaji

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Share

Airbnb Listing Scraper

The Actor resolves an Airbnb stay to its full record: the host's description, the amenity list with availability marked on each entry, the host's identity and standing, exact coordinates, and review scores broken out by category. A stay that no longer exists is skipped with a warning rather than returned as an empty record.

Accepted input

stay_ids is required and takes one or more stays. Room page links and bare numeric stay IDs are both accepted, and the two may be mixed in one list. A link is reduced to its /rooms/<id> segment, so the tracking query string Airbnb appends to shared links can be left in place.

Each stay is fetched separately, because each is its own page.

{
"stay_ids": [
"https://www.airbnb.com/rooms/4518031",
"1348596009084608060"
]
}

Only the /rooms/ identifier resolves. Airbnb search results also carry a propertyId on some stays, which is a number of the same shape and is not interchangeable; see Why an ID can return nothing below.

Response fields

Every record carries id, url, name, description, property_type, space_type, person_capacity, latitude, longitude, overview, amenities, highlights, host, host_name, host_is_superhost, rating, reviews, rating_categories, and stay_detail.

amenities lists every amenity Airbnb displays, each with an available flag. Entries marked false are amenities the stay explicitly does not have; Airbnb ships those in the same list as the ones it does, which is how the struck-through entries are rendered on the page. Dropping the flag would turn an absent amenity into a present one, so it is preserved.

rating_categories holds the per-category scores — cleanliness, accuracy, checkin, communication, location, and value — as numbers. rating remains the overall score. A stay without reviews returns null for all of these rather than 0.

host carries the host's name, is_superhost, is_verified, profile_picture, reviews, rating, years_hosting, response_rate, and response_time. host_name and host_is_superhost are lifted to the top level for spreadsheet use. reviews and years_hosting are returned as numbers; Airbnb sends several of these as strings, and they are converted so that one field does not change type between records.

stay_detail holds the complete record for anything not flattened into a column of its own.

{
"id": "4518031",
"url": "https://www.airbnb.com/rooms/4518031",
"name": "4-6 Bed Mixed Dorm Bed in SF's Best Hostel",
"property_type": "BNB",
"space_type": "SHARED_ROOM",
"person_capacity": 5,
"overview": ["2 bunk beds", "10 shared bathrooms"],
"host_name": "Kevin",
"host_is_superhost": true,
"rating": 4.74,
"reviews": 635,
"rating_categories": {
"cleanliness": 4.71,
"location": 4.81,
"value": 4.51
}
}

Why an ID can return nothing

Airbnb does not answer an unknown stay ID with a 404. It returns an ordinary page, of ordinary size, whose payload is empty. Nothing about the response status distinguishes a removed listing from a live one.

The Actor treats that empty payload as the real answer it is: the stay is logged as not found and skipped, and no record is written. It is not reported as an error, because a listing being gone is a legitimate outcome rather than a failure of the run.

The most common cause is a propertyId used in place of a stay ID. Both appear on Airbnb search results, both are long numbers, and only the stay ID resolves — a propertyId requested against /rooms/ produces exactly this empty page. The id field returned by the Airbnb Search Scraper is always the correct one.

Behaviour on partial results

A list input is processed to the end regardless of individual failures. A stay that cannot be fetched, whether removed or erroring upstream, is logged and skipped while the remainder continue, so one dead link in a list of fifty does not cost the other forty-nine.

Records are therefore not guaranteed to match the input list one for one. Matching on the returned id is reliable; matching on position is not.

The Airbnb Search Scraper finds stays by destination when no IDs are held, with dates and guest counts applied, and can attach this same detail to every result in one run through its enrichStayDetails option.