Agoda Reviews Scraper
Pricing
from $2.00 / 1,000 results
Agoda Reviews Scraper
[๐ฐ $2.0 / 1K] Extract guest reviews from Agoda hotels and accommodations. Collect ratings, reviewer details, stay info, and management responses. Filter by language, rating, and reviewer country.
Pricing
from $2.00 / 1,000 results
Rating
0.0
(0)
Developer
SolidCode
Actor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
Pull guest reviews from any Agoda hotel or accommodation โ ratings, reviewer profiles, stay details, and management responses โ for as many properties as you need in one run. Built for hospitality teams, market researchers, and travel data analysts who need structured Agoda review data at scale without building or maintaining their own pipeline.
Why This Scraper?
- Management responses captured verbatim โ every reply includes the responder's name, response date, and the full response text. Audit how properties handle criticism or showcase service quality without leaving the dataset.
- Reviewer profile on every row โ country of origin, traveler type (Solo, Couple, Family, Business), booked room type, and length of stay surface as structured fields, not buried in free text.
- 4 Agoda-native sort modes โ Most Recent, Highest Rated, Lowest Rated, and Most Helpful. The sort is honored by Agoda's own API, so you get the same ordering a guest would see on-site.
- Batch input โ URLs or numeric IDs โ paste a list of hotel page URLs, supply bare Agoda hotel IDs, or mix both in the same run. No one-at-a-time lookups.
- Reviewer language preserved on every row โ the
reviewLanguageISO code (en,ja,ko,de,zh-tw, โฆ) appears on each row so you can group or filter reviews by language after collection without re-running the actor. - Both rating number and label on every row โ
ratinggives the 1โ10 numeric score;ratingTextgives Agoda's bucket label ("Exceptional", "Excellent", "Very good", "Good", "Review score") for direct display or segmentation without a lookup table. - Optional hotel metadata embedded on every row โ toggle
Include Hotel Info on Every Rowto add the hotel name, overall rating, and URL to each review. Invaluable when scraping multiple hotels into one flat CSV for downstream analysis. - Honest pagination โ no silent caps โ set
maxReviewsPerHotelto 1,000 and you get 1,000 reviews (or all available, whichever is smaller). The last page is always kept whole, so you never lose a review mid-page.
Use Cases
Hospitality Reputation Management
Track your property's newest reviews as they arrive. Pull with sort: Most Recent on a weekly schedule to catch issues before they accumulate. The responseText field lets you verify your team is actually replying โ not just that replies were promised.
Hotel Market Research & Competitive Benchmarking
Collect reviews for 10โ50 competing hotels in one run. Compare rating distributions, traveler-type breakdowns, and room-type sentiment across the competitive set. The hotelName field on every row makes it trivial to pivot in Excel or any BI tool.
Sentiment Analysis & ML Training Data
Each review row carries distinct reviewPositives, reviewNegatives, and reviewComments fields โ pre-split by the reviewer, not by you. Combine with the numeric rating and Agoda's label bucket for high-quality labeled training data for hospitality sentiment models.
Travel Aggregator Sourcing
Agoda pools reviews from its own platform and partner booking sources, deduplicated per property. The reviewProviderText field identifies the source of each review, giving you cross-platform coverage without managing multiple scraper setups.
Reviewer-Demographic Insights
Group reviews by reviewerGroupName (Solo, Couple, Family with young children, Business) and reviewerCountryName to understand which traveler segments rate a property well and which do not. Filter on reviewerLengthOfStay to separate weekend breaks from week-long visits.
Getting Started
Minimal โ One Hotel URL
Paste any Agoda hotel page URL and collect 100 reviews with defaults:
{"startUrls": ["https://www.agoda.com/the-peninsula-bangkok/hotel/bangkok-th.html"]}
Sort + Cap โ Recent Reviews with a Limit
Collect the 500 most recent reviews using a numeric hotel ID:
{"hotelIds": ["10715"],"sort": "mostRecent","maxReviewsPerHotel": 500}
Multi-Hotel Benchmarking
Compare top-rated reviews across three competing properties:
{"startUrls": ["https://www.agoda.com/the-peninsula-bangkok/hotel/bangkok-th.html","https://www.agoda.com/the-okura-prestige-bangkok/hotel/bangkok-th.html","https://www.agoda.com/mandarin-oriental-bangkok-hotel/hotel/bangkok-th.html"],"sort": "highestRated","maxReviewsPerHotel": 200,"includeHotelInfo": true}
Lean Output โ Reviews Only, No Hotel Metadata
When you are scraping a single hotel and already know which property the data belongs to, strip hotel metadata to keep rows compact:
{"hotelIds": ["10715"],"maxReviewsPerHotel": 1000,"includeHotelInfo": false,"includeManagementResponses": false}
Input Reference
Hotels to Scrape
| Parameter | Type | Default | Description |
|---|---|---|---|
startUrls | string[] | โ | One or more Agoda hotel page URLs. Example: https://www.agoda.com/hotel-name/hotel/city_name.html. Use this or Hotel IDs โ not both. |
hotelIds | string[] | โ | Numeric Agoda hotel IDs (e.g. 6901). Faster than URLs when you already have the ID โ skips the URL-resolution step. |
Review Options
| Parameter | Type | Default | Description |
|---|---|---|---|
maxReviewsPerHotel | integer | 100 | Maximum reviews to collect per hotel. Leave empty to collect all available. Large hotels may have tens of thousands โ set a limit to control costs. |
sort | select | Most Recent | Order in which to retrieve reviews: Most Recent, Highest Rated, Lowest Rated, or Most Helpful. |
Output Options
| Parameter | Type | Default | Description |
|---|---|---|---|
includeHotelInfo | boolean | true | Adds hotel name, overall rating, and URL to every review row. Recommended when scraping multiple hotels so each row is self-identifying. |
includeManagementResponses | boolean | true | Includes hotel management replies โ response date, responder name, and full response text โ on every applicable row. |
Output
Each row is one review. Here is a representative example with all fields enabled:
{"hotelReviewId": "73849201","rating": 9.6,"ratingText": "Exceptional","reviewTitle": "Flawless service as always","reviewComments": "Staying at the Peninsula never disappoints. Staff remembered our names throughout the five-night stay.","reviewPositives": "Staff attentiveness, room cleanliness, rooftop pool","reviewNegatives": "","reviewLanguage": "en","reviewDate": "2024-11-15T08:42:00+07:00","checkInDate": "2024-11-10T00:00:00+07:00","checkOutDate": "2024-11-15T00:00:00+07:00","reviewerName": "Sophie T.","reviewerCountry": "GB","reviewerCountryName": "United Kingdom","reviewerGroupName": "Couple","reviewerRoomTypeName": "Deluxe River View Room","reviewerLengthOfStay": "5 nights","reviewProviderText": "Agoda","responseDate": "2024-11-18T09:20:18","responderName": "The Peninsula Bangkok","responseText": "Dear Sophie, thank you so much for your kind words and for celebrating with us.","hotelId": 10715,"hotelName": "The Peninsula Bangkok","hotelOverallRating": 9.4,"hotelAddress": null,"hotelUrl": "https://www.agoda.com/the-peninsula-bangkok/hotel/bangkok-th.html"}
Core Review Content
| Field | Type | Description |
|---|---|---|
hotelReviewId | string | Unique Agoda review identifier |
rating | number | Reviewer score from 1 to 10 |
ratingText | string | Agoda's label bucket: "Exceptional", "Excellent", "Very good", "Good", or "Review score" |
reviewTitle | string | Review headline as written by the guest |
reviewComments | string | Full review body text |
reviewPositives | string | What the guest liked (reviewer-filled structured field) |
reviewNegatives | string | What the guest did not like (reviewer-filled structured field) |
reviewLanguage | string | ISO language code of the review text (e.g. en, ja, ko, de) |
reviewDate | string | ISO 8601 datetime with timezone offset when the review was published (e.g. 2024-11-15T08:42:00+07:00) |
reviewProviderText | string | Source platform (e.g. "Agoda", "Booking.com") |
Reviewer Profile & Stay Details
| Field | Type | Description |
|---|---|---|
reviewerName | string | Reviewer's display name |
reviewerCountry | string | Reviewer's country as an ISO alpha-2 code (e.g. GB, JP, US) |
reviewerCountryName | string | Reviewer's country as a full name (e.g. "United Kingdom") |
reviewerGroupName | string | Traveler type: Solo, Couple, Family with young children, Business, etc. |
reviewerRoomTypeName | string | Room type the reviewer booked |
reviewerLengthOfStay | string | Formatted stay duration (e.g. "3 nights") |
checkInDate | string | Guest check-in date as ISO 8601 datetime with timezone offset |
checkOutDate | string | Guest check-out date as ISO 8601 datetime with timezone offset |
Management Response
Present on every row when includeManagementResponses is true. Fields are empty strings when no management response exists for a review.
| Field | Type | Description |
|---|---|---|
responseDate | string | ISO 8601 datetime when management published the response (e.g. 2024-11-18T09:20:18) |
responderName | string | Name or handle of the responder |
responseText | string | Full text of the management reply |
Hotel Metadata
Present on every row when includeHotelInfo is true.
| Field | Type | Description |
|---|---|---|
hotelId | number | Agoda's numeric hotel identifier |
hotelName | string | Hotel display name |
hotelOverallRating | number | Hotel's aggregate rating score |
hotelAddress | string | Hotel address (null โ not returned by Agoda's review API) |
hotelUrl | string | Agoda hotel page URL |
Tips for Best Results
- Use
sort: Most Recentfor ongoing reputation tracking. Pull weekly and compare against your previous run usingreviewDateto surface only new reviews. A cap of 50โ100 per hotel is enough for most weekly sweeps. - Combine
includeManagementResponses: truewithsort: Lowest Ratedto audit how a property handles its harshest critics. Reviews with an emptyresponseTextare unanswered complaints you can act on immediately. - Use
hotelIdsinstead of URLs when you already have them. Numeric IDs skip the URL-to-ID resolution step, making multi-hotel batch runs faster. You can find a hotel's ID in the Agoda URL structure or via a one-off URL scrape. - Keep
includeHotelInfo: truefor multi-hotel runs. Every row carrieshotelNameandhotelId, so you can export a single flat CSV and pivot by property without a secondary join. - For sentiment ML training, pull 1,000+ reviews per hotel and group on
reviewLanguageafterward. The pre-splitreviewPositivesandreviewNegativesfields are ready-made labeled data โ no sentence segmentation needed. - Agoda returns up to 50 reviews per page. Setting
maxReviewsPerHotelbelow 50 still yields up to 50 results because the last page is kept whole. At $2/1,000, the maximum overshoot cost is $0.10. - Start small to verify. Set
maxReviewsPerHotel: 50on your first run to confirm the hotel URL resolves and the data shape matches your needs, then scale up to thousands.
Pricing
$2.00 per 1,000 reviews โ pay per result returned.
| Reviews | Cost |
|---|---|
| 100 | $0.20 |
| 1,000 | $2.00 |
| 10,000 | $20.00 |
| 100,000 | $200.00 |
No compute charges โ you only pay per result returned.
A "result" is one review row in the output dataset.
Integrations
Export your data in JSON, CSV, Excel, XML, or RSS and connect to your existing stack. Apify integrates natively with:
- Zapier / Make / n8n โ trigger downstream workflows when new reviews land
- Google Sheets โ export directly to a spreadsheet for stakeholder sharing
- Slack / Email โ notify your team when runs complete
- Webhooks โ push review data to any custom endpoint in real time
- Apify API โ schedule runs, retrieve datasets, and integrate programmatically from any language
Legal & Ethical Use
This actor collects publicly visible guest reviews from Agoda. Users are responsible for ensuring their use of the collected data complies with Agoda's Terms of Service, applicable data protection regulations (including GDPR where relevant), and any local laws governing the storage and processing of user-generated content. Do not use extracted data for spam, identity fraud, harassment, or any other unlawful purpose.