Agoda Reviews Scraper avatar

Agoda Reviews Scraper

Pricing

from $3.00 / 1,000 reviews

Go to Apify Store
Agoda Reviews Scraper

Agoda Reviews Scraper

Scrape public Agoda hotel guest reviews: rating, text, stay dates, room type, traveler type, and country. HTTP reviews API alternative for hotel comps.

Pricing

from $3.00 / 1,000 reviews

Rating

0.0

(0)

Developer

Andrej Kiva

Andrej Kiva

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

19 days ago

Last modified

Share

Disclaimer: Unofficial tool — not affiliated with, sponsored by, or endorsed by Agoda Company Pte. Ltd. or its affiliates. Data is read from publicly accessible hotel review pages only. No login. You are responsible for complying with applicable law (including GDPR where personal data appears) and the site’s terms. No warranty on accuracy or availability. Provided for informational and research use.

Agoda reviews scraper for public hotel guest reviews: rating, title, text, stay dates, room type, traveler type, and country. Paste a hotel URL or a numeric hotel ID and export one JSON row per review. This is an Agoda API alternative for reputation tracking and hotel comps. Run it from Python, Node.js, cURL, or Apify MCP.

Hotel reviewsRoom rates and calendarVacation rental paceOTA price board
Agoda Reviews Scraper ◄── you are hereBooking.com Occupancy ScraperAirbnb Occupancy ScraperGoogle Hotels Scraper

VRBO calendars sit beside the Airbnb Actor: VRBO Occupancy Scraper.

When to use

  • Export guest reviews for one hotel or a short list of hotel URLs and IDs
  • Keep rating, stay dates, room type, traveler type, and country on the same row
  • Schedule a run that saves only review IDs you have not stored yet
  • Call an Agoda scraper from Python, Node.js, or an AI assistant and download JSON

When not to use

Key features

  • Hotel page URL or numeric hotel ID
  • Rating, title, text, positives, negatives, and helpful votes
  • Booking.com rows that appear on the same public page, with liked and disliked text folded into text when there is no single body
  • Check-in, check-out, length of stay, room type, and traveler type
  • Reviewer display name and country when the page publishes them
  • Hotel score and review count copied onto every review row
  • Sort by newest, highest rating, lowest rating, or most helpful
  • Optional minimum rating, cutoff date, and original language code
  • Monitor mode for scheduled runs on a named Key-Value store
  • HTTP fetch at 256 MB, no browser

Input

FieldRequiredDescription
hotelUrlsOne of theseHotel page URLs or numeric hotel IDs
startUrlsOne of theseThe same hotel pages in the request-list editor
maxReviewsPerHotelNoSaved reviews per hotel. Default 20, maximum 1000
maxHotelsNoHotels per run. Default 10, maximum 50
sortNorecent, ratingHigh, ratingLow, or helpful
minRatingNoMinimum score on a 10-point scale. 0 keeps every rating
cutoffDateNoKeep reviews on or after YYYY-MM-DD
languageNoOriginal language code, such as en or ja
monitorModeNoPush only review IDs that are not already in the named store
monitorStoreNameNoNamed Key-Value store for scheduled runs. Default agoda-reviews-monitor
proxyConfigurationNoLeave off unless a run is blocked

Input example

{
"hotelUrls": ["https://www.agoda.com/marina-bay-sands/hotel/singapore-sg.html"],
"maxReviewsPerHotel": 20,
"sort": "recent",
"minRating": 8
}

Output

Each dataset item is one guest review.

FieldDescription
reviewIdReview id
hotelId / hotelNameHotel id and name
hotelScore / hotelScoreText / hotelReviewCountAll-guest score, label, and count
rating / ratingTextThis review, on a 10-point scale
title / textTitle and body
positives / negativesSplit text when the page provides it
reviewDateReview date
checkInDate / checkOutDate / lengthOfStayStay
reviewerName / reviewerCountry / travelerTypeGuest details published with the review
roomTypeRoom name on the review
providerSource label on the page
helpfulVotesHelpful-vote count
languageOriginal language code when present
hotelUrlPage used for the row
scrapedAtUTC time the row was built

