Airbnb Reviews & Guest Sentiment Miner avatar

Airbnb Reviews & Guest Sentiment Miner

Pricing

from $0.30 / 1,000 review saveds

Go to Apify Store
Airbnb Reviews & Guest Sentiment Miner

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

Hamza

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

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

FieldTypeDefaultWhat it does
listingUrlslist of stringsone example listingRoom links to collect reviews for, exactly as they appear in the address bar. Up to 500 per run.
listingIdslist of stringsemptyThe same listings as bare numeric ids, for when they come out of a spreadsheet.
querystringemptyA market to collect listings from when you have not supplied any links — "Paris, France", "Austin, Texas".
bboxobjectemptyNarrows 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.
maxListingsinteger50How many listings one run works through, up to 500.
maxReviewsPerListinginteger200Upper bound on reviews per listing, up to 2,000. Set it to 0 for summary rows only.
sinceDatestringemptyKeep 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.
minRatingintegeremptyKeep only reviews of at least this many stars.
maxRatingintegeremptyKeep only reviews of at most this many stars — set it to 3 to read just the critical ones.
languageslist of stringsemptyKeep only reviews written in these languages (en, fr, es). Empty keeps every language.
includeListingSummarybooleantrueReads 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.
includeTranslationsbooleanfalseAdds Airbnb's own translation of a review alongside the original text, where it publishes one.
maxRequestsinteger1500Hard 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 parallelinteger4How many listings are worked on at the same time, up to 8.
currencyselectUSDCurrency for any money shown alongside a listing.
localeselectenLanguage for listing titles, category labels and topic tags.
proxyCountryselectAutomaticCountry to appear to browse from. It does not change which reviews you get.

Output fields

Review rows (recordType: "review")

FieldTypeDescription
reviewIdstringAirbnb's own identifier for the review.
listingId / listingUrlstringThe listing the review belongs to, and a link to it.
ratingnumberThe guest's star rating, 1 to 5.
reviewTextstringFull review text, in the language the guest wrote it.
reviewLanguagestringLanguage code of that text. Not the reviewer's nationality.
createdAtdateWhen the review was written, to the second.
localizedDatestringThe month-and-year label Airbnb shows on the page.
reviewerFirstNamestringReviewer's first name — the only name Airbnb publishes.
reviewerId / reviewerContextualUserIdstringThe reviewer's two public identifiers.
reviewerPictureUrl / reviewerProfilePathstringReviewer's photo and public profile path.
reviewerIsSuperhostbooleanWhether the reviewer is themselves a Superhost.
reviewerTenureTextstringHow long the reviewer has been on Airbnb ("2 years on Airbnb"). This is tenure, not a location.
reviewHighlight / highlightTypestringAirbnb's short label for the stay, e.g. "Stayed a few nights".
hostResponseText / hostResponseDateTextstringThe host's public reply and the month it was published, when there is one.
hostId / hostFirstNamestringThe host who received the review.
translatedText / translatedLanguage / needsTranslation / translationDisclaimerstring / booleanAirbnb's machine translation, when translations are switched on.
reviewPhotoUrlsarrayPhotos attached to the review, when the guest added any.
scrapedAtdateWhen this run collected the review.

Listing summary rows (recordType: "listingSummary")

FieldTypeDescription
listingTitle / propertyType / personCapacitystring / numberThe listing's headline, its property type and how many guests it sleeps.
bedrooms / beds / bathrooms / isStudionumber / booleanLayout as published on the listing's own summary line.
overallRating / overallCountnumberThe headline rating and review count Airbnb shows.
isGuestFavorite / isNewListingbooleanAirbnb's Guest Favourite badge, and whether the listing is too new to be rated.
categoryRatingsarrayThe six published category scores — cleanliness, accuracy, check-in, communication, location, value — as numbers.
ratingHistogramarrayThe 1–5 star distribution, each band with its exact share.
topicTagsarrayAirbnb's own review themes with the number of reviews mentioning each.
reviewsRetrieved / sampleSizenumberHow many reviews this run read, and how many survived your filters. Every derived measure below is computed over sampleSize.
sampleAverageRatingnumberAverage star rating across the collected reviews.
sampleFirstReviewAt / sampleLastReviewAt / sampleMonthsCovereddate / numberThe window the collected reviews span.
publishedReviewCountnumberThe total Airbnb displays, recorded for comparison.
hostResponseRatenumberShare of collected reviews the host publicly replied to.
medianResponseLagDaysnumberTypical gap between a review and the host's reply. Month-granular — see the limits below.
responseMetricsFromSampleOnlybooleanAlways true: reply measures describe the reviews collected, not the listing's whole history.
reviewsPerMontharrayReview volume per calendar month, oldest first. The closest public signal for booking volume.
monthlyRatingTrendarrayAverage rating per calendar month, oldest first.
shareSub4numberShare of collected reviews rated below four stars.
languageMixarrayLanguages the collected reviews were written in, commonest first, with shares.
sectionsLookCompletebooleanFalse when Airbnb served the listing's page without its rating breakdown; the derived measures are still reported.
reviewsStopReasonstringWhy collecting stopped for this listing — end of the reviews, your limit, your start date, or the run ceiling.
scrapedAtdateWhen 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 reviewerTenureText for 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 medianResponseLagDays is 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 sectionsLookComplete is 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.