# Agoda Hotel Reviews Scraper (`good-apis/agoda-reviews-scraper`) Actor

- **URL**: https://apify.com/good-apis/agoda-reviews-scraper.md
- **Developed by:** [Danny](https://apify.com/good-apis) (community)
- **Categories:** Travel
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$2.00 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Agoda Hotel Reviews Scraper

Pull guest reviews for any Agoda hotel — **rating, title, full review text, the untranslated original, per-review pros/cons, reviewer name/country, traveler type, room type, length of stay, check-in dates, helpful votes, and photos** — straight from a hotel URL. No login, no browser to manage, fast JSON.

Reviews come back **newest first** (or by the sort you choose), and the run also tells you the hotel's **total review count** so you know how deep the well is. A mega-hotel like Marina Bay Sands has tens of thousands of reviews — page through as many as you want.

**Pricing: $2.00 per 1,000 reviews** (pay per result). You're only charged for reviews actually returned.

### What you get

Every review returns:

| Field | Description |
|---|---|
| `review_id` | Stable Agoda review id |
| `rating` | Score out of 10 |
| `rating_text` | Word rating ("Exceptional", "Excellent" …) |
| `title` | Review title (translated) |
| `text` | Full review text (translated to your chosen language) |
| `original_title` / `original_text` | The review exactly as the guest wrote it |
| `positives` / `negatives` | Separate "liked / disliked" notes when present |
| `review_date` | When the review was written (ISO 8601) |
| `check_in_date` / `check_out_date` | The guest's stay dates |
| `length_of_stay` | Nights stayed |
| `reviewer_name` | Reviewer display name |
| `reviewer_country` / `reviewer_country_code` | Reviewer's country |
| `traveler_type` | Solo, Couple, Family, Business … |
| `room_type` | Room the guest booked |
| `helpful_votes` | How many found the review helpful |
| `responder_name` / `response_date` | Hotel's reply, when present |
| `photos` | Guest-uploaded photos, when present |
| `provider` | Review source (Agoda, and partner sites) |

### Input

| Field | Required | Description |
|---|---|---|
| `hotel` | ✓ | Agoda hotel page URL, a `?hid=` URL, or the numeric hotel id |
| `max_reviews` | | How many reviews to return, newest first (default 100, up to 3000) |
| `sort` | | `most_recent`, `most_helpful`, `rating_high`, or `rating_low` |
| `language` | | Locale for translated text (default `en-us`) |

```json
{ "hotel": "https://www.agoda.com/marina-bay-sands/hotel/singapore-sg.html", "max_reviews": 100, "sort": "most_recent" }
```

### Example output

```json
{
  "review_id": 1144429097,
  "rating": 9.2,
  "rating_text": "Exceptional",
  "title": "It was the best hotel, but...",
  "text": "The infinity pool and the view were unforgettable...",
  "original_title": "最高のホテルでしたが…",
  "review_date": "2026-07-09T01:38:00+07:00",
  "check_in_date": "2026-07-06T00:00:00+07:00",
  "length_of_stay": 1,
  "reviewer_name": "YUKA",
  "reviewer_country": "Japan",
  "traveler_type": "Couple",
  "room_type": "Sands Premier King City View",
  "helpful_votes": 0,
  "provider": "Agoda"
}
```

### How to run it

**API**:

```bash
curl -X POST "https://api.apify.com/v2/acts/good-apis~agoda-reviews-scraper/run-sync-get-dataset-items?token=YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"hotel":"https://www.agoda.com/marina-bay-sands/hotel/singapore-sg.html","max_reviews":100,"sort":"most_recent"}'
```

**Python**:

```python
from apify_client import ApifyClient
client = ApifyClient("YOUR_TOKEN")
run = client.actor("good-apis/agoda-reviews-scraper").call(
    run_input={"hotel": "https://www.agoda.com/marina-bay-sands/hotel/singapore-sg.html",
               "max_reviews": 100, "sort": "most_recent"})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item["rating"], item["title"])
```

**Node.js**:

```javascript
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_TOKEN' });
const run = await client.actor('good-apis/agoda-reviews-scraper').call({
  hotel: 'https://www.agoda.com/marina-bay-sands/hotel/singapore-sg.html',
  max_reviews: 100, sort: 'most_recent',
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach(r => console.log(r.rating, r.title));
```

### Pagination & depth

One run pages through the hotel's reviews for you, up to `max_reviews` (up to 3000). Reviews are returned newest first by default; set `sort` to reorder. Agoda aggregates reviews from multiple providers — the scraper reads the largest (Agoda's own) first, then falls through to partner providers to reach your requested count.

### FAQ

**Do I need a login or API key?** No — it reads public hotel reviews.

**Where do I find the hotel URL?** Open the hotel on agoda.com and copy the address bar. You can also paste just the numeric hotel id.

**Why are some reviews rating-only (no text)?** Many Agoda guests leave a score without writing a comment — those come back with the rating filled in and the text empty. That's the genuine review, not a gap.

**Why are reviews in different languages?** Agoda guests write in their own language; the scraper returns the text translated to your chosen `language`, plus the untranslated `original_text`.

**What if a hotel has no reviews?** The run succeeds with an empty dataset — you're not charged for zero results.

**Do you have hotel search and hotel detail too?** Reviews is the surface offered here; hotel search/detail read from a different Agoda endpoint.

# Actor input Schema

## `hotel` (type: `string`):

The Agoda hotel page to scrape reviews for. Paste the hotel's Agoda URL (e.g. 'https://www.agoda.com/marina-bay-sands/hotel/singapore-sg.html'), a URL with a '?hid=' id, or the hotel's numeric Agoda id.

## `max_reviews` (type: `integer`):

How many reviews to return, newest first (up to 3000). Each review is one output item.

## `sort` (type: `string`):

Order reviews by: newest first, most helpful, highest rating first, or lowest rating first.

## `language` (type: `string`):

Language/locale for the translated review text (e.g. 'en-us', 'en-gb'). The original untranslated text is always included as well.

## Actor input object example

```json
{
  "hotel": "https://www.agoda.com/marina-bay-sands/hotel/singapore-sg.html",
  "max_reviews": 100,
  "sort": "most_recent",
  "language": "en-us"
}
```

# Actor output Schema

## `results` (type: `string`):

All scraped items in the default dataset.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "hotel": "https://www.agoda.com/marina-bay-sands/hotel/singapore-sg.html",
    "max_reviews": 100,
    "sort": "most_recent",
    "language": "en-us"
};

// Run the Actor and wait for it to finish
const run = await client.actor("good-apis/agoda-reviews-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "hotel": "https://www.agoda.com/marina-bay-sands/hotel/singapore-sg.html",
    "max_reviews": 100,
    "sort": "most_recent",
    "language": "en-us",
}

# Run the Actor and wait for it to finish
run = client.actor("good-apis/agoda-reviews-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "hotel": "https://www.agoda.com/marina-bay-sands/hotel/singapore-sg.html",
  "max_reviews": 100,
  "sort": "most_recent",
  "language": "en-us"
}' |
apify call good-apis/agoda-reviews-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=good-apis/agoda-reviews-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/WlSe1vVbe3Pul2jkK/builds/sDUfgs0ZiBa1WO0kr/openapi.json
