Airbnb Reviews Scraper
Pricing
from $3.00 / 1,000 results
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
Actor stats
0
Bookmarked
2
Total users
1
Monthly active users
9 hours ago
Last modified
Categories
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
| Parameter | Type | Default | Description |
|---|---|---|---|
roomUrl | string | — | A single Airbnb listing URL or numeric room ID. |
roomUrls | array | — | List of Airbnb URLs or room IDs, one per line. Combined with roomUrl if both are provided. |
maxReviews | integer | 100 | Max reviews per listing. Set to 0 to collect all. |
locale | string | en | Locale for date labels and translated content (e.g. en, fr, de, zh). |
currency | string | USD | Currency code for the request context. Does not affect review text. |
timeoutSecs | integer | 300 | Maximum total run time in seconds. |
requestTimeoutSecs | integer | 30 | Per-request timeout in seconds. |
proxyConfiguration | object | Datacenter (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"}
| Field | Type | Description |
|---|---|---|
reviewId | string | Unique Airbnb review ID |
roomId | string | Listing ID the review belongs to |
rating | integer | Star rating 1–5 |
comment | string | Review text in English (translated if the original was in another language) |
originalComment | string | Source text before translation, or null if the review was already in English |
commentLanguage | string | BCP-47 language code of the original (e.g. en, zh-CN, fr) |
needsTranslation | boolean | True when Airbnb translated the review |
createdAt | string | ISO 8601 timestamp of submission |
localizedDate | string | Date label shown on Airbnb (e.g. "February 2026") |
collectionTag | string | Trip-type tag (e.g. WEEKEND TRIP) or null |
reviewerName | string | Reviewer's first name |
reviewerId | string | Reviewer's Airbnb user ID |
reviewerContextualId | string | Contextual ID used in Airbnb profile URLs |
reviewerPictureUrl | string | Profile picture URL |
reviewerProfilePath | string | Relative Airbnb profile path |
reviewerYearsOnAirbnb | string | Tenure label (e.g. "3 years on Airbnb") |
hostName | string | Host's first name |
hostId | string | Host's Airbnb user ID |
response | string | Host's reply to the review, or null |
scrapedAt | string | ISO 8601 timestamp when the record was collected |
How it works
- Extracts the numeric room ID from each URL or uses the ID directly
- Deduplicates the input list and processes each listing in sequence
- Encodes the room ID into Airbnb's base64 GraphQL listing identifier
- Calls Airbnb's
StaysPdpReviewsQueryendpoint in batches of 24 - Uses the English translation when Airbnb has one, and keeps the original text alongside
- Stops when the cap is reached or there are no more reviews on the listing
- 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.