Agoda Reviews Scraper
Pricing
Pay per event
Agoda Reviews Scraper
Bulk Agoda guest reviews for one or more hotels: rating, text, date, traveler type, and a review-score breakdown. No login needed.
Bulk guest reviews for one or more Agoda properties: rating, text, date, traveler type, room type, and (optionally) a per-property review-score breakdown. No account, login or app needed.
This is a narrow, run-based spin-off of the
../agoda-all-in-one-api actor, built from the same
already-verified client code (property-client.ts's reviews() and
reviewScores()), for people who just want a bulk dataset of reviews rather
than an always-on REST API.
Why
Agoda's public app API needs no login and no request signing for reads — the
only quirk is a public per-app client key (AG-Initiator-Api-Key, baked into
every install, not a secret). Every parameter this actor exposes was
live-tested and classified as a real filter, a shaping/ordering flag, or
inert before being wired up.
- Pagination is honest about its own limits. Agoda's own review endpoint reports a total count that undercounts the real end of the list by roughly 10%, and pages past the real end return stale/repeated/out-of-order items instead of an error. This actor stops on an empty page or a page that repeats a review id it already saw for that property — never by trusting the reported total.
- PII is opt-in. Reviewer display name, reviewer-uploaded photos, and the
hotel's response text (which can name the guest) are excluded by default
and only returned when
includeReviewerNameis set.
Input
| Field | Required | Description |
|---|---|---|
propertyIds | yes | One or more Agoda property (hotel) ids. |
maxReviewsPerProperty | no | Stop after this many reviews per property (default 200, spending guard — large hotels have thousands). |
sort | no | recent (default), highest, lowest, helpful. |
traveler | no | Traveler-group filter: all (default), business, couple, solo, family_young_children, family_teens, group. |
languageIds | no | Filter to these review-language ids. Switches Agoda's API to "filter mode" (server-fixed ~50-70 items/page, ignores pageSize). |
roomTypeIds | no | Filter to these room-type ids. Also switches to filter mode. |
provider | no | Keep only agoda or booking.com reviews (client-side filter on Agoda's merged response). Omit for both. |
includeReviewerName | no | Default false. Opt-in for reviewer display name, uploaded photos, and hotel-response text — personal data. |
includeReviewScores | no | Default true. Also fetch and push one review-score-breakdown row per property. |
Output
One dataset row per review (type: "review"), plus one summary row per
property (type: "review-scores-summary") when includeReviewScores is
true. Each review row carries propertyId, reviewId, provider, rating,
title, comment, positives/negatives, dates, traveler group, room
type, and (opt-in) reviewer identity. Each summary row carries the combined
review score, per-provider score with category grades by traveler-group
demographic, and recommendation snippets.
Pricing
Pay-per-event (PPE), tiered by Apify plan (FREE/BRONZE/SILVER/GOLD/PLATINUM/ DIAMOND = 100/92/85/78/72/68% of the FREE price). Priced in line with this account's Agoda All-in-One API for the same events. See the Actor's Pricing tab for exact current prices.
Known limitations
- Review pagination cycles after roughly
total / pageSize + 10%pages — this actor stops when a page comes back empty or repeats a review id already seen, rather than trusting Agoda's own reported total. filter mode(triggered bylanguageIds/roomTypeIds) ignoresmaxReviewsPerProperty's page-size shaping — Agoda returns a server-fixed page size in that mode.- Review-score category grades are aggregate only; Agoda does not expose a
per-review score breakdown, only an overall
rating.
Getting started
npm installnpm run start:dev