Airbnb Reviews & Guest Sentiment Miner
Pricing
from $0.30 / 1,000 review saveds
Airbnb Reviews & Guest Sentiment Miner
Collect every Airbnb review for any listing: full text, 1-5 star rating, exact date, language, reviewer and the host's reply. Each listing also gets its published rating breakdown, star histogram, topic tags, reply rate, monthly review volume and language mix. No account needed.
Pricing
from $0.30 / 1,000 review saveds
Rating
0.0
(0)
Developer
Hamza
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
Turn any Airbnb listing into a clean, structured review dataset. Paste a room link and get back every guest review with its full original text, its 1–5 star rating, the exact date it was written, the language it was written in, the reviewer's first name and profile, and the host's public reply where there is one. Alongside the reviews, each listing gets a single summary row carrying the figures Airbnb publishes on the page — the overall rating, the six category scores, the 1–5 star histogram and Airbnb's own topic tags — plus derived measures you would otherwise build by hand: host reply rate, review volume month by month, the rating trend over time, the share of reviews under four stars and the language mix of the guests. No Airbnb account, no login, nothing to connect.
What you can do with it
- Audit a property before you buy or manage it. Read every review a listing has ever received, in order, and see whether the 4.9 headline hides a run of cleanliness complaints in the last six months.
- Benchmark a comp set. Point it at ten rivals in the same market and compare category scores, share of sub-4-star reviews and reply rates side by side.
- Estimate demand without guessing. Review volume month by month is the closest public signal for how often a listing is actually booked, and it comes back as a ready-to-chart series.
- Mine complaints for product and operations work. Filter to reviews of three stars or fewer and read only what went wrong, across a whole portfolio.
- Watch a market's guest sentiment over time. Schedule a run with a start date and append only the reviews written since the last one.
- Feed a summariser or a sentiment model. Review text arrives complete and in its original language, with Airbnb's own translation attached when you ask for it — real writing, not truncated previews.
What you get
Two kinds of row, told apart by recordType. One row per review:
{"recordType": "review","reviewId": "1626871481184794267","listingId": "5398166","listingUrl": "https://www.airbnb.com/rooms/5398166","rating": 5,"reviewText": "Great little flat, five minutes from the metro and spotless.","reviewLanguage": "en","createdAt": "2026-02-22T15:43:13Z","localizedDate": "February 2026","reviewerFirstName": "Sophia","reviewerId": "586517841","reviewerContextualUserId": "1485235383355693118","reviewerPictureUrl": "https://a0.muscache.com/im/pictures/user/User/original/e909ba2c.jpeg","reviewerProfilePath": "/users/profile/1485235383355693118","reviewerIsSuperhost": false,"reviewerTenureText": "2 years on Airbnb","reviewHighlight": "Stayed a few nights","highlightType": "LENGTH_OF_STAY","hostResponseText": null,"hostResponseDateText": null,"hostId": "10214195","hostFirstName": "Pierre","reviewPhotoUrls": [],"scrapedAt": "2026-07-29T09:14:02.117Z"}
And one summary row per listing:
{"recordType": "listingSummary","listingId": "5398166","listingUrl": "https://www.airbnb.com/rooms/5398166","listingTitle": "Nice apartment center of paris","propertyType": "Entire rental unit","personCapacity": 4,"bedrooms": 1,"beds": 2,"bathrooms": 1.5,"overallRating": 4.68,"overallCount": 78,"isGuestFavorite": false,"categoryRatings": [{ "label": "Cleanliness", "rating": 4.4, "accessibilityLabel": "Rated 4.4 out of 5 stars for cleanliness" },{ "label": "Value", "rating": 4.6, "accessibilityLabel": "Rated 4.6 out of 5 stars for value" }],"ratingHistogram": [{ "stars": 5, "percentage": 0.7435897435897436, "localizedRating": "74%" },{ "stars": 4, "percentage": 0.21794871794871795, "localizedRating": "22%" }],"topicTags": [{ "name": "LOCATION", "localizedName": "Location", "count": 57 },{ "name": "HOSPITALITY", "localizedName": "Hospitality", "count": 39 }],"reviewsRetrieved": 78,"sampleSize": 78,"sampleAverageRating": 4.71,"publishedReviewCount": 78,"hostResponseRate": 0.04,"medianResponseLagDays": 0,"responseMetricsFromSampleOnly": true,"reviewsPerMonth": [ { "month": "2026-01", "reviews": 3 }, { "month": "2026-02", "reviews": 2 } ],"monthlyRatingTrend": [ { "month": "2026-02", "reviews": 2, "averageRating": 5 } ],"shareSub4": 0.04,"languageMix": [ { "language": "en", "reviews": 23, "share": 0.46 } ],"scrapedAt": "2026-07-29T09:14:02.117Z"}
Input reference
| Field | Type | Default | What it does |
|---|---|---|---|
listingUrls | list of strings | one example listing | Room links to collect reviews for, exactly as they appear in the address bar. Up to 500 per run. |
listingIds | list of strings | empty | The same listings as bare numeric ids, for when they come out of a spreadsheet. |
query | string | empty | A market to collect listings from when you have not supplied any links — "Paris, France", "Austin, Texas". |
bbox | object | empty | Narrows the market to a rectangle on the map, as {"neLat": 48.9, "neLng": 2.45, "swLat": 48.8, "swLng": 2.25}. Must be paired with a market name. |
maxListings | integer | 50 | How many listings one run works through, up to 500. |
maxReviewsPerListing | integer | 200 | Upper bound on reviews per listing, up to 2,000. Set it to 0 for summary rows only. |
sinceDate | string | empty | Keep only reviews written on or after this date (2026-01-31). Reviews arrive newest first, so a listing stops as soon as it reaches older ones. |
minRating | integer | empty | Keep only reviews of at least this many stars. |
maxRating | integer | empty | Keep only reviews of at most this many stars — set it to 3 to read just the critical ones. |
languages | list of strings | empty | Keep only reviews written in these languages (en, fr, es). Empty keeps every language. |
includeListingSummary | boolean | true | Reads each listing's published rating breakdown, star histogram and topic tags and attaches them to that listing's summary row. Every listing gets a summary row either way; switched off, those rows carry only the measures derived from the reviews collected. |
includeTranslations | boolean | false | Adds Airbnb's own translation of a review alongside the original text, where it publishes one. |
maxRequests | integer | 1500 | Hard ceiling on how much work one run may do. The run finishes cleanly with whatever it has collected when the ceiling is reached. |
| Listings in parallel | integer | 4 | How many listings are worked on at the same time, up to 8. |
currency | select | USD | Currency for any money shown alongside a listing. |
locale | select | en | Language for listing titles, category labels and topic tags. |
proxyCountry | select | Automatic | Country to appear to browse from. It does not change which reviews you get. |
Output fields
Review rows (recordType: "review")
| Field | Type | Description |
|---|---|---|
reviewId | string | Airbnb's own identifier for the review. |
listingId / listingUrl | string | The listing the review belongs to, and a link to it. |
rating | number | The guest's star rating, 1 to 5. |
reviewText | string | Full review text, in the language the guest wrote it. |
reviewLanguage | string | Language code of that text. Not the reviewer's nationality. |
createdAt | date | When the review was written, to the second. |
localizedDate | string | The month-and-year label Airbnb shows on the page. |
reviewerFirstName | string | Reviewer's first name — the only name Airbnb publishes. |
reviewerId / reviewerContextualUserId | string | The reviewer's two public identifiers. |
reviewerPictureUrl / reviewerProfilePath | string | Reviewer's photo and public profile path. |
reviewerIsSuperhost | boolean | Whether the reviewer is themselves a Superhost. |
reviewerTenureText | string | How long the reviewer has been on Airbnb ("2 years on Airbnb"). This is tenure, not a location. |
reviewHighlight / highlightType | string | Airbnb's short label for the stay, e.g. "Stayed a few nights". |
hostResponseText / hostResponseDateText | string | The host's public reply and the month it was published, when there is one. |
hostId / hostFirstName | string | The host who received the review. |
translatedText / translatedLanguage / needsTranslation / translationDisclaimer | string / boolean | Airbnb's machine translation, when translations are switched on. |
reviewPhotoUrls | array | Photos attached to the review, when the guest added any. |
scrapedAt | date | When this run collected the review. |
Listing summary rows (recordType: "listingSummary")
| Field | Type | Description |
|---|---|---|
listingTitle / propertyType / personCapacity | string / number | The listing's headline, its property type and how many guests it sleeps. |
bedrooms / beds / bathrooms / isStudio | number / boolean | Layout as published on the listing's own summary line. |
overallRating / overallCount | number | The headline rating and review count Airbnb shows. |
isGuestFavorite / isNewListing | boolean | Airbnb's Guest Favourite badge, and whether the listing is too new to be rated. |
categoryRatings | array | The six published category scores — cleanliness, accuracy, check-in, communication, location, value — as numbers. |
ratingHistogram | array | The 1–5 star distribution, each band with its exact share. |
topicTags | array | Airbnb's own review themes with the number of reviews mentioning each. |
reviewsRetrieved / sampleSize | number | How many reviews this run read, and how many survived your filters. Every derived measure below is computed over sampleSize. |
sampleAverageRating | number | Average star rating across the collected reviews. |
sampleFirstReviewAt / sampleLastReviewAt / sampleMonthsCovered | date / number | The window the collected reviews span. |
publishedReviewCount | number | The total Airbnb displays, recorded for comparison. |
hostResponseRate | number | Share of collected reviews the host publicly replied to. |
medianResponseLagDays | number | Typical gap between a review and the host's reply. Month-granular — see the limits below. |
responseMetricsFromSampleOnly | boolean | Always true: reply measures describe the reviews collected, not the listing's whole history. |
reviewsPerMonth | array | Review volume per calendar month, oldest first. The closest public signal for booking volume. |
monthlyRatingTrend | array | Average rating per calendar month, oldest first. |
shareSub4 | number | Share of collected reviews rated below four stars. |
languageMix | array | Languages the collected reviews were written in, commonest first, with shares. |
sectionsLookComplete | boolean | False when Airbnb served the listing's page without its rating breakdown; the derived measures are still reported. |
reviewsStopReason | string | Why collecting stopped for this listing — end of the reviews, your limit, your start date, or the run ceiling. |
scrapedAt | date | When this run collected the listing. |
Pricing
This actor is pay per event, with two charges and nothing else.
- Review saved — the built-in per-result charge, $0.0003 per row, which is $0.30 per 1,000 rows. It fires once for every row written to the dataset.
- Listing rating summary — $0.006, charged once for each listing whose published rating breakdown, star histogram and topic tags were actually retrieved. A listing that only produced reviews is never charged for it, and turning the summary off means it never fires at all.
A typical job — 50 listings with about 100 reviews each — is 5,000 review rows plus 50 summaries, so about $1.80 for the whole run. A single listing with 78 reviews costs about $0.03. Reviews that fail your date, rating or language filters are never saved and therefore never charged, so a run that reads a thousand reviews to keep the forty critical ones bills forty rows. If you set a maximum cost for a run, the actor stops cleanly once that budget is spent instead of overshooting it.
Limits & what this actor cannot do
Most of these are Airbnb's own ceilings rather than this actor's, and all of them are real:
- Reviews arrive newest first, and that is the only order offered. There is no "worst first" mode; use the rating filters to isolate critical reviews instead.
- There is no ceiling on how many reviews can be collected for one listing. Airbnb serves them in batches and the actor keeps going until it reaches the end, your per-listing limit, or your start date.
- Host replies are published for only a small share of reviews. On a typical listing a handful out of dozens carry one, so a low reply rate is usually the truth about the host rather than missing data.
- The reviewer's location line is how long they have been on Airbnb, not where
they live. Airbnb does not publish a reviewer country anywhere in this data,
and the actor does not invent one. The field is named
reviewerTenureTextfor exactly that reason. - Review language is not the reviewer's nationality. They are separate things and must not be conflated.
- Reply timing is month-granular. Airbnb publishes the reply date as a month
and year only, so
medianResponseLagDaysis a comparative signal between listings, never a service-level measurement. - Every derived measure describes the reviews this run collected. Reply rate,
monthly volume, rating trend, sub-4-star share and language mix are computed
over
sampleSize, so they change if you narrow your filters or your per-listing limit.overallRating,overallCount, the category scores and the histogram are Airbnb's own published figures and cover the listing's whole history. - A narrow filter reads more than it saves. With a start date, a rating band or a language list set, a listing keeps going until it has enough matching reviews — or until it reaches its equal share of the run ceiling, so that one listing can never use up the whole run and leave the others empty. Every summary row says why that listing stopped, and raising the ceiling lets a narrow filter go deeper.
- Category ratings and the star histogram are the listing's published
figures, not something recomputed from the reviews — the two can differ
slightly, and occasionally a listing's page is served without them, in which
case
sectionsLookCompleteis false. - Bedroom, bed and bathroom counts come from the listing's own summary line, so a listing that writes it unusually may leave one of them blank.
- Finding listings from a market name is not exhaustive. Airbnb shows only a few hundred listings for any single search and repeats itself past that point, so use a map area — or supply the room links yourself — when you need a specific set of properties.
- Only English is verified end to end. Other languages are best-effort: the reviews themselves are unaffected, but labels and titles may vary.
- Speed depends on the size of the job and on how quickly Airbnb answers, so no fixed throughput is promised.
- Airbnb's terms prohibit automated access. You are responsible for using what you collect lawfully and in line with the source site's terms, including any personal-data rules that apply where you operate.
FAQ
Do I need an Airbnb account? No. No account, no login, no personal details of any kind — paste a room link and run it.
Will it get every review a listing has?
Yes, as long as your per-listing limit is high enough and you have not set a
start date or a rating filter. Compare sampleSize against
publishedReviewCount in the summary row to confirm it for any listing; the two
can differ by one or two because Airbnb's displayed total and its review list are
not always in perfect step.
Can I run it on a schedule?
Yes, and that is the cheapest way to track a listing over time. Set sinceDate
to the date of your last run: because reviews come back newest first, each
listing stops as soon as it reaches older reviews, so a daily or weekly run only
pays for what is new.
Can I get only the bad reviews?
Set maxRating to 3 (or 2). Filtered-out reviews are never saved, so you only
pay for the ones you keep.
What if a listing has no reviews yet?
You still get its summary row, with sampleSize of zero and null derived
measures rather than misleading zeros. Nothing is invented.
Is the reviewer's country included? No. Airbnb does not publish it. The line that looks like a location is the reviewer's time on Airbnb, and it is labelled as such.
Can I collect reviews for a whole city? Partly. Give it a market name and it will find listings for you, but Airbnb only shows a few hundred listings per search, so a whole-city sweep is not something this actor can promise. For a defined comp set, supply the room links.