Airbnb Reviews Scraper avatar

Airbnb Reviews Scraper

Pricing

from $3.00 / 1,000 results

Go to Apify Store
Airbnb Reviews Scraper

Airbnb Reviews Scraper

Airbnb reviews scraper that pulls every guest review from any listing by URL or room ID, including ratings, comments, reviewer profiles, and host responses, so property managers and data teams can run competitive analysis and sentiment research across one or many properties.

Pricing

from $3.00 / 1,000 results

Rating

0.0

(0)

Developer

Kawsar

Kawsar

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

9 hours ago

Last modified

Share

Airbnb Reviews Scraper: Extract All Guest Reviews from Any Listing

Airbnb reviews scraper that pulls every guest review from any listing by URL or room ID. No browser needed — it calls Airbnb's directly and pages through the full review history, returning ratings, reviewer details, review text, translations, and trip-type tags as JSON records.

Pass in a single listing or a bulk list. The actor deduplicates the input and scrapes each one in sequence, pushing results to the dataset as it goes.

Use cases

  • Competitive research: pull reviews from competing properties and compare guest sentiment before adjusting pricing or amenities
  • Sentiment analysis: feed review text into NLP pipelines to find what guests praise or complain about most
  • Host monitoring: schedule the actor to track new reviews for your listing over time
  • Travel research: read the full review history before booking, not just the headline score
  • Dataset building: collect Airbnb reviews in bulk for training or benchmarking short-term rental models

Input

ParameterTypeDefaultDescription
roomUrlstringA single Airbnb listing URL or numeric room ID.
roomUrlsarrayList of Airbnb URLs or room IDs, one per line. Combined with roomUrl if both are provided.
maxReviewsinteger100Max reviews per listing. Set to 0 to collect all.
localestringenLocale for date labels and translated content (e.g. en, fr, de, zh).
currencystringUSDCurrency code for the request context. Does not affect review text.
timeoutSecsinteger300Maximum total run time in seconds.
requestTimeoutSecsinteger30Per-request timeout in seconds.
proxyConfigurationobjectDatacenter (Anywhere)Proxy type and location for requests. Optional.

Example input (single listing)

{
"roomUrl": "https://www.airbnb.com/rooms/1484114883099860649",
"maxReviews": 0,
"locale": "en",
"currency": "USD",
"proxyConfiguration": { "useApifyProxy": true }
}

Example input (multiple listings)

{
"roomUrls": [
"https://www.airbnb.com/rooms/1484114883099860649",
"https://www.airbnb.com/rooms/14926879",
"987654321"
],
"maxReviews": 50,
"proxyConfiguration": { "useApifyProxy": true }
}

What data does this actor extract?

One record per review is stored in the dataset. Each record contains:

{
"reviewId": "1646862738258373172",
"roomId": "1484114883099860649",
"rating": 5,
"comment": "The place was fantastic! Honestly for the price you get a prime location to all areas!",
"originalComment": null,
"commentLanguage": "en",
"needsTranslation": false,
"createdAt": "2026-03-22T05:42:17Z",
"localizedDate": "6 days ago",
"collectionTag": "WEEKEND TRIP",
"reviewerName": "Lester",
"reviewerId": "507561268",
"reviewerContextualId": "1498306238959795062",
"reviewerPictureUrl": "https://a0.muscache.com/im/pictures/user/...",
"reviewerProfilePath": "/users/profile/1498306238959795062",
"reviewerYearsOnAirbnb": "3 years on Airbnb",
"hostName": "Sourov",
"hostId": "599574226",
"response": null,
"scrapedAt": "2026-03-29T10:00:00.000000+00:00"
}
FieldTypeDescription
reviewIdstringUnique Airbnb review ID
roomIdstringListing ID the review belongs to
ratingintegerStar rating 1–5
commentstringReview text in English (translated if the original was in another language)
originalCommentstringSource text before translation, or null if the review was already in English
commentLanguagestringBCP-47 language code of the original (e.g. en, zh-CN, fr)
needsTranslationbooleanTrue when Airbnb translated the review
createdAtstringISO 8601 timestamp of submission
localizedDatestringDate label shown on Airbnb (e.g. "February 2026")
collectionTagstringTrip-type tag (e.g. WEEKEND TRIP) or null
reviewerNamestringReviewer's first name
reviewerIdstringReviewer's Airbnb user ID
reviewerContextualIdstringContextual ID used in Airbnb profile URLs
reviewerPictureUrlstringProfile picture URL
reviewerProfilePathstringRelative Airbnb profile path
reviewerYearsOnAirbnbstringTenure label (e.g. "3 years on Airbnb")
hostNamestringHost's first name
hostIdstringHost's Airbnb user ID
responsestringHost's reply to the review, or null
scrapedAtstringISO 8601 timestamp when the record was collected

How it works

  1. Extracts the numeric room ID from each URL or uses the ID directly
  2. Deduplicates the input list and processes each listing in sequence
  3. Encodes the room ID into Airbnb's base64 GraphQL listing identifier
  4. Calls Airbnb's StaysPdpReviewsQuery endpoint in batches of 24
  5. Uses the English translation when Airbnb has one, and keeps the original text alongside
  6. Stops when the cap is reached or there are no more reviews on the listing
  7. Pushes each review to the dataset in real time

Integrations

Connect Airbnb Reviews Scraper with other apps using Apify integrations. You can send results to Google Sheets, Slack, Airtable, or any webhook endpoint. Use webhooks to trigger downstream steps as soon as scraping finishes.

FAQ

Can it scrape all reviews, not just the first page? Yes. Set maxReviews to 0 and the actor pages through every available review on the listing.

Does it handle non-English reviews? Yes. When Airbnb has an English translation, comment contains it and originalComment holds the source text. commentLanguage and needsTranslation tell you whether a translation was applied.

What URL formats work? Any Airbnb listing URL works, including ones with query parameters like check_in or source_impression_id. You can also pass just the numeric room ID (e.g. 1484114883099860649).

Can I scrape multiple listings at once? Yes. Use the roomUrls field and enter one URL or ID per line. The actor scrapes each listing in sequence and stores all results in the same dataset, with roomId on every record so you can tell them apart.

Should I use a proxy? For runs under 200 reviews, Datacenter proxies work fine. For large scrapes or if you hit rate limits, switch to Residential proxies.