# Agoda Hotel Reviews Scraper: Guest Reviews, Replies, New Only (`getascraper/agoda-hotel-reviews-scraper`) Actor

Scrape Agoda hotel reviews by page link or hotel ID: score, full text, reviewer country, traveler type, room, stay dates and hotel replies. Filter by score, language and date, run many hotels at once, and get only new reviews on each scheduled run. No login or cookies. Export JSON, CSV or Excel.

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

## Pricing

from $2.30 / 1,000 review rows

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## 🏨 Agoda Hotel Reviews Scraper: Guest Reviews, Replies, New Only

<table width="100%" style="margin-bottom:0">
<tr>
<td style="padding:24px 28px;background:#EFF4FD;border:1px solid #CCDBF6;border-top:4px solid #2A62D6;border-radius:12px">
<span style="font-size:23px;font-weight:800;color:#1C1917;line-height:1.3">Every Agoda guest review for every hotel you track, in one run</span><br>
<span style="font-size:15px;color:#57534E;line-height:1.6">Pull scores, full review text, reviewer country, traveler type, room, stay dates and the hotel's own replies from Agoda. Filter what matters and get only new reviews on every scheduled run.</span>
</td>
</tr>
</table>
<table width="100%" style="margin-top:0">
<tr>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #CCDBF6;border-radius:10px 0 0 10px;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#1E47A0">🏨 Many hotels per run</span><br>
<span style="font-size:12px;color:#57534E">Paste a list of hotel pages or IDs and get one clean table</span>
</td>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #CCDBF6;border-left:none;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#1E47A0">💬 Replies included</span><br>
<span style="font-size:12px;color:#57534E">See which reviews management answered, and which still wait</span>
</td>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #CCDBF6;border-left:none;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#1E47A0">🔔 Only what is new</span><br>
<span style="font-size:12px;color:#57534E">Schedule it and every run delivers just the latest reviews</span>
</td>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #CCDBF6;border-left:none;border-radius:0 10px 10px 0;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#1E47A0">🎯 Filter and sort</span><br>
<span style="font-size:12px;color:#57534E">By score, language, traveler type, date and answered status</span>
</td>
</tr>
</table>

