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

Scrape hotel listings from Agoda.com including prices, ratings, reviews, location, and amenities. Search by city with date and guest filters. Browser-based extraction captures full hotel data. Export structured accommodation data.

- **URL**: https://apify.com/parseforge/agoda-scraper.md
- **Developed by:** [ParseForge](https://apify.com/parseforge) (community)
- **Categories:** Travel, Automation, Developer tools
- **Stats:** 1 total users, 0 monthly users, 0.0% runs succeeded, NaN 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/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

![ParseForge Banner](https://github.com/ParseForge/apify-assets/blob/ad35ccc13ddd068b9d6cba33f323962e39aed5b2/banner.jpg?raw=true)

## 🏨 Agoda Hotel Scraper

Collect hotel listings from Agoda.com without coding. This scraper extracts hotel name, price, star rating, guest reviews, location, address, coordinates, discount percentage, and accommodation type, making it perfect for travel analysts tracking hotel prices, developers building accommodation search tools, or researchers studying the hospitality market.

> **The Agoda Hotel Scraper collects hotel listings with up to 19 data fields per property, including pricing with discounts, geo-coordinates, review scores, and accommodation highlights.**

### ✨ What Does It Do

- 🏨 **Hotel Name** - Identify properties across any destination for market research
- ⭐ **Star Rating** - Filter and compare hotels by official star classification
- 📊 **Review Score** - Collect guest satisfaction ratings for quality benchmarking
- 💰 **Price & Discounts** - Track nightly rates, original prices, and discount percentages for pricing analysis
- 📍 **Location Data** - Get full address, city, country, and GPS coordinates for geographic analysis
- 🖼️ **Hotel Image** - Capture property photos for visual dashboards and reports
- 🏷️ **Accommodation Type** - Distinguish hotels, hostels, apartments, and resorts
- 🔗 **Hotel URL** - Direct links to each property listing on Agoda

### 🔧 Input

- **Search Query** - City, region, or destination to search for hotels (e.g. Bangkok, Bali, Tokyo)
- **Check-In Date** - Check-in date in YYYY-MM-DD format (defaults to tomorrow)
- **Check-Out Date** - Check-out date in YYYY-MM-DD format (defaults to day after check-in)
- **Adults** - Number of adult guests (default 2)
- **Rooms** - Number of rooms (default 1)
- **Sort By** - Sort results by Best Match, Price, Guest Reviews, or Star Rating
- **Max Items** - How many hotel listings to collect per run

Example input:
```json
{
  "searchQuery": "Bangkok",
  "checkIn": "2026-05-01",
  "checkOut": "2026-05-02",
  "adults": 2,
  "rooms": 1,
  "sortBy": "Ranking",
  "maxItems": 10
}
````

### 📊 Output

Each hotel listing includes up to 19 data fields. Download as JSON, CSV, or Excel.

| 🖼️ Image | 🏨 Hotel Name | 🆔 Hotel ID |
|---|---|---|
| ⭐ Star Rating | 📊 Review Score | 🔢 Review Count |
| 💰 Price | 💱 Currency | 💸 Original Price |
| 📉 Discount % | 📍 Address | 🌆 City |
| 🌍 Country | 📐 Latitude | 📐 Longitude |
| 🔗 Hotel URL | 🏷️ Accommodation Type | ✨ Highlights |
| ⏰ Scraped At | ⚠️ Error (if any) | |

### 💎 Why Choose the Agoda Hotel Scraper?

| Feature | Our Actor |
|---|---|
| Real-time hotel data from Agoda search results | ✔️ |
| Price tracking with discount detection | ✔️ |
| GPS coordinates for geographic analysis | ✔️ |
| Guest review scores and counts | ✔️ |
| Star rating and accommodation type | ✔️ |
| CSV, Excel, and JSON export | ✔️ |
| GraphQL interception with DOM fallback | ✔️ |
| Support for large-scale collection (1 million+ items) | ✔️ |
| Configurable search dates, guests, and sorting | ✔️ |

### 📋 How to Use

No technical skills required. Follow these simple steps:

1. **Sign Up** - [Create a free account with $5 credit](https://console.apify.com/sign-up?fpr=vmoqkp)
2. **Find the Tool** - Search for "Agoda Hotel Scraper" in the Apify Store and enter your destination
3. **Run It** - Click "Start" and watch your results appear

That's it. No coding, no setup needed. Export your data in CSV, Excel, or JSON format.

### 🎯 Business Use Cases

- 📊 **Travel Analyst** - Monitor hotel pricing trends across 50+ destinations weekly to identify seasonal patterns and publish rate benchmarks
- 💼 **OTA Developer** - Collect property data daily to build competitive accommodation comparison tools and price alerts
- 🔬 **Hospitality Researcher** - Track review scores and star ratings month-over-month to measure guest satisfaction shifts across regions

### ❓ FAQ

**🔍 How does this scraper work?**
The scraper launches a browser to load Agoda search results, intercepts GraphQL API responses for structured data extraction, and falls back to DOM scraping when needed. This dual approach ensures reliable data collection.

**💰 How accurate is the price data?**
Prices come directly from Agoda search results and reflect the rates shown for your selected dates, guests, and rooms. Original prices and discount percentages are captured when available. Prices may vary based on availability and demand.

**📅 Can I schedule this to run automatically?**
Yes. Use the Apify scheduler to run this actor on a daily, weekly, or monthly basis. You can also integrate it with Make, Zapier, or GitHub Actions for automated hotel price monitoring.

**⚖️ Is scraping Agoda allowed?**
You are collecting publicly visible hotel listing data. Always review the site terms of service and ensure your use case complies with local laws and regulations.

**🛡️ Will Agoda block me?**
Agoda uses Akamai CDN which is less aggressive than Cloudflare. The scraper uses a real browser which handles standard protections. For heavy usage, enable proxy configuration.

**⚡ How long does a run take?**
A run collecting 10 hotels typically takes 30-60 seconds including browser startup and page loading time.

**⚠️ Are there any limits?**
Free users get up to 10 items. Paid users can collect up to 1,000,000 results.

### 🔗 Integrate Agoda Hotel Scraper with any app

- [Make](https://docs.apify.com/platform/integrations/make) - Automate workflows
- [Zapier](https://docs.apify.com/platform/integrations/zapier) - Connect 5000+ apps
- [GitHub](https://docs.apify.com/platform/integrations/github) - Version control integration
- [Slack](https://docs.apify.com/platform/integrations/slack) - Get notifications
- [Airbyte](https://docs.apify.com/platform/integrations/airbyte) - Data pipelines
- [Google Drive](https://docs.apify.com/platform/integrations/drive) - Export to spreadsheets

### 💡 More ParseForge Actors

- [Booking.com Hotel Scraper](https://apify.com/parseforge/booking-scraper) - Collect hotel listings and pricing from Booking.com
- [TripAdvisor Scraper](https://apify.com/parseforge/tripadvisor-scraper) - Extract reviews and ratings from TripAdvisor
- [Google Maps Scraper](https://apify.com/parseforge/google-maps-scraper) - Scrape business listings from Google Maps
- [Airbnb Scraper](https://apify.com/parseforge/airbnb-scraper) - Extract property listings from Airbnb
- [Expedia Scraper](https://apify.com/parseforge/expedia-scraper) - Collect hotel data from Expedia

Browse our complete collection of [data extraction tools](https://apify.com/parseforge) for more.

### 🚀 Ready to Start?

[Create a free account with $5 credit](https://console.apify.com/sign-up?fpr=vmoqkp) and collect your first 100 results for free. No coding, no setup.

### 🆘 Need Help?

- Check the FAQ section above for common questions
- Visit the [Apify support page](https://docs.apify.com) for documentation and tutorials
- Contact us to request a new scraper, propose a custom project, or report an issue at [Tally contact form](https://tally.so/r/BzdKgA)

### ⚠️ Disclaimer

> This Actor is an independent tool and is not affiliated with, endorsed by, or sponsored by Agoda.com or any of its subsidiaries. All trademarks mentioned are the property of their respective owners.

# Actor input Schema

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

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

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

Free users: Limited to 10 items (preview). Paid users: Optional, max 1,000,000

## `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.

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

Proxy settings for the scraper. Use Apify proxies or your own.

## 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("💾 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 '{
  "searchQuery": "Bangkok",
  "maxItems": 10
}' |
apify call parseforge/agoda-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Agoda Hotel Scraper",
        "description": "Scrape hotel listings from Agoda.com including prices, ratings, reviews, location, and amenities. Search by city with date and guest filters. Browser-based extraction captures full hotel data. Export structured accommodation data.",
        "version": "1.0",
        "x-build-id": "svfo0skEUapKZw1ta"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/parseforge~agoda-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-parseforge-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/parseforge~agoda-scraper/runs": {
            "post": {
                "operationId": "runs-sync-parseforge-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/parseforge~agoda-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-parseforge-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": {
                    "searchQuery": {
                        "title": "Search Query",
                        "type": "string",
                        "description": "City, region, or destination to search for hotels (e.g. Bangkok, Bali, Tokyo)."
                    },
                    "maxItems": {
                        "title": "Max Items",
                        "minimum": 1,
                        "maximum": 1000000,
                        "type": "integer",
                        "description": "Free users: Limited to 10 items (preview). Paid users: Optional, max 1,000,000"
                    },
                    "checkIn": {
                        "title": "Check-In Date",
                        "type": "string",
                        "description": "Check-in date in YYYY-MM-DD format. Defaults to tomorrow if not set."
                    },
                    "checkOut": {
                        "title": "Check-Out Date",
                        "type": "string",
                        "description": "Check-out date in YYYY-MM-DD format. Defaults to the day after check-in if not set."
                    },
                    "adults": {
                        "title": "Adults",
                        "minimum": 1,
                        "maximum": 30,
                        "type": "integer",
                        "description": "Number of adult guests.",
                        "default": 2
                    },
                    "rooms": {
                        "title": "Rooms",
                        "minimum": 1,
                        "maximum": 30,
                        "type": "integer",
                        "description": "Number of rooms.",
                        "default": 1
                    },
                    "sortBy": {
                        "title": "Sort By",
                        "enum": [
                            "Ranking",
                            "Price",
                            "AllGuestsReviewScore",
                            "StarRating"
                        ],
                        "type": "string",
                        "description": "How to sort the search results.",
                        "default": "Ranking"
                    },
                    "proxyConfiguration": {
                        "title": "Proxy Configuration",
                        "type": "object",
                        "description": "Proxy settings for the scraper. Use Apify proxies or your own."
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
