Airbnb Reviews Scraper - Deep Guest Review Data
Pricing
Pay per usage
Airbnb Reviews Scraper - Deep Guest Review Data
Extract Airbnb guest reviews for any listing. Get full review text, overall rating, category scores (cleanliness, accuracy, communication, location, check-in, value), reviewer name, location, stay duration, host info, and listing metadata. Pay per review.
Pricing
Pay per usage
Rating
0.0
(0)
Developer

Ricardo Akiyoshi
Actor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 hours ago
Last modified
Categories
Share
Airbnb Reviews Scraper
Extract Airbnb guest reviews at scale. Scrape full review text, ratings, category scores (cleanliness, accuracy, communication, location, check-in, value), reviewer details, stay duration, host info, and complete listing metadata for any property.
Features
- Scrape reviews by listing URL or location search
- Extract full review text with date and rating
- Reviewer name, location, and stay duration
- 6 Airbnb category ratings: Cleanliness, Accuracy, Communication, Location, Check-in, Value
- Listing metadata: title, type, host, superhost status, price, amenities
- Sort by most recent or most relevant
- Multi-language support (auto-translation)
- Multiple extraction strategies: NEXT_DATA, deferred-state JSON, API endpoints, DOM parsing
- Automatic pagination — scrape hundreds or thousands of reviews
- Anti-detection with rotating user agents and realistic headers
- Deduplication — no duplicate reviews in output
- Clean, structured JSON output
Input
| Field | Type | Default | Description |
|---|---|---|---|
| listingUrls | array | [] | Airbnb listing URLs to scrape reviews from |
| searchQuery | string | "" | Search by location (e.g., "Paris, France") |
| maxReviews | number | 500 | Max reviews per listing (0 = unlimited) |
| sortBy | string | "recent" | Sort: "recent" or "relevant" |
| language | string | "en" | Review language (ISO 639-1 code) |
| maxListingsFromSearch | number | 10 | Max listings to discover from search |
| includeListingDetails | boolean | true | Include listing metadata with each review |
| includeCategoryRatings | boolean | true | Include 6 category rating scores |
| proxyConfiguration | object | Apify Residential | Proxy settings (residential recommended) |
Output — Individual Review
{"listingTitle": "Stunning Eiffel Tower View Apartment","listingId": "12345678","listingUrl": "https://www.airbnb.com/rooms/12345678","reviewId": "r-987654321","reviewText": "Amazing apartment with breathtaking views of the Eiffel Tower. The host was incredibly responsive and the location is perfect for exploring Paris. Everything was spotlessly clean and exactly as described in the listing. Would absolutely come back!","rating": 5,"reviewDate": "2026-01-15","reviewDateRaw": "January 2026","reviewerName": "Sarah","reviewerLocation": "New York, United States","reviewerProfileUrl": "https://www.airbnb.com/users/show/11223344","reviewerAvatar": "https://a0.muscache.com/im/pictures/user/...","stayDuration": "5 nights","stayType": "Leisure","response": "Thank you Sarah! So glad you enjoyed the view. You're welcome back anytime!","responseDate": "2026-01-16","language": "en","translatedFrom": null,"overallRating": 4.95,"totalReviews": 347,"categoryRatings": {"cleanliness": 4.9,"accuracy": 5.0,"communication": 5.0,"location": 5.0,"checkIn": 4.9,"value": 4.8},"listingDetails": {"propertyType": "Entire apartment","location": "Paris, Ile-de-France, France","hostName": "Jean-Pierre","superhost": true,"pricePerNight": 185,"currency": "USD","bedrooms": 2,"bathrooms": 1,"maxGuests": 4,"amenities": ["Wifi", "Kitchen", "Washer", "Air conditioning", "Elevator"]},"scrapedAt": "2026-03-02T12:00:00.000Z"}
Use Cases
- Property Management: Monitor guest satisfaction, identify recurring complaints, track improvement over time
- Investment Analysis: Evaluate properties before purchasing — review sentiment reveals true guest experience
- Competitor Research: Analyze competitor listings in your market — understand their strengths and weaknesses
- Market Research: Discover what guests value most in specific locations and property types
- Pricing Strategy: Correlate review scores with pricing to find optimal price points
- Quality Benchmarking: Compare category scores across your portfolio vs. market averages
- Guest Experience Design: Extract actionable insights from guest feedback to improve amenities and services
- Due Diligence: Validate Airbnb income claims with actual review volume and sentiment data
- Content Analysis: Mine real guest language for listing copywriting and marketing
- Trend Detection: Spot emerging issues (noise, cleanliness, safety) before they impact ratings
Pricing
Pay per review scraped — you only pay for successfully extracted reviews. See the Pricing tab for current rates.
Tips
- Start small: Test with 1-2 listings and 50 reviews before running large batches
- Use proxies: Residential proxies significantly improve reliability
- Sort by recent: Best for monitoring and trend analysis
- Sort by relevant: Best for overall sentiment understanding
- Category ratings: Available at listing level — great for benchmarking across properties
- Language: Set to your preferred language — Airbnb auto-translates reviews
Legal
This actor is intended for legitimate research purposes including property management, market analysis, and academic research. Always comply with Airbnb's Terms of Service and applicable data protection regulations. Do not use scraped data for harassment, discrimination, or any unlawful purpose.
Integration — Python
from apify_client import ApifyClientclient = ApifyClient("YOUR_API_TOKEN")run = client.actor("sovereigntaylor/airbnb-reviews-scraper").call(run_input={"searchTerm": "airbnb reviews","maxResults": 50})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(f"{item.get('title', item.get('name', 'N/A'))}")
Integration — JavaScript
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });const run = await client.actor('sovereigntaylor/airbnb-reviews-scraper').call({searchTerm: 'airbnb reviews',maxResults: 50});const { items } = await client.dataset(run.defaultDatasetId).listItems();items.forEach(item => console.log(item.title || item.name || 'N/A'));