Output example

{
"reviewId": "1169301862",
"hotelId": "185945",
"hotelName": "Marina Bay Sands",
"hotelUrl": "https://www.agoda.com/marina-bay-sands/hotel/singapore-sg.html",
"hotelScore": 8.8,
"hotelScoreText": "Excellent",
"hotelReviewCount": 35624,
"provider": "Agoda",
"rating": 10,
"ratingText": "Exceptional",
"title": "The best hotel",
"text": "A clear stay with a city view.",
"positives": "Pool",
"negatives": null,
"reviewDate": "2026-09-30",
"checkInDate": "2026-08-13",
"checkOutDate": "2026-08-16",
"lengthOfStay": 3,
"reviewerName": "Guest",
"reviewerCountry": "Japan",
"travelerType": "Family with young children",
"roomType": "Premier Double",
"helpfulVotes": 2,
"language": "ja",
"scrapedAt": "2026-10-06T00:00:00Z"
}

Use cases

JobWhat you get
Reputation exportNewest reviews for one hotel URL, with rating and text
Comp setThe same cutoff date across a short list of hotel IDs
Scheduled watchmonitorMode on a named store so the next run keeps only new review IDs
Guest mixTraveler type, room type, country, and language on each row
Rate contexthotelId for Booking.com Occupancy Scraper when you also need the calendar

Integration examples

Replace APIFY_TOKEN with your Apify token. The Actor name is crawloop/agoda-reviews-scraper.

Node.js

import { ApifyClient } from "apify-client";
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor("crawloop/agoda-reviews-scraper").call({
hotelUrls: ["https://www.agoda.com/marina-bay-sands/hotel/singapore-sg.html"],
maxReviewsPerHotel: 20,
sort: "recent",
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

Python

import os
from apify_client import ApifyClient
client = ApifyClient(os.environ["APIFY_TOKEN"])
run = client.actor("crawloop/agoda-reviews-scraper").call(run_input={
"hotelUrls": ["https://www.agoda.com/marina-bay-sands/hotel/singapore-sg.html"],
"maxReviewsPerHotel": 20,
"sort": "recent",
})
items = client.dataset(run["defaultDatasetId"]).list_items().items
print(items)

cURL

curl "https://api.apify.com/v2/acts/crawloop~agoda-reviews-scraper/runs?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"hotelUrls":["https://www.agoda.com/marina-bay-sands/hotel/singapore-sg.html"],"maxReviewsPerHotel":20,"sort":"recent"}'

MCP and AI assistants

Use this Actor from AI tools via Apify MCP. Connect your Apify account, then call this Actor by its Store name.

Example prompts:

  • "Run Agoda Reviews Scraper for Marina Bay Sands and return the newest 20 reviews as JSON"
  • "Scrape Agoda hotel reviews with a minimum rating of 8 and summarize traveler type, room type, and country"
  • "Chain Agoda Reviews Scraper, then Booking.com Occupancy Scraper, for the same hotel's reviews and sold nights"

Suite next step

After the review export, run Booking.com Occupancy Scraper for public room rates and the availability calendar. For a cross-OTA price board, use Google Hotels Scraper.

FAQ

Does this Agoda scraper log in?

No. It reads the public review list for a hotel URL or numeric hotel ID.

What does one dataset row mean?

One saved guest review. The hotel score is copied onto that row so you can filter without a second dataset.

Are Booking.com reviews included?

Yes, when they appear on the same public hotel page. If the body is empty, liked and disliked text is joined into text. There is no separate provider filter.

Why is a scheduled run empty?

monitorMode stores review IDs. The first run pushes the reviews it sees and stores those IDs. Later runs push a row only when the ID was not stored before. A cutoff date in the future also returns no rows.

Can I keep one language?

Set language to an original language code such as en or ja. Leave it empty to keep every language the page returns.