Airbnb Reviews Scraper
Pricing
from $1.00 / 1,000 results
Airbnb Reviews Scraper
Pull every guest review for one or more Airbnb listings - full text, star rating, author first name & avatar, trip date, host response. Built for reputation analytics, sentiment scoring, and AI/RAG corpora.
Pricing
from $1.00 / 1,000 results
Rating
0.0
(0)
Developer
Xtractoo
Maintained by CommunityActor stats
0
Bookmarked
3
Total users
1
Monthly active users
5 days ago
Last modified
Categories
Share
Pull every guest review for an Airbnb listing — full review text, star rating, author first name and avatar, trip date, host response — into clean structured JSON.
Whether you are a vacation-rental host benchmarking competitor properties, a sentiment-analysis team building a reputation dashboard, a content site publishing "what guests are saying," or an AI team assembling a hospitality RAG corpus, this actor gives you the reviews you need without managing scrapers, browsers, or CAPTCHAs.
What you can do with it
- Reputation analytics — monitor your listing's review velocity, rating distribution, and sentiment trends over time.
- Competitive benchmarking — see exactly what guests praise and complain about at neighbouring properties.
- Host-response audits — measure how often (and how quickly) hosts respond, and what they say.
- AI / RAG corpora — feed thousands of real travel reviews into a hospitality chatbot, recommendation model, or sentiment classifier.
- Travel content sites — surface "top quotes" pulled from real guests on your own pages.
- Fraud signals — flag listings with suspicious review patterns (velocity spikes, duplicate text, geographic clustering).
Why use this actor
- No Airbnb account required — runs on public data anonymous visitors can read.
- No CAPTCHAs, no browsers — point it at one or more listings and it returns the reviews.
- Up to thousands of reviews per listing — pagination is automatic.
- Original language preserved — both the original review text and Airbnb's localized translation when present.
- Stable JSON schema — fixed fields ready to feed straight into your warehouse, spreadsheet, or notebook.
How it works
- You give the actor a list of Airbnb listing URLs (or numeric room IDs) and how many reviews to pull per listing.
- For each listing the actor walks the public reviews endpoint Airbnb's own site uses, page by page, in your chosen sort order.
- Each review is normalized to one row in the dataset, ready for download as JSON, CSV, Excel, or XML.
Pagination, retries, and proxy rotation are handled automatically — you only need to provide listings and a max-review cap.
Input
{"listing_urls": ["https://www.airbnb.com/rooms/983207483398233150"],"max_reviews_per_listing": 100,"sort": "MOST_RECENT","locale": "en","proxy": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"]}}
| Field | Type | Required | Description |
|---|---|---|---|
listing_urls | string[] | one of urls/ids | Full Airbnb listing URLs (e.g. https://www.airbnb.com/rooms/12345678) |
listing_ids | string[] | one of urls/ids | Numeric Airbnb room IDs |
max_reviews_per_listing | integer | no | Hard cap per listing (default 100, max 5000) |
sort | string | no | MOST_RECENT (default), BEST_QUALITY, RATING_DESC, RATING_ASC |
locale | string | no | Two-letter language tag (default en) — Airbnb may auto-translate; the original language is preserved |
max_concurrency | integer | no | Parallel listings (1–4, default 1) |
proxy | object | no | Apify proxy configuration; residential recommended |
Sample output
One record per review. Real shape of a single record:
{"id": "9876543210","listing_id": "983207483398233150","url": "https://www.airbnb.com/rooms/983207483398233150","rating": 5,"language": "en","comments": "Loved every minute of our stay. The hot tub at sunset is unforgettable. Anna was an excellent host — quick to respond, full of local recommendations.","localized_review": null,"localized_response": null,"created_at": "2025-09-18T03:14:12Z","localized_date": "September 2025","localized_short_date": "Sep 2025","trip_duration": "Stayed about a week","highlighted_review_sentence": ["Anna was an excellent host"],"reviewer_id": "147015926","reviewer_name": "Marta","reviewer_location": "Madrid, Spain","reviewer_picture_url": "https://a0.muscache.com/im/pictures/user/Hosting-User-147015926/original/abcdef12-3456-7890.jpeg","response": "Thank you Marta! We are so glad you enjoyed the sunsets — see you again soon.","response_date": "2025-09-19T10:02:44Z"}
Output schema
| Field | Type | Description |
|---|---|---|
id | string | Airbnb review ID |
listing_id | string | Numeric room ID this review is for |
url | string | Canonical listing URL |
rating | integer | Guest star rating, 1–5 |
language | string | ISO language code of the original review (en, de, id, ...) |
comments | string | Full review text in the original language |
localized_review | string | Airbnb-localized version when the original was in another language |
created_at | string | ISO 8601 timestamp |
localized_date | string | Human-friendly "September 2025" |
localized_short_date | string | Compact "Sep 2025" |
trip_duration | string | "Stayed a few nights" / "Stayed about a week" |
highlighted_review_sentence | string[] | Sentences Airbnb highlights in the UI |
reviewer_id | string | Airbnb's numeric user ID |
reviewer_name | string | Guest first name (Airbnb does not expose last names) |
reviewer_location | string | Guest's hometown |
reviewer_picture_url | string | Avatar URL |
response | string | Host's reply text |
response_date | string | ISO 8601 timestamp of the host's reply |
Tips
- Use
MOST_RECENTfor fresh signal; switch toRATING_ASCto surface complaints first. - Combine with the
airbnb-scraperactor: scrape listings first, then feed the resultingidvalues into this actor for full reviews. - For high-volume runs (many listings × thousands of reviews) split across multiple actor runs to keep each within memory limits and to spread proxy load.