# Agoda API (Unofficial) | Agoda Guest Reviews & Ratings (`aurelix/agoda-reviews-scraper`) Actor

Scrape Agoda guest reviews at $0.50 per 1,000 with this unofficial Agoda API, cheaper than the leading tools: Agoda and Booking.com reviews, owner replies, ratings, hotel scores and sub-scores. Many hotels per run by link, ID or name.

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

## Pricing

from $0.40 / 1,000 review results

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

### What is Agoda API?

**Agoda and Booking.com guest reviews with hotel scores and sub-scores, for $0.50 per 1,000 reviews, many hotels per run, no login.**

For hotel managers, reputation agencies and travel analysts. Paid Apify plans pay $0.40 per 1,000. Start from links, Agoda IDs or hotel names. The example input (1 hotel, 20 reviews) costs about $0.015.

[![Agoda API: example output from a real run](https://api.apify.com/v2/key-value-stores/twkCCtTWzsi8fVbx5/records/agoda-reviews-scraper-card-v1.png)](https://apify.com/aurelix/agoda-reviews-scraper)

| | |
|---|---|
| **Reviews** | Agoda guests and Booking.com guests, every written review Agoda lists (up to 5,000 per source) |
| **Start from** | Hotel links (any language version), Agoda hotel IDs or hotel names |
| **Hotel data** | Star rating, address, scores, review counts and 6 sub-scores on every row |
| **Filters** | Source, language, rating range, newer than a date, order |
| **Output** | 45 fields per review; JSON, CSV, Excel, API |
| **Automate** | Only-new-reviews mode, schedules, Slack/webhook digest, Zapier, Make, n8n, MCP |
| **Price** | $0.50 per 1,000 reviews ($0.40 per 1,000 reviews on paid Apify plans) |
| **Login needed** | No |

### Daily monitor: only what's new, every morning

Set it once, get only the new reviews every morning. With **Only new reviews** on, the first run returns each hotel's newest reviews up to 'Reviews per hotel'; each later run returns only reviews newer than the ones you already received, so you pay only for new ones.

```json
{
  "hotels": [
    "https://www.agoda.com/the-peninsula-bangkok/hotel/bangkok-th.html",
    "https://www.agoda.com/ibis-budapest-city/hotel/budapest-hu.html"
  ],
  "maxReviewsPerHotel": 500,
  "onlyNewReviews": true,
  "trackingName": "my-hotels-daily"
}
```

1. Paste this input into the **Input** tab (JSON view) and click **Save as a new task**; it appears under **Saved tasks**.
2. Open the task from **Saved tasks** and click **Schedule**.
3. Choose **Daily**, pick the hour, and save.

**Cost example:** 20 hotels, about 30 new reviews a day across them ≈ $0.78/month on the free plan ($0.66 on paid plans): one run a day for 30 days, start fee included. The first run returns up to 'Reviews per hotel' for each hotel, so it costs more.

Add a Slack incoming-webhook URL in `slackWebhookUrl` (or any URL in `webhookUrl`) to get a short digest of each run's new reviews; nothing is sent when a run finds nothing.

### Why Agoda API users pick this one

- **Many hotels, one run.** Links, Agoda IDs or names; $0.005 per run, $0.0003 per hotel.
- **Scores and sub-scores.** Agoda and Booking.com scores and six sub-scores on each row.
- **Only new reviews.** Daily runs return and charge only reviews you have not seen.
- **Original and English text.** Agoda's English translation plus the guest's own words.
- **Agoda and Booking.com.** Both review sources Agoda shows, with owner replies.

### Get started in 3 steps

1. Paste hotels into 'Hotels': Agoda hotel links, Agoda hotel IDs like 10715, or a hotel name with its city like 'Ibis Budapest City'.
2. Set 'Reviews per hotel', and optionally the sources, language, rating range or 'Reviews newer than'; turn on 'Only new reviews' for daily tracking.
3. Click Start, or schedule it daily. Download JSON, CSV or Excel, or send reviews to Google Sheets, Slack, Zapier, Make or n8n.

**[▶ Try it with the example input](https://apify.com/aurelix/agoda-reviews-scraper)**

The form opens with an example input already filled in.

### How much does it cost to scrape Agoda reviews?

Pay per event: you pay only for what the run returns, plus a small start fee. Bronze, Silver, Gold and higher Apify plans pay less per result.

| Reviews | Free plan | Paid plans (Bronze, Silver, Gold) |
|---|---|---|
| 100 | $0.0553 | $0.04525 |
| 1,000 | $0.51 | $0.41 |
| 10,000 | $5.01 | $4.01 |

Totals include the $0.005 start fee per run and 1 `hotel-checked` fee ($0.0003 each), rounded to the cent (amounts under $0.10 to 5 decimals). Apify's free plan includes $5 of credit a month, enough for about 10,000 reviews.

You pay per review returned ($0.50 per 1,000), plus $0.0003 per hotel checked (a real Agoda property whose review list was read, with or without written reviews) and a $0.005 start fee per run (not per hotel). Worked examples on the free plan: 1 hotel with 100 reviews = $0.0553; 20 hotels with 500 reviews each = 10,000 reviews = $5.011; a daily 'Only new reviews' run on 20 hotels that finds 30 new reviews = $0.026 (about $0.78 a month). Entries that are not Agoda properties, names Agoda's search does not match, hotels Agoda did not answer for, duplicates and reviews you already received in 'Only new reviews' mode are never charged.

#### Billing events

| Event | Free plan | Paid plans (Bronze, Silver, Gold) |
|---|---|---|
| `review-result` | $0.50 per 1,000 reviews | $0.40 per 1,000 reviews |
| `hotel-checked` | $0.30 per 1,000 hotels checked | $0.25 per 1,000 hotels checked |
| `apify-actor-start` | $0.005 per run | $0.005 per run |

### What data you get

**Agoda API** reads the guest reviews Agoda shows on a hotel's public review page, both from Agoda guests and the Booking.com guests Agoda republishes, and returns one row per review: rating, title, text (in English where Agoda translates it, plus the original), what the guest liked and disliked, review date, month of stay, room, nights, traveller type, the reviewer's display name and country, photos and the hotel's reply. Every row also carries the hotel's facts and scores: star rating, address, Agoda and Booking.com scores, review counts, the six sub-scores and Agoda's score bands. Start from hotel links, Agoda hotel IDs or simply a hotel name with its city.

- Every row: input, hotel_id, hotel_name, hotel_url, reviews_url, source_url, scraped_at in ISO 8601 UTC
- Hotel facts on every row: accommodation_type, star_rating, address, area, city, country, postal_code
- Hotel scores on every row: agoda_score, agoda_review_count, agoda_sub_scores (Cleanliness, Facilities, Location, Room comfort and quality, Service, Value for money), agoda_score_distribution, booking_score, booking_review_count, booking_sub_scores
- Review: review_id, source (Agoda or Booking.com), rating (out of 10), rating_text, title, text, positives, negatives, original_title, original_text, language, review_date (YYYY-MM-DD, as shown)
- Stay as the page shows it: stay_month, nights, room_type, traveller_type
- Reviewer and reply: reviewer_name, reviewer_country, reviewer_country_code, helpful_votes, photos, owner_response, owner_response_date, responder_name

| hotel_name | source | rating | title | traveller_type | reviewer_country | agoda_score |
|---|---|---|---|---|---|---|
| The Peninsula Bangkok | Agoda | 10 | Excellent | Couple | United Kingdom | 9.2 |
| The Peninsula Bangkok | Agoda | 10 | Perfect | Group | Malaysia | 9.2 |
| The Peninsula Bangkok | Agoda | 9.2 | Always a great option | Group | Australia | 9.2 |
| The Peninsula Bangkok | Agoda | 10 | Bangkok 2026 | Couple | South Africa | 9.2 |

One full review record, exactly as a real run returned it (long text and lists shortened here). From a real run:

```json
{
  "input": "https://www.agoda.com/the-peninsula-bangkok/hotel/bangkok-th.html",
  "hotel_id": 10715,
  "hotel_name": "The Peninsula Bangkok",
  "hotel_url": "https://www.agoda.com/the-peninsula-bangkok/hotel/bangkok-th.html",
  "reviews_url": "https://www.agoda.com/the-peninsula-bangkok/reviews/bangkok-th.html",
  "accommodation_type": "Hotel",
  "star_rating": 5,
  "address": "Siam Chaophraya Holdings, 333 Charoennakorn Road, Bangkok Riverside, Bangkok, Thailand, 10600",
  "area": "Bangkok Riverside",
  "city": "Bangkok",
  "country": "Thailand",
  "postal_code": "10600",
  "agoda_score": 9.2,
  "agoda_review_count": 3162,
  "agoda_sub_scores": {
    "Cleanliness": 9.6,
    "Facilities": 9.4,
    "Location": 9,
    "Room comfort and quality": 9.3,
    "Service": 9.5,
    "Value for money": 9
  },
  "agoda_score_distribution": {
    "9+ Exceptional": 2082,
    "8-9 Excellent": 406,
    "7-8 Very Good": 91,
    "6-7 Good": 60,
    "<6 Below Expectation": 60
  },
  "booking_score": 9.3,
  "booking_review_count": 981,
  "booking_sub_scores": {
    "Cleanliness": 9.5,
    "Facilities": 9.3,
    "Location": 9.5,
    "Room comfort and quality": 9.6,
    "Service": 9.5,
    "Value for money": 8.7
  },
  "review_id": 1201251052,
  "source": "Agoda",
  "rating": 10,
  "rating_text": "Exceptional",
  "title": "Excellent",
  "text": "Our visit to Bangkok was enhanced by our stay in the Peninsula",
  "positives": null,
  "negatives": null,
  "original_title": null,
  "original_text": null,
  "language": "en",
  "review_date": "2026-10-30",
  "stay_month": "October 2026",
  "nights": 3,
  "room_type": "Deluxe Room",
  "traveller_type": "Couple",
  "reviewer_name": "sean",
  "reviewer_country": "United Kingdom",
  "reviewer_country_code": "GB",
  "helpful_votes": 0,
  "photos": [],
  "owner_response": null,
  "owner_response_date": null,
  "responder_name": null,
  "source_url": "https://www.agoda.com/the-peninsula-bangkok/reviews/bangkok-th.html",
  "scraped_at": "2026-11-07T17:40:38Z"
}
```

### Use cases

- Hotel and revenue managers tracking new reviews of their own property and their competitive set every day
- Reputation-management agencies and SaaS tools pulling reviews for many client hotels in one scheduled run
- Travel analysts comparing cleanliness, location and service sub-scores across a city's hotels
- Feeding review text to an LLM for sentiment, complaint themes and reply drafting
- Researchers studying guest satisfaction by traveller type, country of origin and length of stay

### Input

| Field | Type | What it does | Default |
|---|---|---|---|
| `hotels` (Hotels) | array | Agoda hotels, mixed freely: a hotel link (e.g. 'https://www.agoda.com/the-peninsula-bangkok/hotel/bangkok-th.html', any language version, its reviews page or a link with ?hid=... |  |
| `maxReviewsPerHotel` (Reviews per hotel) | integer | Most reviews to return for each hotel, e.g. 500. | 100 |
| `proxyConfiguration` (Proxy) | object | Apify's datacenter proxy (the default, no extra cost) lets the Actor move to a fresh IP when Agoda starts slowing... | {"useApifyProxy": true} |
| `sortBy` (Review order) | string | Which reviews come first. | "newest" |
| `sources` (Review sources) | array | Agoda shows reviews from its own guests and from Booking.com guests on the same page. |  |
| `language` (Review language) | string | Only reviews written in this language: a code such as en, ja, ko, de, fr, zh-TW, th or pt (or... |  |

All 13 fields, with examples: see the **Input** tab.

### Use with AI agents (MCP)

MCP (Model Context Protocol) is the open standard that lets AI assistants such as Claude, ChatGPT and Cursor call outside tools. Apify's hosted MCP server at `https://mcp.apify.com/?tools=aurelix/agoda-reviews-scraper` gives your assistant this Actor only: it fills in the input from your request, runs it and reads the reviews back, at the same per-result price as a run started by hand.

#### Example prompts

- "Get the 200 newest Agoda reviews of The Peninsula Bangkok and summarise what guests praise and complain about"
- "Compare the cleanliness, location and service scores of three hotels I name, from their Agoda reviews"
- "Pull the latest reviews of Ibis Budapest City from Agoda and Booking.com and draft replies to the negative ones"

#### Claude Desktop and claude.ai

**Settings > Connectors > Add custom connector**, name it Apify, paste `https://mcp.apify.com/?tools=aurelix/agoda-reviews-scraper`, keep the detected OAuth settings, select **Add** and sign in to Apify.

#### Claude Code

```bash
claude mcp add --transport http apify "https://mcp.apify.com/?tools=aurelix/agoda-reviews-scraper"
```

#### Cursor and VS Code

Add this to `~/.cursor/mcp.json` (Cursor); in VS Code's `.vscode/mcp.json` put the same entry under `"servers"` with `"type": "http"`. Sign in to Apify when asked.

```json
{
  "mcpServers": {
    "apify": {
      "url": "https://mcp.apify.com/?tools=aurelix/agoda-reviews-scraper"
    }
  }
}
```

#### ChatGPT

Turn on **Developer mode**, open **Settings > Apps & Connectors > Create**, paste the URL above as the MCP server URL, choose **OAuth** and authorize Apify.

Clients without sign-in send `Authorization: Bearer <YOUR_APIFY_TOKEN>` instead. No Apify account? This Actor supports Apify's agentic payments: an agent can pay per run with a prepaid, spend-capped token, bought with x402 stablecoin payments.

#### n8n AI agent

Give an **AI Agent** node an **MCP Client Tool** with the endpoint `https://mcp.apify.com/?tools=aurelix/agoda-reviews-scraper` and a Bearer credential holding your Apify token.

### Use it from AI agents (MCP), the API or no-code

#### Copy this to your AI assistant

```text
Use the Apify Actor aurelix/agoda-reviews-scraper (Agoda API) through Apify's MCP server or API. Main input: hotels (Hotels); maxReviewsPerHotel (Reviews per hotel). Example input: {"hotels": ["https://www.agoda.com/the-peninsula-bangkok/hotel/bangkok-th.html", "Ibis Budapest City"], "maxReviewsPerHotel": 200, "sources": ["Agoda", "Booking.com"]}. Each result is one review with fields such as input, hotel_id, hotel_name, hotel_url, reviews_url, accommodation_type, star_rating, address. It costs $0.50 per 1,000 reviews on Apify's free plan plus a $0.005 start fee per run, and needs no login.
```

MCP server URL for this Actor: `https://mcp.apify.com/?tools=aurelix/agoda-reviews-scraper` (setup for each client in the section above).

#### API

Start a run and read the dataset with Apify's REST API or the Python and JavaScript clients:

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("aurelix/agoda-reviews-scraper").call(run_input={'hotels': ['https://www.agoda.com/the-peninsula-bangkok/hotel/bangkok-th.html', 'Ibis Budapest City'], 'maxReviewsPerHotel': 200, 'sources': ['Agoda', 'Booking.com']})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)
```

#### No-code: schedule it in 3 clicks

Send the results to Google Sheets, Zapier, Make, n8n, Slack or any webhook URL.

1. Fill in the input, then click **Save as a new task**.
2. In the task, click **Schedule** and pick daily or weekly (Apify Schedules).
3. Turn on **Only new reviews** so each run returns only what is new, and paste a Slack or webhook URL into **Slack webhook URL** / **Webhook URL** to get a digest of the new items (count plus the top 10) after every run.

Prefer n8n or Make? Ask in the **Issues** tab and we will share a ready-made workflow for it.

### FAQ

#### Can I scrape Agoda reviews without login?

Yes. It never logs in, so you need no Agoda account, password or cookies; only a free Apify account to run it.

#### Is there an Agoda reviews API?

You can use this Actor as one. Start it with Apify's REST API or the Python and JavaScript clients and read the results as JSON (see the code above), or call it from an AI agent through MCP.

#### How much does it cost to scrape Agoda reviews?

About $0.51 for 1,000 reviews on Apify's free plan and $0.41 on paid plans, start fee included. The free $5 monthly credit covers about 10,000 reviews.

#### Can I export Agoda reviews to Excel or Google Sheets?

Yes. Download the results as Excel, CSV, JSON, XML or HTML from the run's **Storage** tab, or send them to Google Sheets with Apify's Google Sheets integration or the API.

#### Is it legal to scrape Agoda reviews?

It reads only public data any logged-out visitor can see: the guest reviews, scores and hotel details on Agoda's public review pages and the JSON those pages load, on paths Agoda's robots.txt does not disallow. It never logs in and never solves CAPTCHAs; reviewer display names and countries are returned as Agoda shows them. Agoda's terms discourage automated access; keep your use to analysis of public data. Data is returned as shown publicly on the source; people can ask for removal by opening an issue on this Actor's Issues tab; if Agoda formally asks us to stop, this Actor will stop. You are responsible for using the data lawfully, incl. privacy laws; this is not legal advice.

#### Is there a cheaper Agoda reviews scraper on Apify?

Yes. This Actor costs $0.50 per 1,000 reviews on the free plan and $0.40 on paid plans, plus $0.0003 per hotel checked and $0.005 per run, cheaper than the leading tools, and one run reads any number of hotels. This tool doesn't return live room prices.

#### How do I get Agoda reviews into Google Sheets, n8n or an AI agent?

Two ways. For a fixed workflow, add Apify's n8n or Make node, choose **Run Actor**, enter `aurelix/agoda-reviews-scraper` and map the dataset to the next step, or use Apify's Google Sheets integration. For an AI agent (Claude, ChatGPT, Cursor or an n8n AI Agent node), add `https://mcp.apify.com/?tools=aurelix/agoda-reviews-scraper` as an MCP server and ask for a hotel's reviews in plain words. Runs bill your own Apify account at the same per-review price.

#### How many reviews can I get per hotel?

Every written review Agoda lists for the hotel, from Agoda guests and from Booking.com guests, up to the 'Reviews per hotel' you set. Agoda's review list stops at 5,000 per source, so a very big hotel (e.g. one with 5,600 Booking.com reviews) returns the first 5,000 of them in the order you chose. The review counts next to the scores (agoda_review_count, booking_review_count) also include guests who left a rating without text, so they are higher than the number of written reviews.

#### Can I find a hotel by name?

Yes. Type the hotel name with its city, e.g. 'Ibis Budapest City'. The Actor asks Agoda's own search box and uses the first property it suggests; the run's status says which hotel each name matched, so you can check it. For exact control use the hotel link or its Agoda ID.

#### Which links work?

Any Agoda hotel page link in any language version (e.g. /de-de/...), the hotel's reviews page, and links that carry the hotel ID such as ?hid=10715 or selectedproperty=10715. Tracking parameters are ignored. Links to other sites are skipped and named in the status.

#### Are reviews translated?

Agoda shows each review in English where it has a translation. You get that English text in title and text, and the guest's own words in original_title and original_text, with the language code in language. Use 'Review language' to keep only reviews written in one language.

#### How does 'Only new reviews' work?

The Actor remembers, per hotel and for two years, the review IDs it returned and the newest review date per source, in one record in your Apify account. The first run returns the newest reviews, up to 'Reviews per hotel'. Later runs read newest first and return only reviews newer than what you already received: each source stops at its first review already returned or older than the newest date you received from it (a source you have received nothing from yet starts at the hotel's newest date), so older reviews a capped first run left out are never sold to you later as new. To start with a hotel's full history, set 'Reviews per hotel' high enough on the first run.

#### What is 'hotel-checked'?

A charge of $0.0003 ($0.00025 on paid plans) for each real Agoda property whose review list was read in a run, whatever the number of reviews it returns, also when it has no written reviews yet. It pays for checking a hotel, e.g. on days with nothing new in 'Only new reviews' mode. Entries that are not Agoda properties, names Agoda's search does not match and hotels Agoda did not answer for are not charged.

#### Does it return reviewer names?

Yes, as Agoda shows them publicly: the reviewer's display name and country on every review. Nothing behind a login is read. Data is returned as shown publicly on the source; people can ask for removal by opening an issue on this Actor's Issues tab.

#### Does it need a proxy?

It uses Apify's datacenter proxy by default, which costs you nothing extra: the run price is per event only. Agoda slows down a connection that reads a lot, so the Actor moves to a fresh proxy IP for each hotel and whenever Agoda starts answering with empty or repeated pages. You can turn the proxy off; long runs may then return fewer reviews. Residential proxy is not offered.

#### Can I sort by most helpful or lowest rated?

Yes, with 'Review order'. With 'Reviews newer than' or 'Only new reviews' the Actor reads newest first instead, so it can stop at the first page with nothing to return; the run status says so. With rating, source or language filters it stops reading a hotel after 3 pages in a row with no matching review.

### Built for many hotels and daily runs

- Many hotels per run: one run takes any number of hotels for one $0.005 start fee plus $0.0003 per hotel checked ($0.02 for 50).
- Price per review: $0.50 per 1,000 on the free plan and $0.40 on paid plans, cheaper than the leading tools.
- Hotel names: a hotel name with its city works as well as an Agoda link or ID, and the matched hotel is named in the status.
- Original text too: every translated review also carries the guest's original words and language code.

### Limits (stated honestly)

- Only what Agoda lists: written reviews from Agoda guests and the Booking.com guests Agoda republishes. Rating-only reviews (no text) are counted in the review counts but have no row.
- Agoda's review list stops at 5,000 reviews per source (100 pages); for the few hotels with more, the first 5,000 per source in the order you chose are returned.
- Agoda's review service answers about half of its requests with an empty page, which looks exactly like a hotel with no written reviews; the Actor asks up to 16 times (in small parallel waves, a few seconds) before it calls a hotel's list empty, then names the reason in the status (no reviews in the chosen language, rated but no written reviews, or no reviews yet).
- 'Highest' and 'Lowest rated first' follow Agoda's own order page by page; Booking.com reviews are mixed into each page, so the order across sources is approximate. With 'Reviews newer than' or 'Only new reviews' the run reads newest first instead.
- With rating, source or language filters, a hotel is read until 3 pages in a row hold no matching review, so a rare match deep in a long list can be missed; the status names such hotels.
- A hotel name matches the first property Agoda's search suggests; check the matched names in the run status, or use links or IDs.
- If Agoda refuses a hotel even after retries, it is named in the status and not charged. The run stops, keeping what it has and naming the hotels not tried, after 2 refused hotels in a row before any hotel was read, 3 in a row after that, or 90 seconds spent on refused hotels in total. After 25 entries that are not found on Agoda (not a property, an unknown ID or an unmatched name), it stops too, to keep a mistyped list from costing time.
- No room prices or availability: reviews and review scores only.
- Scores and reviews change constantly; a run is a snapshot of when it ran.
- Dates are what the page shows: review date, reply date and month of stay, no exact check-in or check-out dates.
- The name 'Agoda API' describes what this tool gives you: it is an unofficial tool, not made or endorsed by Agoda.

### Works great with

- **Before this: [Google Maps Phone Scraper](https://apify.com/aurelix/google-maps-scraper)**: search 'hotels in Bangkok' to list a city's hotels, then paste each name with its city into 'Hotels'
- **Then: [Google Trends by Region](https://apify.com/aurelix/google-trends-scraper)**: compare search interest in the destinations or hotel brands you track, over time and by country

### Related Aurelix tools

Public Aurelix Actors, grouped by the data they collect. All are pay-per-result and need no login.

#### More data tools

- **[Tennis Betting Odds Scraper](https://apify.com/aurelix/tennis-odds-scraper)**: Tennis results and upcoming matches with opening and closing odds per bookmaker and implied probabilities.

#### Jobs and hiring data

- **[Greenhouse Jobs Scraper](https://apify.com/aurelix/greenhouse-jobs-scraper)**: Live jobs from a company's Greenhouse, Lever, Ashby or SmartRecruiters board, with salary and Canadian province tags.
- **[LinkedIn Jobs Country Filter Scraper](https://apify.com/aurelix/linkedin-jobs)**: Public LinkedIn job postings by keyword and country: title, company, location, seniority, job type, salary text, description.
- **[Multiple Job Boards Scraper](https://apify.com/aurelix/multi-job-board-scraper)**: LinkedIn, about 50 company career sites, Remote OK and We Work Remotely jobs in one deduplicated list.
- **[Remote Job Board Scraper API](https://apify.com/aurelix/remote-jobs-scraper)**: Remote OK and We Work Remotely jobs in one deduplicated list with salary, regions and tags.

#### E-commerce and product data

- **[AliExpress Scraper API](https://apify.com/aurelix/aliexpress-product-search)**: AliExpress search results by keyword: price, discount, rating, units sold, ship-from country and sponsored flag.
- **[Amazon New Releases & Best Sellers](https://apify.com/aurelix/amazon-best-sellers)**: Amazon Best Sellers and New Releases top 100 on 10 marketplaces: rank, ASIN, price, rating, rank change.
- **[Shopify Product Export Scraper](https://apify.com/aurelix/shopify-products-scraper)**: Every public product of any Shopify store with variants, SKUs, prices, barcodes, stock counts and collections.

#### Leads and company data

- **[Contact Page Scraper](https://apify.com/aurelix/contact-details-scraper)**: Published company emails, phones, addresses, social pages and team members from a list of company websites.
- **[Decision Maker Finder](https://apify.com/aurelix/decision-maker-finder)**: Founders, CEOs, VPs and department heads from company team pages, with title, seniority and function.
- **[Newly Funded Companies Hiring](https://apify.com/aurelix/funded-companies-hiring)**: Companies that just raised money (SEC Form D), with their open roles and business contacts, as a new-only monitor.
- **[Google Maps Phone Scraper](https://apify.com/aurelix/google-maps-scraper)**: Local business lists from Google Maps: phones, websites, ratings, hours, coordinates; optional website emails and socials.
- **[Recently Funded Companies API](https://apify.com/aurelix/recently-funded-companies)**: US companies that just filed an SEC Form D: amount raised, industry, state, executives, confirmed website.
- **[Tech Stack API](https://apify.com/aurelix/tech-stack-detector)**: CMS, e-commerce platform, analytics, ad pixels, chat, CDN and email provider for each domain you enter.

#### Ad intelligence

- **[Competitor Watch](https://apify.com/aurelix/competitor-watch)**: One report per competitor with only what is new: Meta and TikTok ads, page changes, Shopify products and prices, jobs.
- **[Facebook Ad Library Search & API](https://apify.com/aurelix/facebook-ad-library-scraper)**: Facebook and Instagram business ads from the Meta Ad Library: copy, creatives, landing pages, dates, optional EU reach.
- **[TikTok Ads Library API](https://apify.com/aurelix/tiktok-ads-library-scraper)**: TikTok Ads Library ads for Europe, UK, Switzerland and Turkey with targeting, reach, ad text and landing pages.

#### Canada and government data

- **[Canada Building Permits](https://apify.com/aurelix/canada-building-permits-scraper)**: Building permits and development applications from 7 Canadian cities: address, type, status, dates, value, applicant, contractor and Toronto planner contact.
- **[Government Tenders Scraper](https://apify.com/aurelix/government-tenders-scraper)**: Open tenders from SAM.gov, CanadaBuys and EU TED in one table: buyer, codes, value, deadline, contact and link.
- **[USPTO Trademark API](https://apify.com/aurelix/uspto-trademark-search)**: US trademark search and watch from USPTO: mark, owner or number lookups, new filings, owner, attorney, goods.

#### AI, content and SEO

- **[Google Trends by Region](https://apify.com/aurelix/google-trends-scraper)**: Google Trends interest over time, by region and rising queries for any number of keywords, plus trending searches.
- **[Google Autocomplete API](https://apify.com/aurelix/google-autocomplete-scraper)**: Expands seed keywords into hundreds of real Google and YouTube autocomplete phrases, tagged by search intent.
- **[PDF Table Extraction & PDF to Markdown OCR](https://apify.com/aurelix/pdf-to-markdown)**: Turns linked PDF and Word files into Markdown per page, with tables as JSON rows, RAG chunks and OCR.
- **[Broken Link Crawler & SEO Audit](https://apify.com/aurelix/seo-audit-crawler)**: Audits a whole site: one row per page with SEO checks and broken links, plus a ranked issues summary.
- **[Website to Markdown API](https://apify.com/aurelix/website-to-markdown)**: Crawls a site and returns one row of clean main-content Markdown per page, with title, headings and links.
- **[YouTube Transcript Scraper](https://apify.com/aurelix/youtube-transcript-scraper)**: Returns YouTube video transcripts as text, timed segments and AI chunks, from videos, channels, playlists or searches.

### Recent changes

- **0.1**: First release: Agoda and Booking.com reviews from Agoda with hotel scores and sub-scores, many hotels per run by link, ID or name, only-new-reviews mode, Slack and webhook digest.

The full history is on the **Changelog** tab.

### Tested daily

An automated health check runs this Actor every day on a fixed input and checks that at least 16 reviews come back with `hotel_id`, `hotel_name`, `review_id`, `source`, `rating`, `review_date` filled in; a failed check alerts the maintainer straight away.

### Your feedback

Missing a field, found a bug or need another filter? Open an issue on the **Issues** tab; we aim to answer within a day. If this Actor saved you time, a short review helps other people find it.

# Changelog

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

# Actor input Schema

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

Agoda hotels, mixed freely: a hotel link (e.g. 'https://www.agoda.com/the-peninsula-bangkok/hotel/bangkok-th.html', any language version, its reviews page or a link with ?hid= / selectedproperty=), an Agoda hotel ID (e.g. '10715') or a hotel name with its city (e.g. 'Ibis Budapest City'; the first property Agoda's own search suggests is used and named in the run's status).

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

Most reviews to return for each hotel, e.g. 500. Big hotels list a few thousand written reviews; Agoda's review list stops at 5,000 per review source. Set a high number to get them all.

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

Which reviews come first. With 'Reviews newer than' or 'Only new reviews' the Actor always reads newest first, so it can stop each hotel as soon as nothing more can match.

## `sources` (type: `array`):

Agoda shows reviews from its own guests and from Booking.com guests on the same page. Leave empty for all of them.

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

Only reviews written in this language: a code such as en, ja, ko, de, fr, zh-TW, th or pt (or the language's English name). Every review comes with Agoda's English translation where it has one, plus the original text. Leave empty for all languages.

## `minRating` (type: `number`):

Only reviews rated at least this on Agoda's 1-10 scale, e.g. 8 or 8.5. Leave empty for all.

## `maxRating` (type: `number`):

Only reviews rated at most this, e.g. 6 to collect complaints. Leave empty for all.

## `reviewsNewerThan` (type: `string`):

Only reviews written on or after this date, e.g. 2026-01-31, or a relative time such as '30 days'. Leave empty for all.

## `onlyNewReviews` (type: `boolean`):

Return only reviews that your earlier runs did not return (one memory per hotel). The first run returns everything; schedule it daily to get each day's new reviews.

## `trackingName` (type: `string`):

Name for the 'previous runs' memory used by 'Only new reviews', e.g. 'my-hotels-daily'. Runs with the same name share one memory; leave empty to share one memory across all your runs.

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

Apify's datacenter proxy (the default, no extra cost) lets the Actor move to a fresh IP when Agoda starts slowing one connection down, which keeps long runs complete. Residential proxy is not offered: Agoda does not need it.

## `slackWebhookUrl` (type: `string`):

After each run, post a short digest to Slack: how many reviews were saved (new reviews only when 'Only new reviews' is on) and the top 10, e.g. https://hooks.slack.com/services/T000/B000/XXXX. Nothing is posted when the run saved nothing. Leave empty to skip.

## `webhookUrl` (type: `string`):

After each run, POST the same digest as JSON (actor, newOnly, count, items = top 10 reviews, runUrl, text) to any URL, e.g. a Zapier, Make or n8n webhook. Nothing is sent when the run saved nothing. Leave empty to skip.

## Actor input object example

```json
{
  "hotels": [
    "https://www.agoda.com/the-peninsula-bangkok/hotel/bangkok-th.html"
  ],
  "maxReviewsPerHotel": 20,
  "sortBy": "newest",
  "sources": [],
  "language": "",
  "onlyNewReviews": false,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

One item per review, with the hotel's details, scores and sub-scores on every row.

# 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/the-peninsula-bangkok/hotel/bangkok-th.html"
    ],
    "maxReviewsPerHotel": 20,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("aurelix/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 = {
    "hotels": ["https://www.agoda.com/the-peninsula-bangkok/hotel/bangkok-th.html"],
    "maxReviewsPerHotel": 20,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("aurelix/agoda-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/the-peninsula-bangkok/hotel/bangkok-th.html"
  ],
  "maxReviewsPerHotel": 20,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call aurelix/agoda-reviews-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,aurelix/agoda-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/5PCaeOmzubsaPfxiE/builds/56epSu9VfvaimvWaZ/openapi.json
