# Agoda Scraper (`solidcode/agoda-scraper`) Actor

\[💰 $2.0 / 1K] Extract hotel and accommodation listings from Agoda — prices, ratings, addresses, photos, and amenities. Search by destination keyword or paste Agoda URLs directly.

- **URL**: https://apify.com/solidcode/agoda-scraper.md
- **Developed by:** [SolidCode](https://apify.com/solidcode) (community)
- **Categories:** Travel, Developer tools, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 results

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

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

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

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

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

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

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


# README

## Agoda Scraper

Pull hotel and accommodation listings from Agoda at scale — names, addresses, coordinates, star ratings, guest scores, nightly prices, photos, amenities, descriptions, and check-in windows for any destination across 200+ countries. Built for travel aggregators, OTA market researchers, hospitality analysts, and travel-content teams who need fresh Agoda inventory and pricing without wrestling with city IDs, locale-prefixed URLs, and date-bound pagination.

### Why This Scraper?

- **Full Agoda catalog across 200+ countries** — search by destination keyword in any of **20 site languages** and **28 currencies**, including USD, EUR, GBP, JPY, KRW, IDR, AED, and THB.
- **Six sort modes** — Recommended, Price (low/high), Review score (high/low), and Distance from city center, so you can build a Cheapest-First feed or a Highest-Rated comparison without re-fetching.
- **5-tier star rating filter (1★–5★)** plus **8 property types** — Hotels, Apartments, Hostels, Resorts, Villas, Bed & Breakfasts, Guest Houses, and Vacation Homes — pick any subset, leave empty for everything.
- **Multi-occupancy with child ages** — rooms, adults, children, and per-child age list surface the same family-aware nightly pricing the Agoda website shows for that exact party.
- **Output `url` and `propertyId` chain straight into Agoda Reviews Scraper** — every row carries the canonical hotel URL plus numeric property ID, so a search → reviews pipeline is one input wire.
- **Optional `includeHotelDetails` enrichment** — flip one toggle to add full hotel description, named amenity categories, and check-in/check-out windows to every row in the same run.
- **Per-row guest-score band** with `reviewScore`, `reviewScoreLabel` (Exceptional / Excellent / Very good / Good / Fair / Below average), `reviewCount`, and a separate `minReviewScore` / `maxReviewScore` gate on input.
- **Discount detection** — when Agoda shows a strikethrough price, the row gets a calculated `discountPercent` so you can sort or alert on deals without parsing the UI.
- **Search by destination string OR by direct Agoda URL** — paste `https://www.agoda.com/en-gb/search?city=5085...` or any individual hotel page URL and the scraper auto-detects which endpoint to hit.

### Use Cases

**Travel Comparison & Aggregator Sites**
- Build city-by-city hotel inventories with current nightly rates
- Surface deals by sorting on `discountPercent` and `pricePerRoomPerNight`
- Power "best of" landing pages with real ratings, photos, and amenity lists

**Hospitality Market Research**
- Track hotel supply by star tier and property type across markets
- Compare average nightly rates by city, neighborhood, or country
- Monitor seasonal pricing curves with repeated date-window runs

**Competitive Pricing & Revenue Management**
- Benchmark your property against neighbors on Agoda for the same dates
- Detect competitor discounting by watching `discountPercent` changes
- Calibrate your own pricing windows by sorting on `price_low_to_high`

**Travel Content & Destination Guides**
- Generate "Top 25 hotels in Bangkok under $100" listicles with verified data
- Pull full descriptions, amenities, and photos for content-rich destination pages
- Cross-reference rooms with the **Agoda Reviews Scraper** to add guest sentiment

**Lead Generation & Sales**
- Build hotel sales prospect lists filtered by star rating and review count
- Target boutique-hotel chains by property type (Villas, Bed & Breakfasts, Guest Houses)
- Identify under-rated or under-reviewed properties for marketing-services pitches

### Getting Started

#### Simple — One destination, one date window

```json
{
    "search": ["hotels in Tokyo"],
    "checkIn": "2026-06-15",
    "checkOut": "2026-06-18",
    "maxResults": 100
}
````

#### Filtered — 4★ and 5★ only, sorted cheapest first

```json
{
    "search": ["Bangkok"],
    "checkIn": "2026-07-10",
    "checkOut": "2026-07-12",
    "starsCountFilter": ["4", "5"],
    "priceMin": 80,
    "priceMax": 250,
    "sortBy": "price_low_to_high",
    "minReviewScore": 8,
    "maxResults": 200
}
```

#### Advanced — Multi-destination, family of four, full hotel detail enrichment, JPY pricing in Japanese

```json
{
    "search": ["Kyoto", "Osaka", "Hakone"],
    "checkIn": "2026-09-20",
    "checkOut": "2026-09-25",
    "rooms": 1,
    "adults": 2,
    "children": 2,
    "childrenAges": ["5", "8"],
    "propertyType": ["hotels", "resorts"],
    "starsCountFilter": ["4", "5"],
    "sortBy": "review_high_to_low",
    "language": "ja-jp",
    "currency": "JPY",
    "includeHotelDetails": true,
    "maxResults": 300
}
```

### Input Reference

#### What to Scrape

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `search` | string\[] | `["hotels in Tokyo"]` | Destination keywords. Each entry runs as its own Agoda search. Use this OR `startUrls`. |
| `startUrls` | string\[] | `[]` | Paste Agoda search-result URLs or individual hotel page URLs. Auto-detects the URL type. Same field shape as **Agoda Reviews Scraper** for easy chaining. |

#### Dates & Guests

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `checkIn` | string (YYYY-MM-DD) | empty | Check-in date. Required to fetch live nightly prices — leave empty for catalog data only. |
| `checkOut` | string (YYYY-MM-DD) | empty | Check-out date. Must be after `checkIn`. |
| `rooms` | integer | `1` | Number of rooms required (1–9). |
| `adults` | integer | `2` | Number of adult guests (1–20). Agoda counts age 18+ as an adult. |
| `children` | integer | `0` | Number of child guests (0–10), ages 0–17. |
| `childrenAges` | string\[] | `[]` | Age of each child guest. Required when `children` > 0 — Agoda prices family rooms based on these ages. Example: `["5", "8"]`. |

#### Filters

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `propertyType` | select\[] | empty | Restrict to one or more accommodation types: Hotels, Apartments, Hostels, Resorts, Villas, Bed & Breakfasts, Guest Houses, Vacation Homes. |
| `starsCountFilter` | select\[] | empty | Only include properties with these official star ratings (1 star – 5 stars). Empty = any. |
| `minReviewScore` | integer | `0` | Minimum guest review score on Agoda's 0–10 scale. |
| `maxReviewScore` | integer | `10` | Maximum guest review score on Agoda's 0–10 scale. |
| `priceMin` | integer | empty | Minimum nightly price in the chosen currency. Empty = no minimum. |
| `priceMax` | integer | empty | Maximum nightly price in the chosen currency. Empty = no maximum (recommended for high-denomination currencies like JPY, KRW, IDR). |

#### Sort & Localization

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `sortBy` | select | `Recommended` | Recommended, Price (lowest first), Price (highest first), Review score (highest first), Review score (lowest first), Distance from city center. |
| `language` | select | `English (UK)` | Agoda site language (locale). Affects descriptions and amenity labels. 20 options: English (UK/US), German, French, Spanish, Italian, Dutch, Portuguese, Polish, Russian, Japanese, Korean, Chinese (Simplified/Traditional), Thai, Vietnamese, Indonesian, Malay, Arabic, Turkish. |
| `currency` | select | `US Dollar` | Currency code (ISO 4217). 28 options including USD, EUR, GBP, JPY, KRW, IDR, AED, THB. Forces all prices into this currency regardless of the locale default. |

#### Options

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `maxResults` | integer | `100` | Maximum hotels to return per destination/URL. Set to `0` for all available. The last page is kept whole — the scraper stops asking for new pages once the cap is reached but never truncates mid-page. A single Agoda search holds anywhere from a few hundred to several thousand listings depending on the destination (Bangkok ≈ 4,000, Tokyo ≈ 900). For very large destinations, split the query by neighborhood, star tier, or property type to go beyond what one search can return. |
| `includeHotelDetails` | boolean | `false` | Fetch the hotel detail page for every result and add full description, amenities, and check-in/check-out times to each row. Roughly doubles the row cost — leave off for fast catalog runs. |

### Output

#### Hotel row (always)

```json
{
    "propertyId": 1234567,
    "name": "The Peninsula Tokyo",
    "url": "https://www.agoda.com/en-gb/the-peninsula-tokyo/hotel/tokyo-jp.html",
    "propertyType": "Hotel",
    "image": "https://q-xx.bstatic.com/xdata/images/hotel/max1024x768/12345.jpg",
    "address": {
        "country": "Japan",
        "countryCode": "JP",
        "city": "Tokyo",
        "area": "Marunouchi",
        "street": "",
        "postalCode": ""
    },
    "location": { "lat": 35.6762, "lng": 139.7649 },
    "rating": 5,
    "reviewCount": 1842,
    "reviewScore": 9.2,
    "reviewScoreLabel": "Exceptional",
    "pricePerRoomPerNight": 920,
    "pricePerBook": 2760,
    "priceCurrency": "USD",
    "requestedCurrency": "USD",
    "discountPercent": 15,
    "freeCancellation": true,
    "breakfastIncluded": null,
    "amenities": [],
    "description": null,
    "checkInTime": null,
    "checkOutTime": null,
    "searchQuery": "hotels in Tokyo",
    "searchUrl": "https://www.agoda.com/en-gb/search?city=14266"
}
```

#### Core Fields

| Field | Type | Description |
|-------|------|-------------|
| `propertyId` | number | Numeric Agoda hotel ID. Drops directly into the **Agoda Reviews Scraper** `hotelIds` input. |
| `name` | string | Hotel name in the requested locale. |
| `url` | string | Canonical Agoda hotel URL. Drops directly into the **Agoda Reviews Scraper** `startUrls` input. |
| `propertyType` | string | Property type label (Hotel, Resort, Apartment, etc.). |
| `image` | string | Primary hotel photo URL (https-normalized). |
| `rating` | number | Official star rating (1–5). |
| `searchQuery` | string | The destination string that produced this row. |
| `searchUrl` | string | The Agoda search URL that produced this row. |

#### Address & Location

| Field | Type | Description |
|-------|------|-------------|
| `address.country` | string | Country name. |
| `address.countryCode` | string | ISO country code. |
| `address.city` | string | City name. |
| `address.area` | string | Neighborhood / district name. |
| `address.street` | string | Street address (populated when `includeHotelDetails` is on). |
| `address.postalCode` | string | Postal code (populated when `includeHotelDetails` is on). |
| `address.full` | string | Full formatted address (populated when `includeHotelDetails` is on). |
| `location.lat` | number | Latitude. |
| `location.lng` | number | Longitude. |

#### Ratings & Pricing

| Field | Type | Description |
|-------|------|-------------|
| `reviewCount` | number | Total guest reviews on Agoda. |
| `reviewScore` | number | Guest review score on Agoda's 0–10 scale. |
| `reviewScoreLabel` | string | Bucketed label: Exceptional, Excellent, Very good, Good, Fair, Below average. |
| `pricePerRoomPerNight` | number | Nightly rate in `priceCurrency`. |
| `pricePerBook` | number | Total stay price in `priceCurrency`. |
| `priceCurrency` | string | Currency Agoda actually returned (some locales force a substitution). |
| `requestedCurrency` | string | Currency the input asked for. Compare with `priceCurrency` to detect overrides. |
| `discountPercent` | number | Percent off the strikethrough price, when Agoda displays one. |
| `freeCancellation` | boolean | Whether the surfaced offer includes free cancellation. |

#### Detail Enrichment (only when `includeHotelDetails: true`)

| Field | Type | Description |
|-------|------|-------------|
| `description` | string | Full hotel description in the requested locale. |
| `amenities` | string\[] | Named amenity categories (e.g. "Wellness", "Food and drink", "Outdoors"). |
| `images` | string\[] | Up to 12 gallery photo URLs for the hotel (https-normalized). |
| `checkInTime` | string | Stated check-in window (e.g. "From 15:00"). |
| `checkOutTime` | string | Stated check-out window (e.g. "Until 11:00"). |

### Tips for Best Results

- **Pair this scraper with [Agoda Reviews Scraper](https://apify.com/solidcode/agoda-reviews-scraper)** — feed each row's `url` straight into the reviews scraper's `startUrls` (or `propertyId` into `hotelIds`) for end-to-end hotel + guest-feedback pipelines in two clicks.
- **Always pass `checkIn` and `checkOut` when you need prices** — without dates the catalog data still comes through (names, ratings, addresses, photos) but `pricePerRoomPerNight` will be empty, since Agoda only quotes rates against a real date window.
- **Run multiple date windows for maximum city coverage** — Agoda's available inventory shifts with seasonality and last-minute releases, so three runs across three weekends will pick up properties a single run misses.
- **Match `currency` to your audience, not the destination** — set `currency: "USD"` for a US-facing dashboard even when scraping Tokyo or Bangkok; Agoda will convert and surface the rate.
- **Leave `priceMax` empty for high-denomination currencies** (JPY, KRW, IDR, VND) unless you really mean to filter — a `priceMax: 1000` against JPY will exclude almost everything.
- **Use `sortBy: "review_high_to_low"` with `minReviewScore: 8`** to build a "best in city" list without sifting through low-rated properties.
- **Children pricing requires `childrenAges`** — Agoda quotes family rooms based on each child's age. A `children: 2` input without ages will fall back to adult-priced occupancy.

### Pricing

**$2.00 per 1,000 results** — flat. No compute charges — you only pay per result returned.

| Results | Estimated Cost |
|---------|----------------|
| 100 | $0.20 |
| 1,000 | $2.00 |
| 10,000 | $20.00 |
| 100,000 | $200.00 |

A "result" is one hotel row in the output dataset. Enabling `includeHotelDetails` does not change the per-row price — it only changes how many fields each row contains.

### Integrations

Export data in JSON, CSV, Excel, XML, or RSS. Connect to 1,500+ apps via:

- **Zapier** / **Make** / **n8n** — Workflow automation
- **Google Sheets** — Direct spreadsheet export
- **Slack** / **Email** — Notifications on new results
- **Webhooks** — Trigger custom APIs on run completion
- **Apify API** — Full programmatic access
- **Agoda Reviews Scraper** — Pipe each `url` straight in for a complete hotel + reviews dataset

### Legal & Ethical Use

This actor is designed for legitimate travel research, market analysis, content publishing, and competitive benchmarking. Users are responsible for complying with applicable laws and Agoda's Terms of Service. Do not use extracted data for spam, price manipulation, or any illegal purpose. Respect Agoda's published rate parity rules when republishing pricing data.

# Actor input Schema

## `search` (type: `array`):

One or more destination keywords (e.g. 'Tokyo', 'Bangkok hotels near skytrain', 'Bali villas'). Each entry runs as its own Agoda search. Use this OR Agoda URLs below.

## `startUrls` (type: `array`):

Paste Agoda search-result URLs or individual hotel page URLs (e.g. https://www.agoda.com/the-peninsula-bangkok/hotel/bangkok-th.html). Auto-detects URL type. Aligns with Agoda Reviews Scraper input — same field name and shape, so you can move data between actors without reformatting.

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

Check-in date in YYYY-MM-DD format. Required to fetch live nightly prices — leave empty for catalog data only (names, ratings, addresses, photos).

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

Check-out date in YYYY-MM-DD format. Must be after the check-in date.

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

Number of rooms required.

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

Number of adult guests (Agoda considers age 18 and up an adult).

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

Number of child guests (ages 0-17).

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

Age of each child guest (0-17). Required when 'Children' is greater than 0 — Agoda prices family rooms based on these ages. Example: \['5', '8'] for two children aged 5 and 8.

## `propertyType` (type: `array`):

Restrict results to one or more accommodation types. Multi-select. Empty = include all types.

## `starsCountFilter` (type: `array`):

Only include properties with these official star ratings. Multi-select. Empty = any number of stars.

## `minReviewScore` (type: `integer`):

Minimum guest review score (Agoda scale, 0-10). Default 0 = no minimum.

## `maxReviewScore` (type: `integer`):

Maximum guest review score (Agoda scale, 0-10). Default 10 = no maximum.

## `priceMin` (type: `integer`):

Minimum nightly price in the chosen currency. Leave empty for no minimum.

## `priceMax` (type: `integer`):

Maximum nightly price in the chosen currency. Leave empty for no maximum — high-denomination currencies (JPY, KRW, IDR) are handled correctly when this is empty.

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

How Agoda should rank the results.

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

Agoda site language (locale). Affects descriptions, amenity labels, and the default currency Agoda would otherwise apply.

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

Currency code (ISO 4217). Forces all price fields into this currency regardless of the language locale.

## `maxResults` (type: `integer`):

Maximum hotels to return per destination/URL. Set to 0 for all available. Each result is one billable item at $2 per 1,000. The last page is always kept whole — the actor stops asking for new pages once the cap is reached but does not truncate mid-page. Note: a single Agoda search holds anywhere from a few hundred to several thousand listings depending on the destination (Bangkok ≈ 4,000, Tokyo ≈ 900). For very large destinations, split the query by neighborhood, star tier, or property type to go beyond what one search can return.

## `includeHotelDetails` (type: `boolean`):

Fetch the hotel detail page for each result and add amenities, full description, gallery photos, and check-in/out times to every row. Roughly doubles cost — leave off for fast catalog runs (names, prices, stars, ratings).

## Actor input object example

```json
{
  "search": [
    "hotels in Tokyo"
  ],
  "startUrls": [],
  "rooms": 1,
  "adults": 2,
  "children": 0,
  "childrenAges": [],
  "propertyType": [],
  "starsCountFilter": [],
  "minReviewScore": 0,
  "maxReviewScore": 10,
  "sortBy": "recommended",
  "language": "en-gb",
  "currency": "USD",
  "maxResults": 100,
  "includeHotelDetails": false
}
```

# Actor output Schema

## `overview` (type: `string`):

Table of hotels with key fields: name, location, star rating, guest score, and price.

## `details` (type: `string`):

Complete hotel rows including pricing breakdown, location coordinates, image, address, and (when enabled) amenities and 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 = {
    "search": [
        "hotels in Tokyo"
    ],
    "startUrls": [],
    "rooms": 1,
    "adults": 2,
    "children": 0,
    "childrenAges": [],
    "propertyType": [],
    "starsCountFilter": [],
    "minReviewScore": 0,
    "maxReviewScore": 10,
    "sortBy": "recommended",
    "language": "en-gb",
    "currency": "USD",
    "maxResults": 100,
    "includeHotelDetails": false
};

// Run the Actor and wait for it to finish
const run = await client.actor("solidcode/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 = {
    "search": ["hotels in Tokyo"],
    "startUrls": [],
    "rooms": 1,
    "adults": 2,
    "children": 0,
    "childrenAges": [],
    "propertyType": [],
    "starsCountFilter": [],
    "minReviewScore": 0,
    "maxReviewScore": 10,
    "sortBy": "recommended",
    "language": "en-gb",
    "currency": "USD",
    "maxResults": 100,
    "includeHotelDetails": False,
}

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

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

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

```

## CLI example

```bash
echo '{
  "search": [
    "hotels in Tokyo"
  ],
  "startUrls": [],
  "rooms": 1,
  "adults": 2,
  "children": 0,
  "childrenAges": [],
  "propertyType": [],
  "starsCountFilter": [],
  "minReviewScore": 0,
  "maxReviewScore": 10,
  "sortBy": "recommended",
  "language": "en-gb",
  "currency": "USD",
  "maxResults": 100,
  "includeHotelDetails": false
}' |
apify call solidcode/agoda-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Agoda Scraper",
        "description": "[💰 $2.0 / 1K] Extract hotel and accommodation listings from Agoda — prices, ratings, addresses, photos, and amenities. Search by destination keyword or paste Agoda URLs directly.",
        "version": "1.0",
        "x-build-id": "1tm9BsFgEPcp6jom1"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/solidcode~agoda-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-solidcode-agoda-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/solidcode~agoda-scraper/runs": {
            "post": {
                "operationId": "runs-sync-solidcode-agoda-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/solidcode~agoda-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-solidcode-agoda-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "search": {
                        "title": "Destinations",
                        "type": "array",
                        "description": "One or more destination keywords (e.g. 'Tokyo', 'Bangkok hotels near skytrain', 'Bali villas'). Each entry runs as its own Agoda search. Use this OR Agoda URLs below.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "startUrls": {
                        "title": "Agoda URLs",
                        "type": "array",
                        "description": "Paste Agoda search-result URLs or individual hotel page URLs (e.g. https://www.agoda.com/the-peninsula-bangkok/hotel/bangkok-th.html). Auto-detects URL type. Aligns with Agoda Reviews Scraper input — same field name and shape, so you can move data between actors without reformatting.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "checkIn": {
                        "title": "Check-in Date",
                        "type": "string",
                        "description": "Check-in date in YYYY-MM-DD format. Required to fetch live nightly prices — leave empty for catalog data only (names, ratings, addresses, photos)."
                    },
                    "checkOut": {
                        "title": "Check-out Date",
                        "type": "string",
                        "description": "Check-out date in YYYY-MM-DD format. Must be after the check-in date."
                    },
                    "rooms": {
                        "title": "Rooms",
                        "minimum": 1,
                        "maximum": 9,
                        "type": "integer",
                        "description": "Number of rooms required.",
                        "default": 1
                    },
                    "adults": {
                        "title": "Adults",
                        "minimum": 1,
                        "maximum": 20,
                        "type": "integer",
                        "description": "Number of adult guests (Agoda considers age 18 and up an adult).",
                        "default": 2
                    },
                    "children": {
                        "title": "Children",
                        "minimum": 0,
                        "maximum": 10,
                        "type": "integer",
                        "description": "Number of child guests (ages 0-17).",
                        "default": 0
                    },
                    "childrenAges": {
                        "title": "Children Ages",
                        "type": "array",
                        "description": "Age of each child guest (0-17). Required when 'Children' is greater than 0 — Agoda prices family rooms based on these ages. Example: ['5', '8'] for two children aged 5 and 8.",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    },
                    "propertyType": {
                        "title": "Property Types",
                        "uniqueItems": true,
                        "type": "array",
                        "description": "Restrict results to one or more accommodation types. Multi-select. Empty = include all types.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "hotels",
                                "apartments",
                                "hostels",
                                "resorts",
                                "villas",
                                "bed_and_breakfasts",
                                "guest_houses",
                                "vacation_homes"
                            ],
                            "enumTitles": [
                                "Hotels",
                                "Apartments",
                                "Hostels",
                                "Resorts",
                                "Villas",
                                "Bed & Breakfasts",
                                "Guest Houses",
                                "Vacation Homes"
                            ]
                        },
                        "default": []
                    },
                    "starsCountFilter": {
                        "title": "Hotel Stars",
                        "uniqueItems": true,
                        "type": "array",
                        "description": "Only include properties with these official star ratings. Multi-select. Empty = any number of stars.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "1",
                                "2",
                                "3",
                                "4",
                                "5"
                            ],
                            "enumTitles": [
                                "1 star",
                                "2 stars",
                                "3 stars",
                                "4 stars",
                                "5 stars"
                            ]
                        },
                        "default": []
                    },
                    "minReviewScore": {
                        "title": "Minimum Guest Review Score",
                        "minimum": 0,
                        "maximum": 10,
                        "type": "integer",
                        "description": "Minimum guest review score (Agoda scale, 0-10). Default 0 = no minimum.",
                        "default": 0
                    },
                    "maxReviewScore": {
                        "title": "Maximum Guest Review Score",
                        "minimum": 0,
                        "maximum": 10,
                        "type": "integer",
                        "description": "Maximum guest review score (Agoda scale, 0-10). Default 10 = no maximum.",
                        "default": 10
                    },
                    "priceMin": {
                        "title": "Minimum Price per Night",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Minimum nightly price in the chosen currency. Leave empty for no minimum."
                    },
                    "priceMax": {
                        "title": "Maximum Price per Night",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Maximum nightly price in the chosen currency. Leave empty for no maximum — high-denomination currencies (JPY, KRW, IDR) are handled correctly when this is empty."
                    },
                    "sortBy": {
                        "title": "Sort Order",
                        "enum": [
                            "recommended",
                            "price_low_to_high",
                            "price_high_to_low",
                            "review_high_to_low",
                            "review_low_to_high",
                            "distance"
                        ],
                        "type": "string",
                        "description": "How Agoda should rank the results.",
                        "default": "recommended"
                    },
                    "language": {
                        "title": "Language",
                        "enum": [
                            "en-gb",
                            "en-us",
                            "de-de",
                            "fr-fr",
                            "es-es",
                            "it-it",
                            "nl-nl",
                            "pt-pt",
                            "pl-pl",
                            "ru-ru",
                            "ja-jp",
                            "ko-kr",
                            "zh-cn",
                            "zh-tw",
                            "th-th",
                            "vi-vn",
                            "id-id",
                            "ms-my",
                            "ar-ae",
                            "tr-tr"
                        ],
                        "type": "string",
                        "description": "Agoda site language (locale). Affects descriptions, amenity labels, and the default currency Agoda would otherwise apply.",
                        "default": "en-gb"
                    },
                    "currency": {
                        "title": "Currency",
                        "enum": [
                            "USD",
                            "EUR",
                            "GBP",
                            "CAD",
                            "AUD",
                            "NZD",
                            "JPY",
                            "CNY",
                            "HKD",
                            "SGD",
                            "INR",
                            "BRL",
                            "MXN",
                            "CHF",
                            "SEK",
                            "NOK",
                            "DKK",
                            "PLN",
                            "TRY",
                            "AED",
                            "ZAR",
                            "THB",
                            "IDR",
                            "MYR",
                            "PHP",
                            "VND",
                            "KRW",
                            "TWD"
                        ],
                        "type": "string",
                        "description": "Currency code (ISO 4217). Forces all price fields into this currency regardless of the language locale.",
                        "default": "USD"
                    },
                    "maxResults": {
                        "title": "Max Results per Search",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Maximum hotels to return per destination/URL. Set to 0 for all available. Each result is one billable item at $2 per 1,000. The last page is always kept whole — the actor stops asking for new pages once the cap is reached but does not truncate mid-page. Note: a single Agoda search holds anywhere from a few hundred to several thousand listings depending on the destination (Bangkok ≈ 4,000, Tokyo ≈ 900). For very large destinations, split the query by neighborhood, star tier, or property type to go beyond what one search can return.",
                        "default": 100
                    },
                    "includeHotelDetails": {
                        "title": "Include Hotel Details on Every Row",
                        "type": "boolean",
                        "description": "Fetch the hotel detail page for each result and add amenities, full description, gallery photos, and check-in/out times to every row. Roughly doubles cost — leave off for fast catalog runs (names, prices, stars, ratings).",
                        "default": false
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
