Airbnb Reviews Scraper
Pricing
from $1.90 / 1,000 results
Airbnb Reviews Scraper
Fast multi-listing Airbnb reviews scraper. Scrape every review from any listing URL with full pagination, filtering, and sort control.
Pricing
from $1.90 / 1,000 results
Rating
0.0
(0)
Developer
Crikit
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
Scrape every guest review from any Airbnb listing in seconds. Multi-listing input, full pagination, cheap.
This Airbnb Reviews Scraper is built around the gap most existing actors leave open: the popular ones charge several dollars per thousand reviews, and the cheap ones only handle a single listing URL at a time. This actor handles both: multiple Airbnb listing URLs in a single run, full pagination through every review, and a price per review that is meaningfully cheaper than the leading alternatives.
Why this actor
Most short-term rental teams, market researchers, and review-analytics tools end up paying far more for Airbnb review data than they need to. The market roughly splits in two: a flagship Airbnb Reviews Scraper that handles bulk URLs but charges around $5 per 1,000 reviews, and a long tail of cheaper single-URL scrapers that force you to run them one listing at a time. Neither is a great fit if you want to scrape reviews across, say, 200 properties in one job and not lose a quarter to per-review fees.
This scraper is designed for that real-world job. It accepts an arbitrary list of Airbnb listing URLs, paginates through every review on each one, and emits a flat row per review so that the dataset drops straight into a spreadsheet, BigQuery, or a dashboard.
What it does
- Accepts one or more Airbnb listing URLs (e.g.
https://www.airbnb.com/rooms/12937) - Paginates through every review for each listing (50 reviews per request, full coverage)
- Lets you sort by Most recent, Best quality, Highest rated, or Lowest rated
- Lets you cap the total number of reviews returned across all listings via
maxResults - Lets you filter reviews by
dateFromanddateTo(most efficient withMOST_RECENTsort, where pagination short-circuits once older reviews are encountered) - Returns every field you would expect: review text, rating, language, created-at timestamp, host response, reviewer profile, host profile, photos, review highlight tags
Output schema
Every dataset item is a single review:
| Field | Type | Notes |
|---|---|---|
startUrl | string | Original input URL the review was found under |
roomId | string | Numeric Airbnb room id parsed from the URL |
id | string | Airbnb review id |
language | string | ISO language code |
text | string | Review text in the original language |
localizedText | string | Review text in the locale you requested |
localizedReview | object or null | { text, disclaimer } when Airbnb auto-translates |
localizedDate | string | Human-readable date e.g. 2 weeks ago |
localizedReviewerLocation | string | e.g. Tomah, Wisconsin |
createdAt | string | ISO 8601 timestamp |
reviewer | object | { id, firstName, hostName, pictureUrl, profilePath, profilePicture } |
reviewee | object | Host details, same shape as reviewer |
reviewHighlight | string or null | e.g. Stayed a few nights |
highlightType | string or null | e.g. LENGTH_OF_STAY |
rating | number | 1 through 5. Pre-2014 reviews predate Airbnb's rating system and return null here |
response | string or null | Host response text |
ratingAccessibilityLabel | string | e.g. Rating, 5 stars |
photoUrls | array | URLs of any photos attached to the review |
The schema is a superset of the most popular Airbnb Reviews Scraper actor, so existing pipelines that consume that actor's output should drop in without changes.
Input
{"startUrls": [{ "url": "https://www.airbnb.com/rooms/12937" },{ "url": "https://www.airbnb.com/rooms/40569814" }],"locale": "en-US","currency": "USD","sortingPreference": "MOST_RECENT","maxResults": 500,"dateFrom": "2024-01-01"}
| Input field | Default | Purpose |
|---|---|---|
startUrls | required | Array of { url } objects pointing at Airbnb listings. Numeric IDs and URLs with query params both parse correctly. |
locale | en-US | BCP-47 locale that Airbnb uses to translate localized text and date strings. |
currency | USD | Currency code, mostly cosmetic for reviews. |
sortingPreference | MOST_RECENT | One of MOST_RECENT, BEST_QUALITY, RATING_DESC, RATING_ASC. |
maxResults | unlimited | Hard cap across all listings combined. |
dateFrom / dateTo | none | ISO 8601 date filters applied client-side. |
proxyConfiguration | Apify Proxy | The reviews come from a public-key-protected JSON API, so any Apify proxy group works fine. Datacenter is the cheapest if your plan includes it. |
How it works
The actor talks directly to Airbnb's internal GraphQL endpoint that powers the reviews modal in the listing page. That endpoint returns reviews 50 at a time as structured JSON. Because the data is already JSON on the wire, the actor does not run a headless browser, does not parse HTML, and does not need residential proxies. It runs on HttpCrawler with 256 MB of memory, which keeps the per-run compute cost negligible and makes the per-review price possible.
Practically, scraping a listing with 478 reviews takes ten paginated requests and finishes in a few seconds end to end. Scraping a portfolio of 50 listings runs in parallel and is dominated by network round trips, not CPU.
Pricing
This actor uses a pay-per-event pricing model with two events: a tiny actor-start fee and a per-review fee. The per-review fee is the dominant cost for any non-trivial run. The pricing is deliberately set below the dominant competitor while still leaving healthy margin, because the underlying compute cost is low.
Volume tiers (BRONZE, SILVER, GOLD, PLATINUM, DIAMOND) reduce the per-review fee further as monthly usage grows. Final per-tier numbers are configured in the Apify Console.
Use cases
- Sentiment analysis and topic mining across a portfolio of properties
- Competitor reputation tracking
- Listing optimization, where reviews surface guest pain points by category
- Market research on review velocity and rating trends in a city or neighborhood
- Powering analytics dashboards that need fresh review data refreshed daily
Limitations
- The actor scrapes published guest reviews. It does not access private host-only data.
- A handful of pre-2014 reviews predate Airbnb's rating system and return with
rating: nullwhile still containing review text, language, and reviewer details. This is true negative coverage, not a parsing miss. - Airbnb does not expose a server-side date filter for reviews.
dateFromanddateToare applied client-side. WithMOST_RECENTsort the actor short-circuits pagination once older reviews appear, so date-bounded queries remain fast. - Listings that have been delisted or never existed return
NOT_FOUNDfrom Airbnb and are skipped with a log warning. Other listings in the same run continue normally.
Tips
- Combine
MOST_RECENTsort withdateFromfor incremental scraping (only fetch reviews newer than your last run). - For city-wide analysis, pair this actor with an Airbnb listing-discovery actor: collect URLs first, then feed them to this scraper in batches.
- The
localizedTextfield already contains Airbnb's translation of foreign-language reviews into your requested locale, so you usually don't need a separate translation step.
Output formats
Datasets are downloadable as JSON, CSV, or XLSX from the Apify Console, or via the Apify API.