Hotel reputation work lives in the details: who complained, from which country, in which room, and whether anyone replied.
This Actor collects all of it from [Agoda](https://www.agoda.com) without a login and delivers it in rows you can open in Excel, a dashboard, or your own tools.

### 🔍 What does Agoda Hotel Reviews Scraper do?

You give it Agoda hotel page links or hotel IDs. It returns one row per guest review with the score, title, full text, the language the guest wrote in, review date, stay month, length of stay, room type, traveler type, reviewer name and country, helpful votes, guest photos and the hotel's reply.

Agoda shows reviews from its own guests and from partner sites. Both come back in the same table, and every row says which source it came from. Results stream into the dataset while the run is still going, so you can start reading after the first page.

<table width="100%"><tr>
<td style="padding:12px 18px;background:#EFF4FD;border-left:4px solid #2A62D6">
<span style="font-size:15px;color:#1C1917">&#9889; <b>No login, no cookies, no Agoda account.</b> Add as many hotels as you need and the Actor works through them in one run.</span>
</td>
</tr></table>

### 💡 Why use it

- **I run revenue for a hotel group** and need review scores and complaint themes for my hotels and my competitive set in one export, so pricing talks start from what guests actually say.
- **I manage online reputation** and want to see every low score with no hotel reply, so my team answers the right reviews first.
- **I analyse travel markets** and need reviewer country, traveler type and language, to see which guests rate a destination highest.
- **I run an agency for several properties** and want a scheduled run that sends only new reviews each week, instead of re-reading old ones.

### 🚀 How to use it

<table width="100%">
<tr>
<td style="padding:16px 14px;width:33%;background:#EFF4FD;border:1px solid #CCDBF6;border-radius:10px 0 0 10px;vertical-align:top">
<span style="font-size:12px;font-weight:800;color:#2A62D6;letter-spacing:1px">STEP 1</span><br>
<span style="font-size:14px;font-weight:700;color:#1C1917">Add your hotels</span><br>
<span style="font-size:12px;color:#57534E">Paste Agoda hotel page links or numeric hotel IDs, one per line.</span>
</td>
<td style="padding:16px 14px;width:33%;background:#EFF4FD;border:1px solid #CCDBF6;border-left:none;vertical-align:top">
<span style="font-size:12px;font-weight:800;color:#2A62D6;letter-spacing:1px">STEP 2</span><br>
<span style="font-size:14px;font-weight:700;color:#1C1917">Set your filters</span><br>
<span style="font-size:12px;color:#57534E">Pick how many reviews per hotel, then narrow by score, language, traveler type or date.</span>
</td>
<td style="padding:16px 14px;width:33%;background:#EFF4FD;border:1px solid #CCDBF6;border-left:none;border-radius:0 10px 10px 0;vertical-align:top">
<span style="font-size:12px;font-weight:800;color:#2A62D6;letter-spacing:1px">STEP 3</span><br>
<span style="font-size:14px;font-weight:700;color:#1C1917">Run and export</span><br>
<span style="font-size:12px;color:#57534E">Download JSON, CSV or Excel, or schedule the run to get new reviews automatically.</span>
</td>
</tr>
</table>

The default input collects the 20 newest reviews from two sample hotels, so you can see the output before you change anything.

### 📥 Input

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| Hotels (page URLs or hotel IDs) | array of text | No | One Agoda hotel per line: the hotel page link (any Agoda country site or language) or the numeric hotel ID. |
| Review sources | array of options | No | Keep reviews from Agoda guests, Booking.com guests, Priceline guests, or other partner sites. All are kept by default. |
| Review languages | array of options | No | Only reviews written in these languages. Reviews are returned in the language the guest wrote. Empty means all. |
| Traveler types | array of options | No | Business travelers, couples, solo travelers, families with young children, families with teens, or groups of friends. |
| Minimum score | number | No | Only reviews scoring at least this value on Agoda's 1 to 10 scale. |
| Maximum score | number | No | Only reviews scoring at most this value. Set it to 6 to focus on complaints. |
| Reviews written from | date or span | No | Only reviews on or after this date. Use a calendar date or a span such as 30 days. |
| Reviews written until | date or span | No | Only reviews on or before this date. |
| Hotel response | option | No | All reviews, only reviews the hotel answered, or only reviews still without an answer. |
| Sort and pick by | option | No | Newest, highest score, lowest score, or most helpful first. Decides which reviews you get when a hotel has more than your limit. |
| Max reviews per hotel | integer | No | Upper limit per hotel. Set 0 to collect every review Agoda exposes for the hotel. |
| Only reviews not delivered before | checkbox | No | For scheduled runs: each run returns only reviews that appeared since the last run with the same monitor name. |
| Monitor name | text | No | Name of the saved memory used by the option above. Use a different name for each schedule. |
| Add a hotel summary row | checkbox | No | Adds one row per hotel with overall score, category scores, address, star rating and review counts per source. |
| Proxy configuration | proxy | No | Connection settings. The default works for normal use. |

### 📤 Output

You can download the dataset in various formats such as JSON, HTML, CSV, or Excel. Missing details are left out of a row instead of being filled with placeholders.

```json
{
  "recordType": "review",
  "reviewId": 1194205555,
  "hotelId": 335650,
  "hotelName": "The Magani Hotel and Spa",
  "hotelCity": "Bali",
  "hotelCountry": "Indonesia",
  "source": "Agoda",
  "score": 10,
  "scoreLabel": "Exceptional",
  "title": "Group stay",
  "text": "The Magani was a great stay for a group. Loved the location, sauna, breakfast and size of the room.",
  "language": "en",
  "reviewDate": "2026-10-14",
  "stayCheckIn": "2026-10-05",
  "stayCheckOut": "2026-10-10",
  "stayMonth": "2026-10",
  "lengthOfStay": 5,
  "travelerType": "Couple",
  "roomType": "Deluxe Room Double Bed",
  "reviewerName": "Linda",
  "reviewerCountry": "Australia",
  "reviewerCountryCode": "AU",
  "helpfulVotes": 0,
  "hasHotelResponse": true,
  "hotelResponse": "Dear Linda, thank you for sharing your wonderful feedback...",
  "hotelResponseDate": "2026-10-15",
  "hotelResponder": "The Magani Hotel and Spa"
}
```

### 📊 Data table

| Field | Type | Description |
| --- | --- | --- |
| recordType | text | `review`, or `hotel` for summary rows. |
| reviewId | number | Agoda's identifier for the review. |
| hotelId, hotelName, hotelUrl | number, text, link | The hotel the review belongs to. |
| hotelCity, hotelCountry | text | Where the hotel is. |
| source | text | Where the guest wrote the review: Agoda, Booking.com, Priceline.com or another partner. |
| score, scoreLabel | number, text | Score on the 1 to 10 scale and its label, such as Exceptional. |
| title | text | Review headline. |
| text | text | Full review text in the guest's language. |
| positives, negatives | text | What the guest liked and disliked, when the source separates them. |
| language | text | Language code of the review. |
| reviewDate | date | Day the review was written. |
| stayCheckIn, stayCheckOut, stayMonth | date, text | Stay dates and month, when the source gives them. |
| lengthOfStay | number | Nights stayed. |
| travelerType | text | Business traveler, couple, solo traveler, family or group. |
| roomType | text | Room the guest booked, when given. |
| reviewerName, reviewerCountry, reviewerCountryCode | text | Who wrote it and where they are from. |
| reviewerReviewCount, isExpertReviewer | number, yes or no | Reviewer experience, when shown. |
| helpfulVotes | number | How many guests found the review helpful. |
| photos | list of links | Photos the guest attached. |
| hasHotelResponse | yes or no | Whether the hotel replied. |
| hotelResponse, hotelResponseDate, hotelResponder | text, date, text | The reply, its date and who wrote it. |
| originalTitle, originalText | text | The original wording, when Agoda stores one next to a translation. |
| scrapedAt | date and time | When the row was collected. |

Hotel summary rows (turn on **Add a hotel summary row**) carry the hotel name, address, star rating, overall score, scores for cleanliness, location, service, value and more, the total review count, and the count per review source. The same summaries are always saved to the `HOTELS` record of the run at no extra cost.

### 💰 Pricing

Pricing is pay per result, with no subscription. Hotels that are not found, or that have no reviews matching your filters, add no rows.

Free plan runs are limited to 25 rows per run, 3 runs per day, and a short wait between runs. Paid plans have no such limits.

### ⭐ Enjoying Agoda Hotel Reviews Scraper?

<table width="100%">
<tr>
<td style="padding:20px 24px 14px;background:#EFF4FD;border:1px solid #CCDBF6;border-left:5px solid #2A62D6;border-radius:10px 10px 0 0">
<span style="font-size:20px;letter-spacing:4px">⭐ ⭐ ⭐ ⭐ ⭐</span><br>
<span style="font-size:17px;font-weight:800;color:#1C1917">Stopped copying reviews by hand from hotel pages? Tell others it saves hours.</span><br>
<span style="font-size:14px;color:#57534E">A 5-star rating takes 10 seconds and helps other revenue and reputation managers find it. Your feedback also tells us what to build next.</span>
</td>
</tr>
<tr>
<td style="padding:0;background:#2A62D6;border:1px solid #CCDBF6;border-top:none;border-radius:0 0 10px 10px;text-align:center">
<a href="https://apify.com/getascraper/agoda-hotel-reviews-scraper/reviews" style="display:block;padding:13px 16px;color:#FFFFFF;text-decoration:none;font-weight:800;font-size:15px;letter-spacing:0.3px">★&nbsp;&nbsp;Rate this Actor on Apify</a>
</td>
</tr>
</table>

### 🧭 Tips

- **Start small.** Keep the default limit while you test filters, then raise it.
- **Find complaints fast.** Set Maximum score to 6 and Hotel response to "only reviews without a hotel response" to build a reply list.
- **Track a competitive set.** Put your hotel and its rivals in one run and compare scores, traveler types and reply rates side by side.
- **Use monitor mode on a schedule.** Turn on "Only reviews not delivered before", give it a monitor name, and schedule the Actor daily or weekly. The first run returns the newest reviews up to your limit, later runs return only what is new.
- **Read the language.** Each row carries the language code, so you can send German reviews to a German speaker or run your own translation.

### ❓ FAQ

**How do I scrape Agoda reviews without an account?**
Paste the hotel page link or the numeric hotel ID. No login, API key, or cookie is needed.

**Can I get reviews for many hotels at once?**
Yes. Add every hotel on its own line. Each row carries the hotel name and ID, so one table covers the whole list.

**How many reviews can I get per hotel?**
Agoda keeps a hotel's own guest reviews available in full. Reviews that come from partner sites are available for roughly the most recent year. Set the limit to 0 to collect everything Agoda exposes.

**Can I search by city instead of listing hotels?**
Not yet. The Actor works from hotel page links and hotel IDs, which you can copy from Agoda.

**Is it legal to scrape Agoda reviews?**
The Actor collects publicly visible review content. You are responsible for using the data in line with Agoda's terms and the privacy rules in your country, especially for reviewer names.

**Something looks wrong with my results. Where do I report it?**
Open the Issues tab on the Actor page. Include the hotel link and your input, and we will look at it.

### 🔗 Other actors

- [Ostrovok Hotels Scraper](https://apify.com/getascraper/ostrovok-hotels-scraper) ↗ - Live hotel prices and availability from Ostrovok by city and date.
- [Ostrovok Reviews Scraper](https://apify.com/getascraper/ostrovok-reviews-scraper) ↗ - Full guest reviews with hotel replies from Ostrovok.
- [Choice Hotels Scraper](https://apify.com/getascraper/choice-hotels-scraper) ↗ - Room rates, reviews and rate-drop alerts for Choice Hotels properties.
- [Trip.com & Ctrip Hotel Scraper](https://apify.com/getascraper/ctrip-hotel-rate-intelligence) ↗ - Hotel prices, reviews and change tracking from Trip.com and Ctrip.

# Changelog

This Actor's version history is a separate document: https://apify.com/getascraper/agoda-hotel-reviews-scraper/changelog.md

# Actor input Schema

## `hotels` (type: `array`):

One Agoda hotel per line: the hotel page URL (any Agoda country site or language) or the numeric hotel ID. Add as many hotels as you like, they are all collected in one run.

## `reviewSources` (type: `array`):

Agoda shows reviews from its own guests and from partner sites. Pick which sources to keep. Every row says where it came from in the source field.

## `languages` (type: `array`):

Only reviews written in these languages. Reviews are always returned in the language the guest wrote them in. Leave empty for all languages.

## `travelerTypes` (type: `array`):

Only reviews from these kinds of travelers, for example business travelers or families. Leave empty for all.

## `minScore` (type: `number`):

Only reviews scoring at least this on Agoda's 1 to 10 scale. Use it to find happy guests.

## `maxScore` (type: `number`):

Only reviews scoring at most this on the 1 to 10 scale. Set it to 6 to focus on complaints and service problems.

## `reviewDateFrom` (type: `string`):

Only reviews written on or after this date. Use a calendar date or a relative span such as 30 days or 3 months.

## `reviewDateTo` (type: `string`):

Only reviews written on or before this date. Use a calendar date or a relative span.

## `responseFilter` (type: `string`):

Keep every review, only those the hotel has answered, or only those still waiting for an answer. Handy for reputation teams working through a reply backlog.

## `sortBy` (type: `string`):

Decides which reviews you get when a hotel has more than the limit below, and the order within each batch of results.

## `maxReviewsPerHotel` (type: `integer`):

Upper limit of reviews returned for each hotel. Agoda only lists a hotel's most recent partner-site reviews (about the last year), so very large values mostly return everything available. Set 0 to collect every review Agoda exposes.

## `newReviewsOnly` (type: `boolean`):

Schedule the Actor daily or weekly and each run returns only reviews that appeared since the last run with the same monitor name. The first run returns the newest reviews up to the limit above.

## `monitorName` (type: `string`):

Name of the saved memory used by the option above. Use a different name for each schedule so they do not share what has already been delivered.

## `includeHotelSummary` (type: `boolean`):

Adds one extra row per hotel with its overall score, the scores for cleanliness, location, service, value and more, address, star rating and review counts per source. The same data is always saved to the HOTELS record of the run, free of charge.

## `proxyConfiguration` (type: `object`):

Apify Proxy settings. The default datacenter proxy works for normal use. Switch to residential only if Agoda starts refusing requests.

## Actor input object example

```json
{
  "hotels": [
    "https://www.agoda.com/bayswater-inn-hotel/hotel/london-gb.html",
    "335650"
  ],
  "reviewSources": [
    "agoda",
    "booking",
    "priceline",
    "partners"
  ],
  "responseFilter": "any",
  "sortBy": "newest",
  "maxReviewsPerHotel": 20,
  "newReviewsOnly": false,
  "monitorName": "default",
  "includeHotelSummary": false,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `reviews` (type: `string`):

No description

## `hotels` (type: `string`):

No description

## `runSummary` (type: `string`):

No description

# 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 = {
    "hotels": [
        "https://www.agoda.com/bayswater-inn-hotel/hotel/london-gb.html",
        "335650"
    ],
    "reviewSources": [
        "agoda",
        "booking",
        "priceline",
        "partners"
    ],
    "responseFilter": "any",
    "sortBy": "newest",
    "maxReviewsPerHotel": 20,
    "newReviewsOnly": false,
    "monitorName": "default",
    "includeHotelSummary": false,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("getascraper/agoda-hotel-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 = {
    "hotels": [
        "https://www.agoda.com/bayswater-inn-hotel/hotel/london-gb.html",
        "335650",
    ],
    "reviewSources": [
        "agoda",
        "booking",
        "priceline",
        "partners",
    ],
    "responseFilter": "any",
    "sortBy": "newest",
    "maxReviewsPerHotel": 20,
    "newReviewsOnly": False,
    "monitorName": "default",
    "includeHotelSummary": False,
    "proxyConfiguration": { "useApifyProxy": True },
}

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

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

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

```

## CLI example

```bash
echo '{
  "hotels": [
    "https://www.agoda.com/bayswater-inn-hotel/hotel/london-gb.html",
    "335650"
  ],
  "reviewSources": [
    "agoda",
    "booking",
    "priceline",
    "partners"
  ],
  "responseFilter": "any",
  "sortBy": "newest",
  "maxReviewsPerHotel": 20,
  "newReviewsOnly": false,
  "monitorName": "default",
  "includeHotelSummary": false,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call getascraper/agoda-hotel-reviews-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,getascraper/agoda-hotel-reviews-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

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