Airbnb Reviews Scraper (Cheap) avatar

Airbnb Reviews Scraper (Cheap)

Pricing

from $1.99 / 1,000 results

Go to Apify Store
Airbnb Reviews Scraper (Cheap)

Airbnb Reviews Scraper (Cheap)

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 $1.99 / 1,000 results

Rating

0.0

(0)

Developer

Data API

Data API

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

Airbnb Reviews Scraper

Airbnb Reviews Scraper

Reading through Airbnb reviews by hand is slow, and the page only shows a handful at a time before you have to keep clicking "Show more". This scraper pulls the full review history of any listing for you. Give it a room URL or just the numeric ID and it returns every review as its own row: the star rating, the text (with the English translation when there is one), who wrote it, when, the trip tag, and the host's reply. Pass one listing or a whole batch and the results land in your dataset as the run goes.

What you get

One row per review, with a steady shape so columns stay predictable in a sheet or database. Missing values come back as null rather than disappearing. Each row covers three groups:

  • ReviewreviewId, starRating, reviewText, originalText, languageCode, wasTranslated, tripTag
  • DatessubmittedAt, displayDate, collectedAt
  • PeopleguestName, guestId, guestContextualId, guestPhotoUrl, guestProfilePath, guestTenure, hostName, hostId, hostReply, plus the listingId the review belongs to

Quick start

  1. Hit Try for free and open the input form.
  2. Paste an Airbnb listing URL into Single listing URL or ID, or drop several into Multiple listing URLs or IDs (a bare room ID works too).
  3. Set Reviews per listing to cap each listing, or leave it at 0 to pull them all. Pick a proxy type if you need one.
  4. Press Start, then export the results as JSON, CSV, Excel, or XML when the run finishes.

How it works

Use cases

  • Competitor research — pull reviews from rival listings and compare what guests say before you adjust pricing or amenities
  • Sentiment analysis — feed reviewText into an NLP pipeline to find what guests praise and what they gripe about
  • Host monitoring — schedule the actor to catch new reviews on your own listing as they land
  • Travel planning — read a listing's whole review history before booking instead of trusting the headline score
  • Dataset building — gather Airbnb reviews in bulk to train or benchmark short-term-rental models

Input

FieldTypeRequiredDescription
listingUrlstringOne of listingUrl or listingUrlsA single Airbnb listing URL or numeric room ID. Prefilled with a sample listing.
listingUrlsarray of stringsOne of listingUrl or listingUrlsSeveral Airbnb URLs or room IDs, one per line. Merged with listingUrl when both are given.
reviewsLimitintegerNoReviews to collect per listing. Default 50; use 0 to pull every review.
contentLocalestringNoLanguage for date labels and translated text, e.g. en, fr, de, zh. Default en.
currencyCodestringNoCurrency sent with the request, e.g. USD, EUR, GBP. Does not change review text. Default USD.
requestTimeoutSecondsintegerNoSeconds to wait on each HTTP request before giving up. Default 45.
proxyConfigurationobjectNoProxies used for requests. Defaults to Datacenter (Anywhere); switch to Residential if datacenter IPs get blocked.

Example input

{
"listingUrls": [
"https://www.airbnb.com/rooms/20669368",
"https://www.airbnb.com/rooms/14926879",
"987654321"
],
"reviewsLimit": 0,
"contentLocale": "en",
"currencyCode": "USD",
"proxyConfiguration": { "useApifyProxy": true }
}

Output

Each review on a listing becomes one row in the dataset, and every field is always present — values Airbnb doesn't supply come back as null so the dataset stays rectangular.

Example output

{
"reviewId": "1646862738258373172",
"listingId": "20669368",
"starRating": 5,
"reviewText": "The place was fantastic. For the price you get a prime spot close to everything.",
"originalText": null,
"languageCode": "en",
"wasTranslated": false,
"submittedAt": "2026-03-22T05:42:17Z",
"displayDate": "6 days ago",
"tripTag": "WEEKEND TRIP",
"guestName": "Lester",
"guestId": "507561268",
"guestContextualId": "1498306238959795062",
"guestPhotoUrl": "https://a0.muscache.com/im/pictures/user/example.jpg",
"guestProfilePath": "/users/profile/1498306238959795062",
"guestTenure": "3 years on Airbnb",
"hostName": "Sourov",
"hostId": "599574226",
"hostReply": null,
"collectedAt": "2026-06-29T10:00:00.000000+00:00"
}

