# Agoda Hotel Scraper (`parseforge/agoda-scraper`) Actor

Scrapes Agoda hotel search results for any destination. Returns each property with its nightly price, star rating, review score, and location as a structured row.

- **URL**: https://apify.com/parseforge/agoda-scraper.md
- **Developed by:** [ParseForge](https://apify.com/parseforge) (community)
- **Categories:** Travel, Automation, Developer tools
- **Stats:** 45 total users, 7 monthly users, 85.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $5.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.
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?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — 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

[![ParseForge](https://raw.githubusercontent.com/ParseForge/apify-assets/main/banner.jpg)](https://apify.com/parseforge?fpr=vmoqkp)

### Agoda Hotel Scraper

**Scrape Agoda hotel listings for any destination, up to a million properties per run.** Every hotel comes with its nightly price, star rating, review score, and location details. No API key required. Export to CSV, JSON, Excel, or XML.

Agoda's hotel data is locked behind dynamic pages and rate-limited searches, making bulk collection slow and unreliable. This actor reads the public search results directly for any city, region, or destination you specify. It returns each hotel as a structured row with its current price, guest rating, star class, and location, ready for analysis or price monitoring.

| Who uses it | What they scrape Agoda for |
|---|---|
| Revenue managers | Monitor competitor pricing for a destination across specific dates. |
| Travel aggregators | Build a feed of available properties with live rates and review scores. |
| Market researchers | Analyze hotel supply, star rating distribution, and guest satisfaction in a region. |
| Data analysts | Feed hotel pricing and rating data into dashboards and forecasting models. |

### What it does

This Actor collects Agoda hotel listings by destination search query and returns each property as a flat row with pricing, ratings, and location data.

- 🏨 **Destination search:** enter any city, region, or landmark name to find all available hotels.
- 📅 **Date-specific pricing:** set check-in and check-out dates to see live nightly rates and availability.
- 👥 **Guest and room control:** specify the number of adults and rooms for accurate per-night pricing.
- ⭐ **Flexible sorting:** order results by best match, lowest price, guest review score, or star rating.

Results export to CSV, JSON, Excel, or XML, or straight from the API.

### What you can do with Agoda data

**💰 Monitor competitor pricing.**

A revenue manager runs the actor weekly for a destination to track how rival hotels adjust their rates for the upcoming month.

**📊 Build a market landscape report.**

A consultant scrapes all hotels in a city to analyze the distribution of star ratings, review scores, and price bands.

**🗺️ Populate a travel search engine.**

A developer feeds Agoda hotel data into a meta-search site, combining it with listings from other OTAs.

**📈 Track review score trends.**

A hotel owner scrapes their own property and competitors weekly to monitor guest satisfaction changes over time.

### Why choose this scraper

|  | What you get |
|---|---|
| **Live pricing** | See the actual nightly rate for your exact dates and party size, not a cached estimate. |
| **Review scores** | Get the aggregated guest rating for each property alongside the price. |
| **Star ratings** | Know the official star class of every hotel in your results. |
| **Location data** | Receive the city, area, and geographic coordinates for mapping and regional analysis. |
| **Structured output** | Every hotel is a flat row in CSV, JSON, Excel, or XML, ready for your database or spreadsheet. |

### How it compares

This actor focuses on Agoda search results with date-specific pricing, while the alternatives below either scrape a different source or focus on reviews rather than search listings.

| Feature | ParseForge | Google Hotels Scraper | Fast Agoda Reviews Scraper |
|---|---|---|---|
| Scrapes Agoda search results | Yes | Not listed | Not listed |
| Live nightly pricing for specific dates | Yes | Yes | Not listed |
| Guest review scores | Yes | Yes | Yes |
| Star rating | Yes | Yes | Not listed |
| Sort by price, reviews, or stars | Yes | Not listed | Not listed |
| Full review text extraction | Not listed | Yes | Yes |

### Configure the run

Drive the Actor with a destination search query, then narrow results by travel dates, number of guests, rooms, and sort order so only relevant hotels reach your dataset. The Input tab lists every parameter.

A first run with the defaults:

```json
{
  "searchQuery": "Bangkok",
  "maxItems": 10
}
```

A larger pull:

```json
{
  "searchQuery": "Bangkok",
  "maxItems": 200
}
```

### Pricing

Pay-per-result: **$0.0055 per result** collected. You pay only for the results written to your dataset.

| Results collected | Approximate cost |
|---|---|
| 100 results | $0.55 |
| 1,000 results | $5.50 |
| 10,000 results | $55.00 |

New Apify accounts start with $5 in free credit.

### Free users

Free-plan runs return up to 10 results as a preview. [Upgrade your Apify plan](https://console.apify.com/sign-up?fpr=vmoqkp) to collect up to 1,000,000 results per run.

### Run it

1. [Create a free Apify account with $5 in credit](https://console.apify.com/sign-up?fpr=vmoqkp).
2. Open the [Agoda Hotel Scraper](https://apify.com/parseforge/agoda-scraper?fpr=vmoqkp).
3. Set your inputs and any filters, then click **Start**.
4. Export the results as CSV, Excel, JSON, or XML from the **Dataset** tab.

Run it programmatically through the [Apify API](https://docs.apify.com/api/v2) (`run-sync-get-dataset-items`) or the [ApifyClient](https://docs.apify.com/api/client/js) for JavaScript and Python.

### Use with AI agents (MCP)

Give an AI agent live access to Agoda through the Model Context Protocol. Add the Actor to Claude, Cursor, or any MCP client:

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

Then prompt it in plain language to run the scraper and read back the results.

### Troubleshooting

**Why am I getting no results?**

Check that your searchQuery is a valid destination Agoda recognizes. Try a broader term like a major city name. Also verify your check-in date is not in the past.

**The prices look different from what I see on the website.**

Prices on Agoda can change frequently and may vary by user location, cookies, or membership status. The actor captures the public rate shown for your specified dates and guest count at the moment of scraping.

**The actor is running slowly or timing out.**

Agoda's pages are dynamic and image-heavy. Reduce maxItems to a smaller number, or increase the run timeout in your actor settings. A faster Apify plan with more memory can also help.

**Some hotels are missing from the results.**

Agoda's search ranking can push some properties deep into pagination. Try increasing maxItems, or narrow your search with a more specific destination name to reduce the total result set.

**I get an error about the date format.**

Ensure your checkIn and checkOut values use the YYYY-MM-DD format exactly, for example 2025-12-25. Do not use slashes or written month names.

### FAQ

| Question | Answer |
|---|---|
| Can I scrape hotels for a specific check-in date? | Yes. Set the checkIn and checkOut fields in YYYY-MM-DD format. The actor will return live pricing for those exact dates. If you leave them empty, it defaults to tomorrow and the following day. |
| How many hotels can I scrape in one run? | You can set maxItems up to 1,000,000. The actor will collect that many properties from the search results, stopping when it reaches your limit or runs out of listings. |
| What destination formats does the search accept? | You can enter a city name like Bangkok, a region like Bali, or a specific landmark. The actor passes your query directly to Agoda's search and collects the results. |
| Does this actor get the full hotel description and amenities? | This actor collects the search result data: price, star rating, review score, and location. For full details, photos, and amenities, you would need a hotel detail page scraper. |
| Can I sort results by lowest price? | Yes. Set the sortBy field to Price. You can also sort by Best Match, Guest Reviews, or Star Rating. |
| Do I need an Agoda account or API key? | No. This actor reads the public search pages. No login, no API registration, and no key are required. |
| Can I search for multiple destinations in one run? | Each run takes one search query. To scrape multiple destinations, run the actor multiple times with different searchQuery values, or use an array input in a workflow. |
| What output formats are supported? | You can export your dataset as CSV, JSON, Excel, or XML directly from the Apify platform. |
| Does the actor handle Agoda's dynamic page loading? | Yes. The actor uses a headless browser to render the search results, scroll through listings, and extract data from the fully loaded page. |
| Can I set the number of guests and rooms? | Yes. The adults and rooms fields let you specify your party size. The pricing returned will reflect the per-night cost for that configuration. |

### Related actors

Browse the full [ParseForge collection](https://apify.com/parseforge?fpr=vmoqkp) for more scrapers.

🆘 **Need help?** Email parseforge@protonmail.com with your run ID, your input, and what you expected.

⚠️ **Disclaimer.** This Actor is unofficial and is not affiliated with, endorsed by, or sponsored by Agoda Company Pte. Ltd. It collects only publicly available data. You are responsible for using the collected data in compliance with the source's terms of service and applicable data-protection laws, including GDPR, CCPA, and PIPL. Do not use it to collect personal data unlawfully.

# Actor input Schema

## `searchQuery` (type: `string`):

City, region, or destination to search for hotels (e.g. Bangkok, Bali, Tokyo).

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

How many hotels to collect per run.

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

Check-in date in YYYY-MM-DD format. Defaults to tomorrow if not set.

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

Check-out date in YYYY-MM-DD format. Defaults to the day after check-in if not set.

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

Number of adult guests.

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

Number of rooms.

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

How to sort the search results.

## Actor input object example

```json
{
  "searchQuery": "Bangkok",
  "maxItems": 10,
  "adults": 2,
  "rooms": 1,
  "sortBy": "Ranking"
}
```

# Actor output Schema

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

Dataset with all scraped items

# 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 = {
    "searchQuery": "Bangkok",
    "maxItems": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("parseforge/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 = {
    "searchQuery": "Bangkok",
    "maxItems": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("parseforge/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 '{
  "searchQuery": "Bangkok",
  "maxItems": 10
}' |
apify call parseforge/agoda-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,parseforge/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/1YAd4tHCm9xeWpinG/builds/MUqhcha0YX7LtRuiz/openapi.json
