Airbnb Reviews Scraper
Pricing
from $0.03 / 1,000 review saveds
Airbnb Reviews Scraper
Export public Airbnb guest reviews from listing URLs, with text, dates, reviewer details, available ratings, host replies, and listing context. Download CSV or JSON.
Pricing
from $0.03 / 1,000 review saveds
Rating
0.0
(0)
Developer
Hanna Nosova
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
0
Monthly active users
6 days ago
Last modified
Categories
Share
Extract public guest reviews from Airbnb listing URLs. Add one or more room URLs and get structured review text, dates, reviewer metadata, listing ratings, review counts, languages, and host responses when Airbnb makes them public.
Ready-to-run examples
Open a saved example to inspect its inputs, then adjust the limits and filters for your own run. Examples are starting points; source availability can change.
- Build an Airbnb review dataset for analysis
- Compare Airbnb Reviews For Two Listings
- Scrape Recent Airbnb Listing Reviews
View all ready-to-run examples
Quick start
Paste public Airbnb room URLs, choose a small per-listing cap, then run the Actor and inspect the dataset.
{"startUrls": [{"url": "https://www.airbnb.com/rooms/20669368"}],"maxReviewsPerListing": 10,"sort": "recent"}
Output example
Illustrative record based on the documented field shape; values and availability can change.
{"listingUrl": "https://www.airbnb.com/rooms/20669368","listingId": "20669368","listingTitle": "Little Country Houses - Finley's Fort + hot tub","overallRating": 4.9,"reviewCount": 308,"reviewId": "1701461540622642748","reviewerName": "Gabriella","reviewerProfileUrl": "https://www.airbnb.com/users/show/755284424","reviewerLocation": null,"reviewDate": "2026-06-05T13:40:21Z","rating": null,"language": "en","text": "Our stay here was Superb...","translatedText": null,"responseText": null,"responseDate": null,"scrapedAt": "2026-06-26T00:00:00.000Z"}
Input settings
| Setting | JSON key | Type / default | What it does |
|---|---|---|---|
| Airbnb listing URLs | startUrls | array / not set | Public Airbnb room/listing URLs such as https://www.airbnb.com/rooms/20669368. |
| Maximum reviews per listing | maxReviewsPerListing | integer / 25 | Limit the review batch examined for each listing. Date, rating, and keyword filters are applied after retrieval, so the saved matching count can be lower. Minimum 1; maximum 1000. |
| Review sort order | sort | string / "default" | Use Airbnb's default order or request recent reviews when available. Values: default, recent. |
| Only reviews on or after | dateFrom | string / not set | Optional inclusive ISO date (YYYY-MM-DD). Useful for collecting new reviews in scheduled runs. |
| Only reviews on or before | dateTo | string / not set | Optional inclusive ISO date (YYYY-MM-DD). |
| Minimum review rating | minRating | integer / not set | Optional minimum per-review star rating to save. Minimum 1; maximum 5. |
| Maximum review rating | maxRating | integer / not set | Optional maximum per-review star rating to save. Minimum 1; maximum 5. |
| Review keyword | keyword | string / not set | Optional word or phrase that must appear in the review, its Airbnb translation, or the host response. |
| Resume pending listing URLs | resumeListingUrls | array / not set | Optional continuation URLs from the PENDING_LISTINGS record after a time-limited run. Normal runs do not need this field. |
| Run safety limit (seconds) | runSafetySeconds | integer / 270 | Optional early-stop limit for larger batches. The Actor saves completed review rows and a PENDING_LISTINGS checkpoint before this limit, leaving time for clean shutdown. Minimum 60; maximum 270. |
| Proxy configuration | proxyConfiguration | object / {"useApifyProxy":true} | Optional Apify Proxy settings. Datacenter proxy is usually enough for small public-review runs; use residential only if Airbnb blocks your traffic. |
Output fields
| JSON key | Type | Meaning |
|---|---|---|
listingUrl | string | Public Airbnb room URL supplied for this review. |
listingId | string | Airbnb listing identifier; use with reviewId when comparing exports. |
listingTitle | string / null | Listing title when publicly available. |
overallRating | number / null | Listing-wide average rating, not the rating of this review. Repeated across reviews; do not sum it. |
reviewCount | integer / null | Listing-wide review count, not the number of rows returned by this run. |
reviewId | string | Identifier of the individual guest review. |
reviewerName | string / null | Public reviewer display name; not contact information. |
reviewerProfileUrl | string / null | Public Airbnb reviewer profile URL when supplied. |
reviewerLocation | string / null | Reviewer location text when supplied; null means unavailable. |
reviewDate | string / null | Review date supplied by Airbnb; null when unavailable. |
rating | number / null | Individual review star rating when supplied. Null means unavailable, not zero. |
language | string / null | Language code reported for the original review, when available. |
text | string | Original public guest review text. |
translatedText | string / null | Translation supplied by Airbnb when available; this Actor does not generate a translation. |
responseText | string / null | Public host response to this review when available. |
responseDate | string / null | Date of the host response when available. |
scrapedAt | string | UTC timestamp when this row was collected. |
Pricing
The start event is charged once after input validation. The item event is charged for each review selected for export, immediately before it is saved. Filtered-out reviews are not charged as results. A run with no matching reviews can still incur its start charge.
See the live Pricing tab for current rates and discounts. Check the cost shown for your account before scaling a run; any applicable platform usage is shown by Apify separately.
What does Airbnb Reviews Scraper do?
Airbnb Reviews Scraper turns public Airbnb room pages into clean review datasets. It is built for teams that need recurring guest feedback, reputation monitoring, competitor research, or market intelligence without copying reviews by hand.
The actor accepts Airbnb room URLs such as https://www.airbnb.com/rooms/20669368 and saves one dataset item per review.
Who is it for?
- Property managers tracking guest sentiment across their own listings.
- Short-term rental analysts comparing competing stays in a destination.
- Reputation teams monitoring recent public guest feedback.
- Hospitality researchers building review datasets for market studies.
- Automation teams feeding reviews into BI, CRM, or AI workflows.
Why use this actor?
- Saves structured review rows instead of screenshots or copied text.
- Includes listing context with every review for easy exports.
- Supports multiple Airbnb URLs in one run.
- Lets you cap reviews per listing to control run size and cost.
- Filters saved reviews by date, rating, or a keyword without changing the original review data.
- Saves a run summary and a resumable pending-listing checkpoint when time runs short.
- Works through Apify datasets, API, webhooks, integrations, and MCP.
Filtering and batch limits
The current Actor accepts up to 100 unique listing URLs per run. Filters apply within the fetched maxReviewsPerListing batch; it does not keep searching until it saves that many matching reviews. With rating filters, reviews whose rating is null are excluded. With date filters, reviews whose date is missing or unreadable are excluded.
An empty filtered run can report that no reviews were found and still incur its start charge. PENDING_LISTINGS can restart a partly processed listing. Reviews fetched again in a separate run can be charged again. Compare listingId and reviewId downstream to avoid double-counting; use date filters or omit completed listing URLs where appropriate to limit repeat work.
Tips for best results
- Use direct
/rooms/URLs. - Start with 5-10 reviews per listing for testing.
- Remove duplicate URLs before large runs.
- Split very large URL lists into smaller batches.
- Review the dataset sample before connecting automation.
Common workflows
Reputation monitoring
Run the actor weekly on your managed listings and send new rows to your dashboard or spreadsheet.
Market research
Collect reviews from competing listings in the same destination and compare guest language, sentiment, and frequency.
Guest experience analysis
Export text to your NLP or LLM pipeline to classify recurring topics such as cleanliness, check-in, location, host communication, and amenities.
Integrations
Apify datasets connect to:
- Google Sheets
- Make
- Zapier
- Webhooks
- BigQuery exports
- S3-compatible storage
- Custom API clients
Data quality notes
Airbnb may not expose every field for every review. For example, per-review star ratings, reviewer location, translated text, or host response can be missing. Missing fields are returned as null rather than invented.
Limitations
- Supports public Airbnb room/listing pages only.
- Does not access private account data.
- Does not bypass login-only, CAPTCHA, or blocked pages.
- Availability, prices, and booking calendars are outside this actor's scope.
FAQ
Can it scrape private reviews?
No. It only extracts publicly visible review data from public Airbnb listing pages.
Why are some fields null?
Airbnb does not expose every review attribute on every listing. Without filters on those fields, the Actor can keep the row and leave unavailable values as null. Rating/date filters exclude rows whose corresponding value is unavailable.
Can I scrape many listings at once?
Yes. Add multiple room URLs and set a reasonable per-listing review cap. For large batches, use smaller chunks.
What if a listing was removed?
Removed, private, or blocked listings may return an HTTP error. Check the run log for the affected URL.
Does it support API and MCP automation?
Yes. You can call the actor through the Apify API, schedule it, connect webhooks, or run it via Apify MCP.
Related actors
- Agoda Reviews Scraper
- Airbnb Listings Scraper
- Apple Maps Places Scraper
- Trip.com Hotels Scraper
- Agoda Hotels Scraper
Privacy and data handling
This Actor only requests the permissions needed to run the input you provide. It uses your input (such as URLs, search terms, identifiers, filters, and limits) only to fetch the requested public data from the relevant source site or API for this Actor, then writes results to your Apify dataset/key-value store.
Data may pass through Apify platform services and Apify Proxy during the run, and requests are sent only to the target site or public data provider required for this Actor's results. FetchCat does not send your inputs or outputs to advertising networks, data brokers, or model-training services, and does not retain run data outside Apify storage after the run except when you explicitly share run details for transient support debugging.
You are responsible for using this Actor lawfully, respecting the target site's terms, and avoiding unnecessary personal or sensitive data in inputs. Review the output before storing, sharing, or combining it with other data.
API usage
Use your Apify API token through the APIFY_TOKEN environment variable. Node.js and Python examples wait for the run and read its first dataset page; paginate the dataset for larger exports.
Node.js
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('fetch_cat/airbnb-reviews-scraper').call({"startUrls": [{"url": "https://www.airbnb.com/rooms/20669368"}],"maxReviewsPerListing": 10,"sort": "recent"});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
Python
import jsonimport osfrom apify_client import ApifyClientclient = ApifyClient(os.environ["APIFY_TOKEN"])run_input = json.loads('''{"startUrls": [{"url": "https://www.airbnb.com/rooms/20669368"}],"maxReviewsPerListing": 10,"sort": "recent"}''')run = client.actor("fetch_cat/airbnb-reviews-scraper").call(run_input=run_input)print(client.dataset(run["defaultDatasetId"]).list_items().items)
cURL
Save the quickstart JSON as input.json. This request starts a run asynchronously; use its returned run ID to check completion and its defaultDatasetId to retrieve results.
curl -X POST "https://api.apify.com/v2/acts/fetch_cat~airbnb-reviews-scraper/runs" \-H "Authorization: Bearer $APIFY_TOKEN" \-H "Content-Type: application/json" \--data-binary @input.json
MCP and AI agents
Use the official Apify MCP server, not a separate custom server. The focused URL below selects this Actor. Authenticate with Apify when your client prompts you; configuration syntax and OAuth support depend on the client.
Claude Code
$claude mcp add --transport http apify "https://mcp.apify.com?tools=fetch_cat/airbnb-reviews-scraper"
HTTP-capable MCP client configuration
{"mcpServers": {"apify": {"url": "https://mcp.apify.com?tools=fetch_cat/airbnb-reviews-scraper"}}}
Example prompt: "Export up to 10 recent reviews for each of these Airbnb listing URLs. Separate guest reviews from host replies and do not substitute listing ratings for missing review ratings."
Use the same input keys as the input table. Review the returned source URLs and any error or availability fields before using results in an automated summary.
Support
If a run fails or output looks wrong, open an issue from the Actor page. Include the Apify run ID or run URL, non-sensitive input JSON, expected output, actual output, and one reproducible public URL (or the exact search input). Do not share tokens, cookies, passwords, or private data.