Output fields

FieldTypeDescription
reviewIdstringUnique identifier Airbnb assigns to the review
listingIdstringRoom/listing ID the review was left on
starRatingintegerScore the guest gave, from 1 to 5
reviewTextstringReview content in English, translated when the original was another language
originalTextstringUntranslated review as the guest wrote it; null when already in English
languageCodestringBCP-47 code of the original language, e.g. en, zh-CN, fr
wasTranslatedbooleanTrue when Airbnb auto-translated the review
submittedAtstringISO 8601 timestamp of when the guest posted the review
displayDatestringDate label as shown on Airbnb, e.g. "February 2026"
tripTagstringTrip-type label such as WEEKEND TRIP; null when absent
guestNamestringFirst name of the guest who wrote the review
guestIdstringAirbnb user ID of the reviewer
guestContextualIdstringContextual ID used in Airbnb profile URLs
guestPhotoUrlstringLink to the reviewer's profile picture
guestProfilePathstringRelative path to the reviewer's Airbnb profile
guestTenurestringHow long the reviewer has been on Airbnb, e.g. "3 years on Airbnb"
hostNamestringFirst name of the host the review was written for
hostIdstringAirbnb user ID of the host
hostReplystringHost's response to the review; null when there is none
collectedAtstringISO 8601 timestamp of when the record was captured

Tips for best results

  • Pull everything with reviewsLimit: 0. Set it to 0 and the actor pages through the full review history of each listing instead of stopping at the first page.
  • Batch listings in one run. Put multiple URLs or IDs in listingUrls, one per line. Each review carries its listingId, so you can tell the listings apart afterward.
  • Any URL format works. Links with query parameters like check_in or source_impression_id are fine, and a bare numeric room ID works on its own.
  • Switch to Residential if you get blocked. Datacenter proxies handle most runs; move to Residential when you hit repeated rate limits on large scrapes.
  • Check the translation fields for non-English reviews. When Airbnb has an English version, reviewText holds it and originalText keeps the source; languageCode and wasTranslated tell you what happened.

How can I use Airbnb review data?

How can I use the Airbnb Reviews Scraper to analyze guest sentiment? Run it across the listings you care about with reviewsLimit set to 0, then push the reviewText and starRating columns into your sentiment or topic-modeling pipeline. Because every review is a separate row tagged with languageCode and wasTranslated, you can split English from translated text or weight scores by rating before you summarize what guests actually think.

How can I scrape all reviews from an Airbnb listing, not just the first page? Paste the room URL or ID and set reviewsLimit to 0. The scraper calls Airbnb's review endpoint page by page until there's nothing left, so you get the complete history rather than the handful shown on the listing page.

How can I track new Airbnb reviews for my own listing over time? Schedule the actor on your listing URL and compare submittedAt between runs to see what's new. Pair it with guestName, tripTag, and hostReply to keep a running log of feedback and spot reviews that still need a response.

How can I collect Airbnb reviews in bulk for research? Drop a list of listing URLs or IDs into listingUrls and let it run. Every review lands in one dataset with its listingId attached, ready to export as JSON, CSV, or Excel for a market study or a training set.

Our actors are ethical and do not extract any private user data, such as email addresses or private contact information. They only extract what the user has chosen to share publicly. We therefore believe that our actors, when used for ethical purposes by Apify users, are safe.

However, you should be aware that your results could contain personal data. Personal data is protected by the GDPR in the European Union and by other regulations around the world. You should not scrape personal data unless you have a legitimate reason to do so. If you're unsure whether your reason is legitimate, consult your lawyers.

You can also read Apify's blog post on the legality of web scraping.

Support

Questions, feature requests, or a field you'd like added? Reach out at data.apify@proton.me and we'll get back to you.