# Agoda Scraper – Hotel Prices, Rooms & Reviews API (`k-data-lab/agoda-scraper`) Actor

Unofficial Agoda API, no login: hotel prices and room rates for any city, area or hotel and your dates, with taxes, cancellation and rooms left, for rate shopping, rate parity and price monitoring. Agoda and Booking.com reviews with only-new-reviews mode. $1.50/1K hotels, $0.80/1K reviews.

- **URL**: https://apify.com/k-data-lab/agoda-scraper.md
- **Developed by:** [K-Data Lab](https://apify.com/k-data-lab) (community)
- **Categories:** Travel, E-commerce, Automation
- **Features:** Limited permissions
- **Stats:** 1 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.00 / 1,000 hotels

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 Scraper API – Hotel Prices, Room Rates & Reviews, No Login

**Type a city, an area or a hotel, pick your dates and guests, click Start, and get every Agoda hotel with its real
price for that stay as a table.** One clean row per hotel: **price per night and total, with and without taxes**,
currency, free cancellation and its deadline, rooms left, stars, guest rating and sub-scores, area and coordinates.
Add **every room type and rate plan** (breakfast, cancellation, pay later, max guests) and **guest reviews** whenever
you need them.

- ✅ **No login, no API key, no browser.** Type `Bangkok` and run. City names, areas (`Shinjuku`, `Gangnam`), hotel names, agoda.com links or hotel IDs all work.
- 🆓 **Your first test costs half a cent.** The prefilled input returns 20 Bangkok hotels in seconds. Those rows are free, you pay only the $0.005 start fee, and Apify's free plan credit covers it.
- 💰 **100 hotels, 20 hotels with full room offers and 500 reviews free every month**, then **$1.50 per 1,000 hotels**, **$2.50 per 1,000 hotels with all room offers** and **$0.80 per 1,000 reviews**.
- 🌍 **Any currency (52), 17 languages and any market**: compare what travellers from the US, Korea or the UK are offered (rate parity).
- 💬 **Reviews from Agoda *and* Booking.com, filtered the way you need**: by source, rating range (e.g. only 1–5 = complaints), original language and date. Paste hotel links, set `onlyReviews`, done.
- 🔔 **Agoda review and price monitoring**: turn on `onlyNewReviews` and each scheduled run returns only reviews published since the last one, so you never pay twice for a review. Relative dates (`+30 days`) keep price checks pointing forward.
- 🔌 **Use it as an API**: one HTTP call returns JSON, CSV or Excel. Works with n8n, Make, Zapier, Google Sheets and AI agents (MCP).

Example rows (real data, 3 nights from 2026-12-10, 2 adults, EUR, collected 2026-10-30):

| destination | name | ★ | rating | per night | per night incl. taxes | total incl. taxes | free cancellation | rooms left |
|---|---|---|---|---|---|---|---|---|
| Bangkok | Solaria Nishitetsu Hotel Bangkok | 4 | 9.2 | 134.30 | 143.70 | 431.09 | yes | 1 |
| Tokyo | TORANOMONHOLIC HOTEL | 4 | 8.4 | 133.19 | 146.50 | 439.51 | yes | 1 |
| Paris | Le Méridien Paris Arc De Triomphe | 4 | 8.1 | 204.23 | 241.55 | 724.65 | yes | 5 |
| New York | Moxy Brooklyn Williamsburg | 4 | 8.4 | 608.25 | 701.16 | 2,103.48 | yes | 3 |
| London | Copthorne Tara Hotel London Kensington | 4 | 7.9 | 195.88 | 235.06 | 705.19 | yes | 31 |
| Sydney | Kimpton Margot Sydney by IHG | 5 | 9.6 | 431.76 | 474.93 | 1,424.79 | yes | 1 |

> Independent tool by K-Data Lab. Not affiliated with, endorsed or sponsored by Agoda. It reads only public
> agoda.com data that any logged-out visitor sees, and returns only what Agoda shows there.

#### 🔍 What does Agoda Scraper do?

- **Hotel search for your stay**: a city, area or agoda.com search link plus check-in/check-out, adults, children (with ages) and rooms → every matching hotel with its cheapest price for exactly that stay, in Agoda's own order or sorted by price or guest rating
- **Agoda's own filters**: star rating, minimum guest rating, price range per night, free cancellation, breakfast included, pay at the hotel, hotels vs homes
- **Hotel details + every room offer**: address, description, check-in/check-out times, number of rooms, year opened/renovated, facilities, child and extra-bed policies, and for each room type every rate plan with price, taxes, cancellation policy, breakfast, pay-later, max guests and rooms left
- **Guest reviews**: rating, title, text (translated into your language, with the original), what guests liked and disliked, stay dates, traveller type, room, country, the hotel's reply and photos; from Agoda's verified guests and partner sites (Booking.com, Priceline) shown on Agoda. Every review row also carries the hotel's overall score, sub-scores, stars, city and country, so it stands alone in a spreadsheet or BI tool
- **Any market, currency and language**: `currency` = USD, EUR, KRW, JPY, THB…; `language` = en-us, ko-kr, ja-jp, zh-cn…; `country` = the traveller's country Agoda prices for

#### 💡 Why choose this actor?

- 💰 **Lower price and a free monthly allowance**: $1.50 per 1,000 hotels and $0.80 per 1,000 reviews, with 100 hotels + 500 reviews free every month. All room offers of a hotel cost one event, not one per room.
- 🧾 **Prices you can compare**: per night *and* total, before *and* after taxes, plus the taxes amount, crossed-out price and discount, so rate shopping needs no maths.
- 🧩 **One actor for search, room offers and reviews.** No separate review or room actor, one dataset.
- 🔁 **Monitoring that remembers.** `onlyNewReviews` tracks what each hotel already returned, per filter set, in your own Apify account. Overlapping schedules don't return or charge duplicates.
- 📍 **Areas and hotel names work**: `Shinjuku`, `Sukhumvit` or `Park Hyatt Tokyo` are found the way Agoda's search box finds them.
- ⚡ **Fast and light**: plain HTTPS calls, no browser. 420 hotels in 6 cities took 9 seconds in our tests.
- 🛡️ **Never charged twice, never for nothing**: a hotel found twice is returned once; sold-out hotels and hotels that don't exist cost nothing.

#### 📥 Input example

```json
{
  "destinations": ["Bangkok", "Shinjuku", "https://www.agoda.com/search?city=15470"],
  "hotels": ["https://www.agoda.com/eastin-grand-hotel-sathorn/hotel/bangkok-th.html", "Park Hyatt Tokyo"],
  "checkIn": "2026-12-10",
  "checkOut": "2026-12-13",
  "adults": 2,
  "children": 1,
  "childrenAges": ["6"],
  "rooms": 1,
  "currency": "USD",
  "language": "en-us",
  "country": "US",
  "sortBy": "price_low",
  "maxHotelsPerDestination": 200,
  "starRatings": ["4", "5"],
  "minReviewScore": "8",
  "freeCancellationOnly": true,
  "includeRoomOffers": false,
  "maxReviewsPerHotel": 50,
  "reviewsSince": "90 days",
  "reviewSources": ["Agoda", "Booking.com"],
  "reviewMaxRating": 6,
  "reviewLanguages": ["en", "ko"]
}
```

#### 🧪 Ready-made inputs

| Goal | Input |
|---|---|
| Cheapest 4–5★ hotels in a city next month | `{"destinations": ["Tokyo"], "checkIn": "+30 days", "nights": 2, "starRatings": ["4","5"], "sortBy": "price_low"}` |
| Rate shopping: your hotel + competitors, every room | `{"hotels": ["286835", "10697", "Grande Centre Point Sukhumvit 55"], "checkIn": "+14 days", "nights": 1}` |
| Rate parity across markets | same input three times with `"country": "US"`, `"KR"`, `"GB"` |
| Family trip | `{"destinations": ["Bali"], "adults": 2, "children": 2, "childrenAges": ["5","10"], "breakfastIncludedOnly": true}` |
| Daily Agoda review monitoring, new reviews only | `{"hotels": ["286835"], "onlyReviews": true, "onlyNewReviews": true, "maxReviewsPerHotel": 500}` |
| New complaints only, for an alert | `{"hotels": ["286835"], "onlyReviews": true, "onlyNewReviews": true, "maxReviewsPerHotel": 200, "reviewMaxRating": 6}` |
| Complaints only (rated 5 or lower) | `{"hotels": ["286835"], "onlyReviews": true, "maxReviewsPerHotel": 200, "reviewsSort": "rating_low", "reviewMaxRating": 5}` |
| Booking.com reviews of a hotel, last 90 days | `{"hotels": ["https://www.agoda.com/eastin-grand-hotel-sathorn/hotel/bangkok-th.html"], "onlyReviews": true, "maxReviewsPerHotel": 1000, "reviewSources": ["Booking.com"], "reviewsSince": "90 days"}` |
| Korean guests' reviews only, in Korean | `{"hotels": ["286835"], "onlyReviews": true, "maxReviewsPerHotel": 300, "reviewLanguages": ["ko"], "language": "ko-kr"}` |

#### 📤 Output example

**Hotel row** (from a destination search):

```json
{
  "type": "hotel",
  "hotelId": 81875201,
  "name": "TORANOMONHOLIC HOTEL",
  "url": "https://www.agoda.com/h81875201/hotel/tokyo-jp.html?checkIn=2026-12-10&los=3&adults=2&children=0&rooms=1&currency=EUR",
  "propertyType": "Hotel",
  "starRating": 4,
  "reviewScore": 8.4,
  "reviewCount": 356,
  "ratings": { "cleanliness": 9.3, "facilities": 8.4, "location": 8.4, "staff": 8.9, "valueForMoney": 8.5 },
  "country": "Japan", "countryCode": "JP", "city": "Tokyo", "cityId": 5085, "area": "Shinbashi", "areaId": 565750,
  "latitude": 35.66694, "longitude": 139.75178,
  "available": true,
  "checkIn": "2026-12-10", "checkOut": "2026-12-13", "nights": 3, "adults": 2, "children": 0, "rooms": 1,
  "currency": "EUR",
  "pricePerNight": 133.19,
  "pricePerNightWithTaxes": 146.5,
  "pricePerRoomPerNight": 133.19,
  "totalPrice": 399.56,
  "totalPriceWithTaxes": 439.51,
  "taxesAndFees": 39.95,
  "originalPricePerNight": null,
  "discountPercent": null,
  "freeCancellation": true,
  "freeCancellationUntil": "2026-12-07",
  "payLater": true, "payAtHotel": true, "noCreditCardNeeded": false,
  "roomsLeft": 1,
  "sponsored": true,
  "highlights": ["Free Wi-Fi in all rooms!", "Close to public transportation", "Tokyo Tower"],
  "nearbyTransport": [{ "name": "Toranomon-hills Subway Station", "distanceMeters": 360 }],
  "nearbyLandmarks": [{ "name": "Tokyo Tower", "distanceMeters": 1093 }],
  "mainImage": "https://pix8.agoda.net/hotelImages/81875201/0/e9c7370e216505b3983170a8a497a431.jpeg?va=1&ce=3",
  "searchRank": 2,
  "destination": "Tokyo",
  "scrapedAt": "2026-10-30T04:57:08Z"
}
```

**Hotel with room offers** adds `address`, `postalCode`, `description`, `checkInFrom` (`02:00 PM`), `checkOutUntil`,
`numberOfRooms` (390), `yearOpened` (2011), `yearRenovated`, `usefulInfo`, `facilities`, `facilityGroups`,
`childPolicy`, `extraBedPolicy`, `otherPolicies`, `roomTypesAvailable` and `roomOffers`:

```json
{
  "roomName": "superior",
  "size": "32 m²/344 ft²",
  "bedTypes": ["king", "twin"],
  "features": ["City view", "Private bathroom", "Hair dryer", "Shower"],
  "cheapestPricePerNight": 120,
  "offers": [{
    "fitsYourGuests": true,
    "pricePerNight": 120,
    "pricePerNightWithTaxes": 129.09,
    "totalPriceWithTaxes": 258.17,
    "originalPricePerNight": 202,
    "discountPercent": 40,
    "freeCancellation": false,
    "cancellationPolicy": "Non-refundable (Low price!)",
    "breakfastIncluded": false,
    "payLater": false,
    "paymentTerms": "Book and pay now",
    "maxGuests": "2 adults",
    "roomsLeft": 30,
    "benefits": ["Excellent breakfast available (USD 21 / person)", "Free fitness center access", "Free WiFi"],
    "promotions": ["Super Saver"]
  }]
}
```

**Review row**:

```json
{
  "type": "review",
  "hotelId": 4724,
  "hotelName": "ANA InterContinental Tokyo By IHG",
  "hotelStarRating": 4.5, "hotelReviewScore": 8.8, "hotelReviewCount": 2594,
  "hotelRatings": { "cleanliness": 9, "facilities": 8.6, "location": 8.8, "roomComfort": 8.2, "staff": 8.9, "valueForMoney": 8.3 },
  "hotelCity": "Tokyo", "hotelCountry": "Japan",
  "reviewId": 1195076984,
  "source": "Agoda",
  "rating": 9.6,
  "ratingText": "Exceptional",
  "title": "Exceptional",
  "text": "love the lounge and breakfast",
  "originalLanguage": "en",
  "reviewDate": "2026-10-16T05:15:37+07:00",
  "stayCheckIn": "2026-01-11", "stayCheckOut": "2026-01-13", "nights": 2,
  "travelerType": "Family with young children",
  "roomType": "1 King Mizu Suite Club Lounge Access",
  "reviewerName": "LEO",
  "reviewerCountry": "Indonesia",
  "hotelResponse": "Dear Guest, Thank you very much for choosing ANA InterContinental Tokyo…",
  "hotelResponseDate": "2026-10-22T07:03:25.477000+07:00",
  "url": "https://www.agoda.com/ana-intercontinental-tokyo/reviews/tokyo-jp.html"
}
```

The **Hotels** and **Reviews** tabs of the dataset show the key columns; the full JSON (with `roomOffers`) is one
click away. `RUN_SUMMARY` in the key-value store lists, for every input, what it resolved to (e.g.
`area Shinjuku (cityId 5085, areaId 28049)`), how many hotels Agoda has for it and what was returned.

#### ⚠️ When an input returns nothing

- **"Agoda has no city, area or hotel by that name"**: check the spelling, or paste the agoda.com search link instead.
- **"No results… loosen the filters"**: no hotel matches all filters on those dates. Remove a filter or try other dates.
- **Hotel rows with `available: false`**: the hotel has no room for your dates and party (only when "Only hotels with rooms for my dates" is off, or for hotels you listed directly).
- Errors never cost anything: only returned rows are charged.

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

| Event | Price | Free every month |
|---|---|---|
| Hotel (search row) | $0.0015 ($1.50 per 1,000) | 100 |
| Hotel with full details + all room offers | $0.0025 ($2.50 per 1,000) | 20 |
| Guest review | $0.0008 ($0.80 per 1,000) | 500 |
| Actor start | $0.005 per run | |

Apify Silver/Gold plans pay less (down to $1.00, $1.75 and $0.50 per 1,000). Examples: the 500 cheapest hotels of
5 cities ≈ $0.75; 20 competitor hotels with every room, daily for a month ≈ $1.50; 10,000 reviews ≈ $8. Set
**Maximum cost per run** in the run options and the actor stops cleanly at that amount.

How that compares with the two most-used dedicated Agoda review actors (Store list prices on the Apify Free plan, checked 2026-11-05):

| Actor | Per 1,000 reviews | Per run | Room rates in the same actor |
|---|---|---|---|
| This actor | $0.80 (500 free a month) | $0.005 | yes |
| knagymate/fast-agoda-reviews-scraper | $6.00 | $0.02 | no |
| lergassy/agoda-reviews-scraper | $3.00 | none | yes, $4 per 1,000 rates |

#### 🚀 How to scrape Agoda hotel prices (step by step)

1. Click **Try for free** and sign in to Apify (a free account is enough).
2. Type a destination (`Bangkok`) or paste hotels, set check-in/check-out and guests.
3. Optional: currency, filters, sort, room offers, reviews.
4. Click **Start**. Most runs finish in seconds.
5. Download the table as Excel, CSV or JSON, or connect it to Google Sheets, n8n, Make or your own code.

#### 📊 Popular use cases

- **Agoda rate shopping and competitor price monitoring**: track room rates for your hotel and your comp set every day for the next 30/60/90 days, per room type and rate plan.
- **Rate parity checks**: the same hotel, dates and currency for travellers from different countries (`country`).
- **Market research**: price levels, star mix, guest ratings and supply per city or neighbourhood.
- **Agoda review monitoring and reputation management**: only the reviews published since yesterday, complaints first if you like, with the hotel's reply and the hotel's current score on each row.
- **Travel apps and AI agents**: live hotel prices and availability for any city as JSON.

#### 🔌 Integrations & API

Run it and get the hotels in one HTTP call (replace `<TOKEN>` with your Apify API token):

```bash
curl -X POST "https://api.apify.com/v2/acts/k-data-lab~agoda-scraper/run-sync-get-dataset-items?token=<TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{"destinations": ["Tokyo"], "checkIn": "+30 days", "nights": 2, "maxHotelsPerDestination": 50, "currency": "USD"}'
```

Python:

```python
from apify_client import ApifyClient

client = ApifyClient("<TOKEN>")
run = client.actor("k-data-lab/agoda-scraper").call(run_input={
    "hotels": ["286835", "Park Hyatt Tokyo"], "checkIn": "+14 days", "nights": 1, "currency": "USD"})
for hotel in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(hotel["name"], hotel["pricePerNight"], hotel["roomTypesAvailable"])
```

**n8n / Make / Zapier**: use the Apify app → "Run Actor" with `k-data-lab/agoda-scraper` and the input JSON above, then
"Get dataset items". Add a **Schedule** on Apify (Console → Schedules) for daily rate or review monitoring; use
relative dates such as `"+7 days"` so every run looks at the future.

#### 💡 Tips

- Relative dates (`+14 days`, `+1 month`) are best for schedules. `checkOut` can stay empty: `nights` decides the length.
- Prices are for **all rooms together** (`pricePerNight`); `pricePerRoomPerNight` splits them. Room offers are per room per night.
- `fitsYourGuests: false` on a room offer means that rate alone can't host your whole party (e.g. children's ages). Agoda's search price may combine room types for big parties.
- Prices are what a new, logged-out visitor from the chosen `country` sees at run time. Agoda can show different prices to signed-in members or returning visitors.
- Room offers show prices rounded the way Agoda's room list shows them. The search row has exact decimals.

