Airbnb Reviews Scraper — Ratings, Dates & Host Replies avatar

Airbnb Reviews Scraper — Ratings, Dates & Host Replies

Pricing

from $0.68 / 1,000 results

Go to Apify Store
Airbnb Reviews Scraper — Ratings, Dates & Host Replies

Airbnb Reviews Scraper — Ratings, Dates & Host Replies

Export every review on an Airbnb stay. Paste one room link or a list and each review comes back with its full text, star rating, the reviewer's name and country, the host's reply, and the exact date it was posted — not the '3 days ago' the page shows.

Pricing

from $0.68 / 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 Reviews Scraper

The Actor exports the guest reviews on an Airbnb stay, one row per review: the full text as written, the star rating, the reviewer's first name and stated location, the host's public reply, and the exact date and time the review was posted. 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.

maxReviews caps how many reviews are saved per stay, up to 500, and defaults to 100. Reviews come back newest first, so a smaller number returns the most recent ones rather than an arbitrary slice. Set it to 0 for as many as the Actor will fetch.

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

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 a stay can return nothing below.

Response fields

Every row carries stay_id, stay_url, review_id, review_text, review_rating, review_date, review_date_label, review_language, review_translated, review_highlight, reviewer_name, reviewer_location, reviewer_tenure, reviewer_image, host_reply, host_reply_date, review_images, stay_reviews_total, and review.

review_date is an absolute UTC timestamp. This is the field the listing page itself does not give you: it renders relative dates — "3 days ago", "last week" — which are meaningless the moment a dataset is saved and cannot be sorted, filtered, or compared across runs. Airbnb's own relative string is still returned as review_date_label for anyone who wants the page's wording.

review_text is the review in the language the guest wrote it, with review_language giving that language as a two-letter code. review_translated holds Airbnb's translation only when there is one that actually differs from the original. Airbnb ships the same text under several fields and they are frequently identical strings, so a translation that matches the original is reported as empty rather than duplicated into a second column.

reviewer_location and reviewer_tenure are two columns from one source. Airbnb shows a single line beneath each reviewer's name, and it holds either where that guest lives or how long they have been a member — "Lima, Peru" and "1 year on Airbnb" come through the same field. Across 200 reviewers on two listings it was an exact even split, so they are separated here: whichever applies to a given review is filled in and the other is empty. A reviewer_location column fed straight from Airbnb would otherwise be half membership ages, which breaks any grouping or filtering done on it.

host_reply is the host's public response, kept verbatim — including any HTML the host's formatting produced, because stripping it would silently run paragraphs together. host_reply_date is relative, as Airbnb gives no absolute timestamp for replies.

stay_reviews_total is the stay's true review count, which is usually far larger than the number of rows saved. It is repeated on every row so a capped run still records what it left behind.

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

{
"stay_id": "4518031",
"stay_url": "https://www.airbnb.com/rooms/4518031",
"review_id": "1749563023499856820",
"review_rating": 5,
"review_date": "2026-08-10T22:29:25Z",
"review_date_label": "3 days ago",
"review_language": "es",
"review_highlight": "Stayed a few nights",
"reviewer_name": "Gonzalo",
"reviewer_location": "Lima, Peru",
"stay_reviews_total": 635
}

Why a stay can return nothing

Airbnb does not answer an unknown stay ID with a 404. It returns an ordinary response whose payload is empty, and nothing about the status distinguishes a removed listing from a live one. A stay that has been delisted behaves the same way.

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

A stay that exists but has never been reviewed is different again, and is logged as such — it produces no rows because there is nothing to write, not because anything went wrong.

The most common cause of an unexpected empty result 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. 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.

Rows are therefore not guaranteed to cover every stay in the input list. Matching on the returned stay_id is reliable; matching on position is not.

Reviews are fetched fifty at a time, so a maxReviews of 500 is ten requests per stay and takes proportionally longer than the default 100.

The Airbnb Search Scraper finds stays by destination when no IDs are held, and its id output feeds directly into this Actor's stay_ids.

The Airbnb Listing Scraper returns the stay itself — description, amenities, host, and the review scores broken out by category. Those per-category scores are the aggregate; this Actor returns the individual reviews behind them.

The Airbnb Availability Scraper returns the same stay's booking calendar night by night.