# Agoda Hotels Scraper (`dami_studio/agoda-hotels-scraper`) Actor

Agoda hotels scraper: search by city, area or hotel and get one row per hotel with its price and availability for your dates, with and without taxes, free cancellation, breakfast, guest review score, stars and location. Ask for room offers to get every room and rate on the hotel's page.

- **URL**: https://apify.com/dami_studio/agoda-hotels-scraper.md
- **Developed by:** [Dami's Studio](https://apify.com/dami_studio) (community)
- **Categories:** Travel, Lead generation, Integrations
- **Features:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.75 / 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.

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 hotels scraper for a city, an area or a list of hotels: one row per hotel with its price for your dates**, taxes in and out, free cancellation, breakfast, guest score, stars and where it is on the map.

Type a destination, set your dates and party, and you get Agoda's hotel list for that stay in the order Agoda ranks it. List hotels by link or name instead, or switch on room offers, and each row also carries the hotel's description, amenities and every room with its price and conditions. Guest reviews can come along too, newest first, each one a row of its own at $0.0013.

Agoda only quotes a price for a concrete stay. Leave the dates empty and the run prices a one-night stay 30 days from today and writes those dates on every row, so read `checkIn` on the first row before you trust the prices.

| | |
|---|---|
| **Input** | Cities or areas (Bangkok, Shibuya), Agoda hotel links, IDs or names, plus dates and party |
| **Output** | One row per hotel: price per night and for the stay, guest score and count, stars, area, coordinates, free cancellation, breakfast; room offers on request; guest reviews on request, one row per review |
| **Ceiling** | 5,000 hotels per destination, 50 destinations or 500 hotels per run, 200 reviews per hotel |
| **Speed** | About 50 hotels in 5 seconds from a city search, 40 with 20 reviews each in about 15 seconds, about one a second with room offers (measured on our runs) |
| **Account needed** | None from you |
| **Price** | $0.75 per 1,000 hotels, the same rate on every plan. The free plan's $5 a month covers about 6,600. Guest reviews, when you ask for them, are $1.30 per 1,000 |

| Using an AI agent? | |
|---|---|
| Actor | `dami_studio/agoda-hotels-scraper` |
| Set one field | `destinations`, labelled "Destinations" in the Console |
| Cap the bill | `maxTotalChargeUsd` on the run, for example `0.10`: it never charges past that |
| MCP, one link | `https://mcp.apify.com/?tools=fetch-actor-details,dami_studio/agoda-hotels-scraper` |
| How often | Daily, to follow the prices of the same dates over time |

### 🔍 What Agoda Hotels Scraper does

It runs the search Agoda's own site runs when you pick a city and dates, page after page, and writes down every hotel on it until it has the number you asked for. An area name such as Sukhumvit or Shinjuku narrows the search to that part of the city.

The price on a row is for the stay and the party you asked about, in the currency you chose: the cheapest room per night before taxes, the same with taxes and fees, and the whole stay. Change the dates, `adults`, `children` or `rooms` and the prices change with them.

The filters are Agoda's own: stars, guest score, price per night, hotels or homes, free cancellation, breakfast, pay at the hotel. With free cancellation or breakfast on, the price shown is the cheapest room that has it.

For a hotel you list, or for every hotel when **Add details and every room offer** is on, it also reads the hotel's own page: the description, check-in times, amenities by group, Agoda's sub-scores, room types with beds, size and view, and every room offer for your dates.

With **Add guest reviews** on, each hotel's newest written reviews follow its row, up to 200, one row per review at $0.0013 each: the score, the title and text, what the guest liked and didn't, and for Agoda's own reviews the guest's country, who they travelled with, the room and the nights. A review never carries the reviewer's name.

### 📋 What data you get from each Agoda hotel

| What you get | Field |
|---|---|
| Agoda's hotel id, name, link and type | `hotelId`, `name`, `url`, `propertyType` |
| Stars, guest score, number of reviews, and the year of Agoda's award when it has one | `starRating`, `reviewScore`, `reviewCount`, `awardYear` |
| Area, city, country and coordinates | `area`, `city`, `cityId`, `country`, `countryCode`, `latitude`, `longitude` |
| Price per night, with taxes, before the discount, and for the whole stay | `pricePerNight`, `pricePerNightWithTaxes`, `pricePerNightBeforeDiscount`, `totalPrice`, `totalPriceWithoutTaxes`, `discountPercent`, `currency` |
| Cancellation, breakfast and payment terms of that room | `freeCancellation`, `freeCancellationUntil`, `cancellationPolicy`, `breakfastIncluded`, `payLater`, `payAtHotel`, `noCreditCardNeeded` |
| Availability | `available`, `roomsLeft` |
| Facilities, stations, landmarks, beaches and photos | `facilities`, `nearbyTransport`, `nearbyLandmarks`, `nearbyBeaches`, `imageUrl`, `imageUrls` |
| Where it sits in the search, and whether Agoda marks it sponsored | `searchRank`, `isSponsored`, `destination`, `destinationMatched` |
| The stay the price is for | `checkIn`, `checkOut`, `nights`, `adults`, `children`, `childrenAges`, `rooms`, `scrapedAt` |
| From the hotel's page (optional): full address, description, check-in times, amenities, policies, nearby places | `address`, `postalCode`, `description`, `checkInFrom`, `checkOutUntil`, `amenities`, `amenityGroups`, `languagesSpoken`, `policies`, `nearbyPlaces`, `nearbyAttractions`, `highlights` |
| From the hotel's page (optional): Agoda's own guest scores | `agodaReviewScore`, `agodaReviewCount`, `reviewSubscores`, `reviewScoreDistribution`, `reviewScoreText` |
| From the hotel's page (optional): rooms, every offer and the whole photo gallery | `roomTypes`, `roomOffers`, `roomTypeCount`, `offerCount`, `imageUrls`, `imageCount` |
| From the hotel's page (optional): the short guest quote it shows by its photos | `reviewSnippet` |
| Guest reviews (optional, $0.0013 each), one row per review: score, title, text, likes and dislikes, date, the stay, where it was written, and the hotel it belongs to | `recordType` (`review`), `hotelId`, `hotelName`, `url`, `reviewId`, `rating`, `ratingText`, `title`, `comment`, `positives`, `negatives`, `reviewDate`, `stayMonth`, `nights`, `travellerType`, `reviewerCountry`, `roomType`, `source` |

### ▶️ How to scrape Agoda hotels

1. Open [Agoda Hotels Scraper](https://apify.com/dami_studio/agoda-hotels-scraper) and click **Try for free**.
2. Put cities or areas into **Destinations**, one per line, or hotel links into **Hotels**.
3. Set **Check-in date**, **Check-out date** and the party. Do it even for a quick test.
4. Set **Max hotels per destination**. A hundred is a good first run.
5. Click **Start**, then download the dataset as JSON, CSV or Excel, or read it from the API.

Leave both lists empty and you get one free sample row showing the shape of the output, with nothing searched.

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

**$0.75 per 1,000 hotels**, which is $0.00075 each, the same rate on every plan, with or without room offers. On the free plan, the $5 Apify gives you each month covers about 6,600 hotels.

Guest reviews are **$1.30 per 1,000**, $0.0013 each on every plan, charged only for the reviews you get.

You pay per hotel row and per review row. Note rows (a city Agoda doesn't know, a search with no hotel, a stop at your time or cost limit) and the sample row are free, and a hotel already returned in the run is not returned or charged again.

### 📥 What you give it

```json
{
  "destinations": ["Bangkok", "Shibuya"],
  "checkIn": "2026-12-10",
  "checkOut": "2026-12-12",
  "adults": 2,
  "rooms": 1,
  "currency": "USD",
  "freeCancellationOnly": true,
  "maxResultsPerDestination": 100
}
```

| Field | Default | What it is |
|---|---|---|
| `destinations` | none, the form starts with `Bangkok` | Up to 50. A city or area as Agoda spells it, an Agoda city ID, or the link of a city search from agoda.com. A hotel link here is read as a hotel. |
| `hotels` | none | Up to 500. A hotel's link from agoda.com, its Agoda ID, or its name. Always read with its page and room offers. |
| `checkIn`, `checkOut` | 30 days from today | The stay, as `YYYY-MM-DD`. Check-out must be after check-in, at most 30 nights later. A past date is refused before anything runs. |
| `nights` | `1` | Used when `checkOut` is empty. |
| `adults`, `children`, `childrenAges`, `rooms` | 2 adults, no children, 1 room | Up to 36 adults, 9 children and 9 rooms, an adult per room. A child counts as 8 years old unless you list ages, 0 to 17. |
| `currency` | `USD` | 53 currencies. |
| `language` | `en-us` | 33 languages, for facilities, areas, descriptions and room names. A hotel's name changes only where Agoda has one in that language, as in Japanese or Thai. |
| `sortBy` | `recommended` | `recommended`, `price_low_to_high`, `price_high_to_low` and `top_guest_ratings` are Agoda's own orders. `guest_score_low_to_high` puts hotels with no score yet last and needs a few hotels per destination: 1 in a small town, about 6 in Bangkok, 28 in Bali. Ask for fewer and a free note says the number to use. |
| `starRatings` | any | Any of 1 to 5. A 4.5 counts as 4. |
| `minReviewScore`, `maxReviewScore` | any | Guest score out of 10. Hotels with no score yet are left out once either is set. |
| `minPrice`, `maxPrice` | any | Per room per night before taxes, in your currency. |
| `propertyType` | `all` | `all`, `hotels` or `homes`. |
| `freeCancellationOnly`, `breakfastIncludedOnly`, `payAtHotelOnly` | off | Only hotels with a room that has it. |
| `onlyAvailable` | off | Leave out hotels sold out for your dates. |
| `includeRoomOffers` | off | Read each destination hotel's page too, with every room offer. |
| `includeReviews` | off | Add each hotel's newest guest reviews as rows of their own, listed hotels included, at $0.0013 a review. |
| `reviewsPerHotel` | `20` | 1 to 200 reviews a hotel when `includeReviews` is on. |
| `maxResultsPerDestination` | `100` | 1 to 5,000 hotels per destination. |
| `maxItems` | `0` | A cap for the whole run. 0 means no cap beyond the one above. |

The filters apply to destination searches. Hotels you list come back whatever their price or score.

### 📤 What you get back

A real hotel row from a search with **Add guest reviews** on, cut short, then its first review row:

```json
{
  "hotelId": 177997,
  "name": "The Bless Hotel & Residence",
  "url": "https://www.agoda.com/bless-residence/hotel/bangkok-th.html",
  "propertyType": "Hotel",
  "starRating": 4,
  "awardYear": "2025",
  "reviewScore": 8.5,
  "reviewCount": 13062,
  "area": "Sukhumvit",
  "city": "Bangkok",
  "cityId": 9395,
  "country": "Thailand",
  "countryCode": "TH",
  "latitude": 13.7337676461285,
  "longitude": 100.567924976349,
  "available": true,
  "currency": "USD",
  "pricePerNight": 59.81,
  "pricePerNightWithTaxes": 64,
  "pricePerNightBeforeDiscount": null,
  "totalPrice": 128,
  "totalPriceWithoutTaxes": 119.62,
  "discountPercent": null,
  "freeCancellation": true,
  "freeCancellationUntil": "2026-12-07T00:00:00.000+07:00",
  "cancellationPolicy": "FreeCancellation",
  "breakfastIncluded": true,
  "payLater": true,
  "payAtHotel": false,
  "noCreditCardNeeded": false,
  "roomsLeft": 1,
  "isSponsored": false,
  "facilities": ["Swimming pool", "Airport transfer", "Wi-Fi [free]", "Openable window"],
  "nearbyTransport": [{ "name": "Phrom Phong BTS Station", "distanceKm": 0.42 }],
  "nearbyLandmarks": [{ "name": "Siam Paragon", "distanceKm": 3.86 }],
  "nearbyBeaches": [],
  "imageUrl": "https://pix8.agoda.net/hotelImages/177997/0/229685bbcf34112e88bcfcf75f44976d.jpeg?va=1&ce=2",
  "checkIn": "2026-12-10",
  "checkOut": "2026-12-12",
  "nights": 2,
  "adults": 2,
  "children": 0,
  "rooms": 1,
  "searchRank": 10,
  "destination": "Bangkok",
  "destinationMatched": "Bangkok",
  "scrapedAt": "2026-11-03T08:55:26.600Z"
}
```

```json
{
  "recordType": "review",
  "hotelId": 177997,
  "hotelName": "The Bless Hotel & Residence",
  "url": "https://www.agoda.com/bless-residence/hotel/bangkok-th.html",
  "reviewId": 1197056548,
  "rating": 9.6,
  "ratingText": "Exceptional",
  "title": "Great location",
  "comment": "Steps away from the BTS and mall. Room was clean and staff very friendly.",
  "positives": null,
  "negatives": null,
  "reviewDate": "2026-10-20T11:05:30+07:00",
  "stayMonth": "October 2026",
  "nights": 4,
  "travellerType": "Couple",
  "reviewerCountry": "Canada",
  "roomType": "Superior Room",
  "source": "Agoda",
  "scrapedAt": "2026-11-03T08:55:26.600Z"
}
```

| Field | How to read it |
|---|---|
| `hotelId` | Agoda's own id, stable between runs. Use it as your key. |
| `pricePerNight` | The cheapest room for your party, per room per night, before taxes. `totalPrice` is the whole stay with taxes and fees. |
| `pricePerNightBeforeDiscount` | The struck-through price when Agoda shows one, otherwise null. |
| `reviewScore`, `reviewCount` | The score and count Agoda displays for the hotel. `agodaReviewScore` and `agodaReviewCount`, on rows with the page read, count only reviews from Agoda's own guests. |
| `available` | False when the hotel is sold out for your dates; its prices are null. |
| `freeCancellationUntil` | The last day to cancel for free, in the hotel's own time zone. |
| `roomOffers` | One entry per offer: room, price per night with and without taxes, total, free cancellation and its policy text, breakfast, pay later or at the hotel, rooms left, and `supplierId`, Agoda's code for who supplies that offer. Cheapest first. |
| `recordType` | `review` on a guest review's row, which also carries its hotel's `hotelId`, `hotelName` and `url`. Review rows come right after their hotel, newest first, at most `reviewsPerHotel`. `source` says where the review was written, `Agoda` or `Booking.com`, as the hotel page labels it. Agoda's own carry the text in `comment` with the stay; Booking.com's carry `positives` and `negatives` instead. |
| `reviewSnippet` | The short guest quote the hotel's page shows by its photos, on rows with the page read. |

### 🧾 Reading the output

Anything with `ok: false` on it is a note, not a hotel or a review.

`reviewScore` and `reviewCount` are the score and count Agoda displays for the hotel. Its review rows are written reviews behind them, as many as you asked for, not the count. None means no written review yet, common for homes with a few stays.

| Row | How to spot it | Charged |
|---|---|---|
| A hotel | `hotelId` set, no `ok` field, no `recordType` | yes |
| A guest review | `recordType` is `review` | yes, $0.0013 |
| The sample row | `_sample` is true | no |
| A note | `ok` is false and `errorCode` says why | no |

| `errorCode` | What it means |
|---|---|
| `NOT_FOUND` | Agoda has no city, area or hotel matching that line. |
| `NO_RESULTS` | The search ran and found no hotel for these dates, guests and filters. |
| `NOT_SERVED` | This was not served this run. Re-run it later. |
| `BAD_INPUT` | A value could not be used; `details` says which, why and what to set instead. |
| `TIME_LIMIT` | The run reached its time limit, or a sort needs more time than the run had. What came before is delivered and charged; give it a longer timeout for the rest. |
| `COST_LIMIT` | The run reached the maximum cost you set, or that cost doesn't cover the fewest hotels a sort needs. Raise it for more. |

### 💡 What people use it for

- Checking what one hotel charges for the same weekend every morning, keyed on `hotelId`.
- Comparing a whole street of hotels on price, score, free cancellation and what recent guests wrote, before a group booking.
- Watching where your own property ranks in its city's search, and who is sponsored above it.
- Pulling every room and rate of a short list of hotels for a revenue review.

### 🚧 What it does not do

- **No reviewer names or photos.** A review keeps its words, score and stay, not who wrote it.
- **Hotels and homes only.** No flights, activities or transfers.
- **Prices move.** A row is what Agoda quoted at `scrapedAt`, for that party, those dates, that currency.
- It is not an official Agoda tool. Dami's Studio is independent and is not affiliated with or endorsed by Agoda, or by any other company named on this page.

### 🧭 Which hotel scraper do you need?

| If you want | Use |
|---|---|
| Agoda hotels with prices for your dates, and every room offer | This one |
| Hotels on Booking.com with live prices and scores for your dates | [Booking.com Hotels Scraper](https://apify.com/dami_studio/booking-hotels-scraper) |
| Live hotel prices for your dates, as Google Hotels shows them | [Google Hotels Scraper](https://apify.com/dami_studio/google-hotels-scraper) |
| Airbnb listings with prices, ratings and coordinates for a place | [Airbnb Listings Scraper](https://apify.com/dami_studio/airbnb-listings-scraper) |
| Reviews of a hotel on Tripadvisor | [Tripadvisor Reviews Scraper](https://apify.com/dami_studio/tripadvisor-reviews-scraper) |
| Guest reviews of hotels on Booking.com | [Booking.com Reviews Scraper](https://apify.com/dami_studio/booking-reviews-scraper) |

### ❓ Questions people ask

#### Do I need an Agoda account?

No. Nothing to paste, nothing that expires.

#### Why is the price different from what I see on Agoda?

Check the dates, party and currency on the row first: a different stay is a different price. Agoda also keeps some deals for signed-in members, and this reads what a signed-out visitor sees.

#### Can I get every room and rate for a hotel?

Yes. List the hotel under **Hotels**, or switch on **Add details and every room offer** for a destination. `roomOffers` holds every offer, cheapest first.

#### Can I get the guest reviews too?

Yes. Switch on **Add guest reviews** and set **Reviews per hotel**, up to 200. Each review is its own row after its hotel, at $0.0013.

#### Does a sold-out hotel still come back?

Yes, with `available` false and no price. Switch on **Only hotels with rooms left** to drop them.

#### Can I call it from code or connect it to an AI assistant?

The [API tab](https://apify.com/dami_studio/agoda-hotels-scraper/api/python) has code for Python, JavaScript and the CLI. MCP clients like Claude and ChatGPT use `https://mcp.apify.com/?tools=fetch-actor-details,dami_studio/agoda-hotels-scraper`, billed to your Apify account at the same price.

#### Is scraping Agoda legal?

These are public search results, hotel pages and reviews, read the way a signed-out visitor sees them, with no account and nothing private. Guest reviews are people's own words, so treat what you keep as personal data under GDPR and similar laws, and keep only what you need. Agoda's own terms still apply to what you do with the data. Apify's write-up on [the legality of web scraping](https://blog.apify.com/is-web-scraping-legal/) is a good start, and we are not lawyers.

### 🆘 If something breaks

Open the **Issues** tab on the actor page. Send the destination or hotel, the dates and the run ID; a note row's `errorCode` and `details` usually name the reason already.

# Actor input Schema

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

Cities or areas to search, one per line: a name as Agoda spells it (Bangkok, Shibuya), an Agoda city ID (9395), or the link of a city search from agoda.com. Each one comes back as a list of hotels with the price for your dates.

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

Specific hotels, one per line: the hotel's link from agoda.com, its Agoda ID (10715), or its name. Each comes back with its details and every room offer for your dates.

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

The first night of the stay. Leave it empty for 30 days from today.

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

The day you leave. Leave it empty to stay the number of nights below. A stay is at most 30 nights.

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

Used only when Check-out date is empty.

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

Adults in the party. Prices change with it.

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

Children in the party. Each is priced as 8 years old unless you give their ages below.

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

One age per child, 0 to 17. When filled it replaces Children.

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

Rooms to book. Every room needs at least one adult.

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

The currency every price comes back in.

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

The language Agoda answers in: facilities, areas, descriptions and room names, and the hotel's name where Agoda has one in that language.

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

The order a destination's hotels come back in, which decides which come first when you cap the results. Lowest guest score first puts hotels with no score yet last, and needs a few hotels per destination: 1 in a small town, about 6 in Bangkok, 8 in Tokyo, 28 in Bali. Ask for fewer and a free note says the number to use.

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

Only hotels with these star ratings. A 4.5 counts as 4.

## `minReviewScore` (type: `number`):

Only hotels whose guest score out of 10 is at least this. Hotels with no score yet are left out.

## `maxReviewScore` (type: `number`):

Only hotels whose guest score out of 10 is at most this. Hotels with no score yet are left out.

## `minPrice` (type: `integer`):

Per room per night before taxes, in the currency above.

## `maxPrice` (type: `integer`):

Per room per night before taxes, in the currency above.

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

Hotels, homes and apartments, or both.

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

Only hotels with a room you can cancel for free; the price shown is that room's.

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

Only hotels with a room that includes breakfast; the price shown is that room's.

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

Only hotels that let you pay at the property.

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

Leave out hotels that are sold out for your dates. When off, sold-out hotels come back without a price.

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

For destination searches, also read each hotel's own page: description, address, amenities, sub-scores, room types and every room offer with its price and conditions. Slower. Hotels you list above always get this.

## `includeReviews` (type: `boolean`):

Also get each hotel's guest reviews, newest first, each one as its own row right after its hotel: the score, title and text, what the guest liked and did not, their country, who they travelled with, the room and the nights, and which site the review was left on. Each review is charged $0.0013, on top of the hotel. Hotels you list above get them too. Slower, since each hotel's reviews are a separate read.

## `reviewsPerHotel` (type: `integer`):

How many of each hotel's newest reviews to get when Add guest reviews is on, at $0.0013 a review: 20 reviews add $0.026 to a hotel. A hotel with fewer gives what it has, and you pay only for the reviews you get.

## `maxResultsPerDestination` (type: `integer`):

Hotels to return for each destination, in the order chosen in Sort by.

## `maxItems` (type: `integer`):

A cap on hotels for the whole run, across every destination and hotel. 0 means no cap beyond the one above.

## Actor input object example

```json
{
  "destinations": [
    "Bangkok"
  ],
  "nights": 1,
  "adults": 2,
  "children": 0,
  "rooms": 1,
  "currency": "USD",
  "language": "en-us",
  "sortBy": "recommended",
  "propertyType": "all",
  "freeCancellationOnly": false,
  "breakfastIncludedOnly": false,
  "payAtHotelOnly": false,
  "onlyAvailable": false,
  "includeRoomOffers": false,
  "includeReviews": false,
  "reviewsPerHotel": 20,
  "maxResultsPerDestination": 100,
  "maxItems": 0
}
```

# Actor output Schema

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

Every row in the default dataset: hotel, price per night and for the stay, guest score, stars, location, cancellation and breakfast, and room offers and guest reviews when asked for. A run that finds nothing returns a free row saying why.

# 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"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("dami_studio/agoda-hotels-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"] }

# Run the Actor and wait for it to finish
run = client.actor("dami_studio/agoda-hotels-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"
  ]
}' |
apify call dami_studio/agoda-hotels-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,dami_studio/agoda-hotels-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/EF2aNcWNlmgSi0fSW/builds/JHxGng0NcoA2hXQQl/openapi.json