#### 🤖 Use it from AI agents (MCP)

Give Claude, ChatGPT, Cursor, VS Code or n8n a ready-made `agoda-scraper` tool through [Apify's MCP server](https://mcp.apify.com): the agent reads the input schema, runs this actor and gets hotel prices, room offers and reviews back.

- This actor only: `https://mcp.apify.com?tools=actors,docs,k-data-lab/agoda-scraper`

**Claude Code**

```bash
claude mcp add --transport http apify "https://mcp.apify.com?tools=actors,docs,k-data-lab/agoda-scraper"
```

Claude Desktop: Settings → Connectors → Add custom connector, paste the same URL.

**Cursor / VS Code** (`.cursor/mcp.json`; in `.vscode/mcp.json` use `"servers"` and add `"type": "http"`)

```json
{
  "mcpServers": {
    "apify": {
      "url": "https://mcp.apify.com?tools=actors,docs,k-data-lab/agoda-scraper",
      "headers": { "Authorization": "Bearer <YOUR_APIFY_TOKEN>" }
    }
  }
}
```

**Try asking**

- "Find the 10 cheapest 4- and 5-star hotels in Bangkok for 2 adults, 3 nights from Dec 10, in USD."
- "Compare Park Hyatt Tokyo's room rates for next Friday in the US and KR markets."
- "Get the 50 newest reviews of Agoda hotel 286835 rated 5 or lower and summarise the complaints."
- "Check Agoda room rates for Eastin Grand Hotel Sathorn for two adults next weekend and list the free-cancellation options."

**Which input to use**

| The agent wants | Pass |
|---|---|
| Agoda hotels and prices in a city or area | `destinations`, `checkIn`, `nights`, `currency` |
| All room rates of one hotel | `hotels` (link, ID or name), `checkIn`, `nights` |
| Agoda reviews of a hotel | `hotels`, `onlyReviews: true`, `maxReviewsPerHotel` |
| Only reviews new since the last run | the same plus `onlyNewReviews: true` |

#### ❓ FAQ

**Is it legal to scrape Agoda?** The actor reads only public pages any visitor sees without logging in: hotel listings, prices and published reviews. It collects no personal data beyond the display name and country that Agoda shows on each public review. Check that your use complies with Agoda's terms and the laws that apply to you.

**Is there an official Agoda API?** Agoda offers APIs to approved partners, not to the public. This actor is an unofficial alternative: it needs no partnership, account or key, and returns the prices and reviews a logged-out visitor sees.

**Do I need an Agoda account or API key?** No.

**How do I monitor new Agoda reviews?** List your hotels, set `onlyReviews` and `onlyNewReviews` to true and add a daily schedule. The first run returns up to `maxReviewsPerHotel` reviews and sets the baseline. Later runs return only reviews you have not received yet, reading back 7 days past the newest one per source because Booking.com reviews can appear late. No review is returned twice, and a run that finds none costs just the start fee. If more new reviews arrive than `maxReviewsPerHotel`, the next run returns the rest. `RUN_SUMMARY` shows `reviewsAlreadyReturned` per hotel. To start over, delete the store `k-data-lab-agoda-seen-reviews` in your Apify account.

**Which currencies and languages?** All 52 currencies Agoda offers and 17 site languages. Reviews come in your language when Agoda has a translation, with the original text and language alongside.

**How many hotels can I get per city?** As many as Agoda lists for your filters (the run summary shows the total). Set `maxHotelsPerDestination` up to 5,000.

**How far ahead can I search?** Up to about 16 months, stays of 1–30 nights.

**Can I get only Agoda (or only Booking.com) reviews?** Yes: set `reviewSources`. Each review row has a `source` column (`Agoda`, `Booking.com`, `Priceline.com`, `Yanolja`). Rating (`reviewMinRating`/`reviewMaxRating`) and language (`reviewLanguages`) filters work the same way, and only rows you receive are charged. `RUN_SUMMARY` shows how many reviews each filter skipped.

**Why do some reviews have no text?** Booking.com reviews shown on Agoda use `positives` and `negatives` instead of `text`. Every review has at least one of them.

**Is this the price I would pay?** It's the price Agoda shows for those dates, guests, currency and market. Taxes and fees are in `…WithTaxes` and `taxesAndFees`. Prices change quickly, so compare runs by `scrapedAt`.

#### 🧰 More from K-Data Lab

- [Airline Award Seat Scraper](https://apify.com/k-data-lab/airline-award-seat-scraper): award seat availability, the flight side of a trip
- [Google Play Scraper API](https://apify.com/k-data-lab/google-play-scraper): app details and reviews from Google Play, any country, no login
- [Google Ads Transparency & Ad Library Scraper](https://apify.com/k-data-lab/google-ad-library-scraper): every Google ad a competitor runs, with text, landing page and countries
- [Amazon Seller Central Review Scraper & Monitor](https://apify.com/k-data-lab/amazon-seller-central-review-scraper): export and monitor your brand's reviews from Seller Central; you sign in yourself
- [Amazon ASIN Rating & Review Count Scraper](https://apify.com/k-data-lab/amazon-asin-rating-scraper): star rating, review count and breakdown for ASINs on 19 Amazon marketplaces
- [Melon Scraper](https://apify.com/k-data-lab/melon-scraper): Korea's Melon music charts, songs and albums with like counts and credits
- [Genie Music Scraper](https://apify.com/k-data-lab/genie-scraper): Genie Music charts and songs with total plays, listeners and past chart dates
- [Bugs Music Scraper](https://apify.com/k-data-lab/bugs-scraper): Bugs charts, songs and albums with past dates and credits
- [FLO Scraper](https://apify.com/k-data-lab/flo-scraper): FLO charts and songs with chart scores
- [VIBE Scraper](https://apify.com/k-data-lab/vibe-scraper): NAVER VIBE charts, past charts and ISRC
- [Korean Music Chart Scraper](https://apify.com/k-data-lab/korean-music-chart-scraper): Melon, Genie, Bugs, FLO and VIBE merged into one chart
- [KB Land Scraper](https://apify.com/k-data-lab/kbland-scraper): KB real estate valuations and complex data for Korea
- [R114 Scraper](https://apify.com/k-data-lab/r114-scraper): Korean apartment data from Real Estate 114
- [Telegram Channel Scraper](https://apify.com/k-data-lab/telegram-channel-scraper): posts from public Telegram channels

#### 💬 Feedback

Missing a field or found a wrong value? Open an issue on the actor's **Issues** tab. We answer the same day.

Tags: agoda scraper, agoda api, agoda hotel prices, agoda room rates, hotel price scraper, hotel rates api, rate shopping, competitor price monitoring,
rate parity, agoda reviews scraper, new review monitoring, booking.com reviews on agoda, negative reviews, hotel reviews, travel data, hotel availability

# Actor input Schema

## `destinations` (type: `array`):

Where to search, like a traveller typing into Agoda's search box: a city (Bangkok, Tokyo, Paris, New York), an area (Shinjuku, Sukhumvit, Gangnam) or an agoda.com search results link. Each destination returns its hotels as one row each, with the price for your dates. A hotel name here works too (it returns that hotel with all its room offers). Example: \["Bangkok", "Shinjuku"]. Pass Destinations, Hotels or both.

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

Specific hotels to track: an agoda.com hotel page link, Agoda's numeric hotel ID (the hotelId column of any earlier run) or a hotel name. Each hotel returns one row with full details and every room type and rate plan for your dates (price, taxes, cancellation, breakfast, rooms left), plus its reviews if you ask for them below. Example: \["286835", "Park Hyatt Tokyo"]. Leave empty to only search Destinations.

## `checkIn` (type: `string`):

Check-in date (YYYY-MM-DD) or a relative date like "+14 days", which keeps scheduled runs pointing at the future. Example: "2026-12-10" or "+14 days". Empty = 14 days from today.

## `checkOut` (type: `string`):

Check-out date (YYYY-MM-DD) or relative ("+15 days"). Example: "2026-12-13". Empty = check-in + the number of nights below. Agoda prices stays of up to 30 nights.

## `nights` (type: `integer`):

Length of stay in nights (1–30), used only when Check-out is empty. Example: 3 for a weekend trip.

## `adults` (type: `integer`):

Number of adults in total, across all rooms (1–36). Example: 2 for a couple.

## `children` (type: `integer`):

Number of children aged 0–17 in total, across all rooms (0–9). Also list their ages under Children's ages. Example: 2.

## `childrenAges` (type: `array`):

One age (0–17) per child, as strings, e.g. \["4", "9"]. Prices and free-stay policies depend on age. Missing ages count as 8. Leave empty when Children is 0.

## `rooms` (type: `integer`):

Number of rooms (1–9). Search prices are for all rooms together; pricePerRoomPerNight splits them. Example: 2 for two families.

## `currency` (type: `string`):

Three-letter currency code for every price, exactly as Agoda shows it. Example: "USD", "KRW", "THB", "JPY".

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

Language of hotel names, descriptions and room names, as a locale code. Example: "en-us" or "ko-kr". Reviews are returned in this language when Agoda has a translation, with the original text alongside.

## `country` (type: `string`):

Two-letter country code of the traveller Agoda prices for (US, GB, KR, JP, TH, AU, …). Example: "KR". Hotels sometimes show different rates per market; set this to compare them (rate parity checks).

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

Order of the hotel list (searchRank in the output), the same as Agoda's sort menu. Example: "price_low" for the cheapest hotels first, "review_score" for the best rated.

## `maxHotelsPerDestination` (type: `integer`):

Upper limit of hotel rows for each destination (1–5000). Agoda returns 45 hotels per page; big cities have thousands (the run summary shows how many match). Example: 20 for a quick look, 500 for a city-wide price scan.

## `starRatings` (type: `array`):

Only hotels with these star ratings, as strings "1"–"5". Example: \["4", "5"]. Empty = all.

## `minReviewScore` (type: `string`):

Only hotels whose guest rating (out of 10) is at least this. Example: "8" for 8+ Excellent; "any" = no filter.

## `minPricePerNight` (type: `integer`):

Lowest nightly price in the chosen currency, before taxes and fees (Agoda's price filter). Example: 50. Empty = no minimum.

## `maxPricePerNight` (type: `integer`):

Highest nightly price in the chosen currency, before taxes and fees. Example: 200. Empty = no maximum.

## `propertyType` (type: `string`):

Hotels (incl. resorts, hostels, guesthouses) or homes (apartments, villas, houses). Example: "hotels"; "all" = both.

## `freeCancellationOnly` (type: `boolean`):

Set true to keep only hotels with a free-cancellation rate for your dates.

## `breakfastIncludedOnly` (type: `boolean`):

Set true to keep only hotels with a rate that includes breakfast.

## `payAtHotelOnly` (type: `boolean`):

Set true to keep only hotels that let you pay at the property.

## `onlyAvailable` (type: `boolean`):

Skip sold-out hotels in search results (they are never charged). Set false to also list sold-out hotels with available=false.

## `includeRoomOffers` (type: `boolean`):

Set true to also fetch, for each hotel found by a destination, its full details (address, description, check-in/out times, facilities, policies) and every room rate: each room type with all its rate plans (price, taxes, cancellation, breakfast, rooms left). Charged as "hotel with room offers" instead of "hotel". Hotels you list under Hotels always get this.

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

Guest reviews to return for each hotel (from Destinations and Hotels). 0 = no reviews. Example: 50. Each review is its own row: rating, title, text, positives/negatives, stay dates, traveller type, room, country, hotel response, plus the hotel's overall score and sub-scores.

## `reviewsSort` (type: `string`):

Order in which reviews are read. Example: "newest" (best for monitoring) or "rating_low" (complaints first).

## `reviewsSince` (type: `string`):

Only reviews written on or after this date (YYYY-MM-DD), or within the last N days ("30 days"). Sorts newest first and stops at the first older review, so scheduled monitoring runs only pay for new reviews.

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

Only reviews from these sites. Example: \["Agoda"] or \["Booking.com"]. Agoda shows its own verified-guest reviews next to reviews from Booking.com, Priceline and Yanolja; the source column says which. Empty = all sources.

## `reviewMinRating` (type: `integer`):

Only reviews rated at least this (out of 10). Example: 8 for happy guests. Empty = no minimum.

## `reviewMaxRating` (type: `integer`):

Only reviews rated at most this (out of 10). Example: 5 to collect complaints only; combine with "Lowest rating first" so the run stops as soon as ratings get higher. Empty = no maximum.

## `reviewLanguages` (type: `array`):

Only reviews originally written in these languages: two-letter codes such as en, ko, ja, fr, de, zh (zh matches zh-CN and zh-TW). Example: \["en", "ko"]. This filters; it does not translate (use Language for that). Empty = all languages.

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

Set true for scheduled review monitoring. The first run returns reviews as usual and remembers them; every later run returns only reviews you have not received yet, reading newest first, so you never pay for the same review twice, even if schedules overlap. Needs Max reviews per hotel above 0. Remembered per hotel and per combination of review filters, in a store in your own Apify account. Example: true with Only reviews on and a daily schedule.

## `onlyReviews` (type: `boolean`):

For Hotels: set true to return only their reviews, not the hotel row (needs Max reviews per hotel above 0). Cheapest way to monitor reviews of known hotels.

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

Apify Proxy is on by default and needs no setup. Leave it as {"useApifyProxy": true}.

## Actor input object example

```json
{
  "destinations": [
    "Bangkok",
    "Shinjuku",
    "https://www.agoda.com/search?city=15470"
  ],
  "hotels": [
    "https://www.agoda.com/eastin-grand-hotel-sathorn/hotel/bangkok-th.html",
    "286835",
    "Park Hyatt Tokyo"
  ],
  "checkIn": "2026-12-10",
  "nights": 1,
  "adults": 2,
  "children": 0,
  "childrenAges": [
    "4",
    "9"
  ],
  "rooms": 1,
  "currency": "USD",
  "language": "en-us",
  "country": "KR",
  "sortBy": "recommended",
  "maxHotelsPerDestination": 20,
  "starRatings": [],
  "minReviewScore": "any",
  "propertyType": "all",
  "freeCancellationOnly": false,
  "breakfastIncludedOnly": false,
  "payAtHotelOnly": false,
  "onlyAvailable": true,
  "includeRoomOffers": false,
  "maxReviewsPerHotel": 0,
  "reviewsSort": "newest",
  "reviewsSince": "30 days",
  "reviewSources": [],
  "reviewLanguages": [
    "en",
    "ko"
  ],
  "onlyNewReviews": false,
  "onlyReviews": false,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

No description

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

No description

## `all` (type: `string`):

No description

## `summary` (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 = {
    "destinations": [
        "Bangkok"
    ],
    "maxHotelsPerDestination": 20,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("k-data-lab/agoda-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 = {
    "destinations": ["Bangkok"],
    "maxHotelsPerDestination": 20,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("k-data-lab/agoda-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 '{
  "destinations": [
    "Bangkok"
  ],
  "maxHotelsPerDestination": 20,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call k-data-lab/agoda-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,k-data-lab/agoda-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/HDlD1W008DMZIYU3p/builds/WL7aKD6y5a3R8JLrC/openapi.json
