Agoda Review Scraper avatar

Agoda Review Scraper

Pricing

from $0.70 / 1,000 results

Go to Apify Store
Agoda Review Scraper

Agoda Review Scraper

Extract guest reviews from Agoda.com hotel pages anonymously without a login. Input a hotel name, URL, or property ID to get comprehensive hotel summaries and individual review data (ratings, text, stay dates, reviewer country, traveler type) fed directly into a structured dataset for analysis.

Pricing

from $0.70 / 1,000 results

Rating

0.0

(0)

Developer

MrDoe

MrDoe

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Categories

Share

What does Agoda Review Scraper do?

Agoda Review Scraper extracts guest reviews from Agoda hotel pages - anonymously, no login, no Agoda account. Give it a hotel name, a full agoda.com URL, or a numeric property ID, and it returns a hotel-summary row (overall score, total review count) plus individual review rows (rating, title, full text, positives/negatives, reviewer country/traveler type, stay dates, helpful votes).

Why use this Actor?

  • Reputation monitoring - pull a hotel's latest reviews on a schedule and track sentiment/rating trends over time.
  • Competitive research - batch several competing hotels (hotelQueries) and compare review volume, score, and guest sentiment in one dataset.
  • Voice-of-guest analysis - full review text plus separately-tagged positives/negatives feed straight into text analysis without extra parsing.

How to use it

  1. Set hotelQuery (a hotel name, a full agoda.com hotel URL, or a bare numeric property ID) or hotelQueries for a batch.
  2. Pick sortBy (defaults to Most Helpful, matching agoda.com's own default).
  3. Set maxItems to cap the number of review rows.
  4. Click Start.

hotelQueries wins over hotelQuery when filled; duplicates and blanks are dropped automatically.

Input

FieldTypeDescription
hotelQuerystringA hotel name, a full agoda.com hotel URL, or a bare numeric propertyId. Defaults to a demo hotel if blank.
hotelQueriesarrayMany hotel names/URLs/IDs in one run. Wins over hotelQuery when filled.
sortBystringmostHelpful (default), mostRecent, ratingHighToLow, or ratingLowToHigh.
maxItemsintegerCaps the number of review rows produced per run (across all hotel queries). Default 10.
proxyConfigurationobjectA residential proxy is recommended for sustained/high-volume usage.

Resolving a hotel: URL/ID vs. free text

A full agoda.com hotel-page URL (e.g. https://www.agoda.com/marina-bay-sands/hotel/singapore-sg.html) resolves directly - the numeric propertyId is pulled out of the page's raw HTML. A bare numeric ID is used as-is. Free text (a hotel name) is resolved through Agoda's own public autocomplete API (GetUnifiedSuggestResult) - the same one that powers the search box on agoda.com.

Output

One hotelSummary row per hotel query, followed by its review rows, distinguished by kind. Every row has status (success or error).

Hotel summary row:

{
"status": "success",
"kind": "hotelSummary",
"query": "Marina Bay Sands",
"hotelId": "185945",
"hotelName": "Marina Bay Sands",
"overallScore": 8.9,
"overallReviewCount": 48872
}

Review row:

{
"status": "success",
"kind": "review",
"query": "Marina Bay Sands",
"hotelId": "185945",
"hotelName": "Marina Bay Sands",
"reviewId": "1162245625",
"rating": 10,
"ratingText": "Exceptional",
"title": "The best memories",
"comment": "During our trip to Singapore, it was my son's birthday, so we received a complimentary room upgrade...",
"positives": null,
"negatives": null,
"reviewDate": "2026-08-14T04:35:00+07:00",
"checkInDate": "2026-08-13T00:00:00+07:00",
"checkOutDate": "2026-08-14T00:00:00+07:00",
"lengthOfStay": 1,
"reviewerName": "AI",
"reviewerCountry": "Japan",
"travelerType": "Family with young children",
"roomTypeName": "Sands Premier Double Queen Room",
"helpfulVotes": 0,
"unhelpfulVotes": 0,
"hasHotelResponse": false,
"responderName": null,
"provider": "Agoda"
}

How it works

Agoda's hotel-review page is a client-rendered React shell - its raw HTML has empty content divs. Rather than driving a browser to render it, this Actor calls the same internal REST API the page's own JavaScript calls (cronos/property/review/HotelReviews) directly with a plain HTTP POST (got-scraping, no headless browser) and paginates through it with pageNo. Live-verified 2026-08-28: a bare replay of the request body alone returned zero reviews (200 OK, empty array) until the browser's exact extra headers were matched (x-requested-with: XMLHttpRequest, accept: application/json, the cr-currency-*/ag-language-* headers) - with those, a plain cookie-only request returns full review text, ratings, reviewer info, and metadata. No CAPTCHA, DataDome, PerimeterX, or TLS-fingerprint check was hit against this endpoint. A single cookie-collecting request is made once per run and its cookies reused across calls.

Limitations

  • pageSize above ~25 was observed to silently return zero reviews during recon - this Actor always requests 25 per page and paginates instead of asking for a larger page. Pagination stops automatically once a page returns no reviews not already seen, or after 40 pages as a safety cap.
  • No hotel-response body text is exposed by this API - only whether a response exists (hasHotelResponse) and the responder's name, not the response's own text.
  • Free-text search depends on Agoda's own autocomplete matching your text. For an obscure/ambiguous hotel name, pass a direct agoda.com URL or numeric propertyId instead for a reliable match.
  • Review order and content reflect Agoda's own review platform at fetch time (Agoda aggregates reviews collected across several OTA partners under one property).
  • Review text language can vary with the proxy's exit-IP geolocation. Agoda's translation behavior appears to weigh the request's apparent country alongside the ag-language-locale header - a review may come back in its original language (with originalTitle/originalComment duplicating it) rather than translated to English, depending on where the request looks like it's coming from.

Pricing

This Actor uses pay-per-event pricing - one small run-start charge, then a per-row charge for each review row. See the Pricing tab for current rates. Failed lookups land as status: "error" rows and are never charged.

FAQ

Do I need an Agoda account or API key? No - it runs entirely against Agoda's public, logged-out internal API.

Why did I get a hotelSummary row but no review rows? The hotel may genuinely have no reviews yet, or Agoda's review API returned an empty page for this property/sort combination - try a different sortBy.

Can I get the hotel's written response to a review? Not the response text itself - see Limitations. Only whether a response exists and who wrote it.

Disclaimer

This Actor is an independent tool, not affiliated with or endorsed by Agoda. It only accesses data Agoda serves publicly to anonymous visitors. Use it in compliance with Agoda's terms of use and applicable law in your jurisdiction. Found a bug or have a feature request? Use the Issues tab on this Actor's page.