# Agoda Scraper — Hotel Prices, Ratings & Availability (`yugenox/agoda-scraper`) Actor

Scrape Agoda hotels, apartments and homes in any city for your dates: name, type, stars, review score and count, nightly and total price in any currency, discount, free cancellation, rooms left, address, coordinates and photos. Filter by stars, score, price and type. No login.

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

## Pricing

from $1.50 / 1,000 properties

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

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

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

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

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Agoda Scraper: hotel prices, ratings and availability

Scrape **Agoda** hotels, apartments, resorts, hostels and homes in any city, **for your dates and guests**. Every property comes with its **name, type, star rating, guest review score and review count, the price per night and for the whole stay in your currency (with and without taxes), the discount, free cancellation and payment terms, rooms left, address, area, coordinates, distance to the city centre and photos**. Filter by stars, guest score, price and property type, and sort the way Agoda does. No login, no cookies, no Agoda account.

### What you get

| | |
|---|---|
| **Property** | Agoda ID, name, type (Hotel, Apartment/Flat, Resort, Hostel, Serviced apartment, Villa…), star rating, property URL, photos |
| **Reviews** | Guest review score out of 10 and the number of reviews |
| **Price for your stay** | Cheapest room per night and for the whole stay, before and after taxes and fees, in any of 30+ currencies |
| **Deal** | Crossed-out price and discount %, rooms left, insider deal, sponsored flag |
| **Booking terms** | Free cancellation (and until when), pay later, pay at the property, no credit card needed, included extras (breakfast, Wi-Fi, parking…) |
| **Location** | Street address, area, city, country, postal code, latitude/longitude, distance to the city centre |
| **Stay details** | Check-in and check-out times, airport transfer, luxury and sustainable-travel badges, Agoda award year |
| **Availability** | Sold-out properties are flagged (`isAvailable: false`), or left out with **Only available properties** |

### How to use it

1. Enter one or more **cities**, e.g. `London`, `Bangkok`, `Paris, France` (add the country when a name exists in several places). Agoda city IDs (`233`) and Agoda search or city page URLs work too.
2. Pick your **check-in date** and **nights** (or a check-out date), and the number of **adults, children and rooms**.
3. Choose a **currency**, a **sort order** and any **filters**, set **Max properties**, and run.

**Max properties** is the total for the run, shared fairly between your cities.

#### Input examples

Hotels in London for a 2-night stay, cheapest first, in GBP:

```json
{
  "locations": ["London"],
  "checkIn": "2026-11-20",
  "nights": 2,
  "adults": 2,
  "currency": "GBP",
  "sortBy": "price-asc",
  "maxItems": 200
}
```

4- and 5-star properties in Paris and Rome with a guest score of 8 or more, available only, in EUR:

```json
{
  "locations": ["Paris, France", "Rome"],
  "checkIn": "2026-12-18",
  "checkOut": "2026-12-21",
  "starRatings": ["4", "5"],
  "minReviewScore": 8,
  "onlyAvailable": true,
  "currency": "EUR",
  "maxItems": 300
}
```

Family stay in Bangkok, hotels and serviced apartments under 4,000 THB a night:

```json
{
  "locations": ["Bangkok"],
  "checkIn": "30 days",
  "nights": 5,
  "adults": 2,
  "children": 2,
  "childAges": ["6", "9"],
  "propertyTypes": ["hotel", "serviced-apartment"],
  "maxPrice": 4000,
  "currency": "THB",
  "maxItems": 100
}
```

### Output example

```json
{
  "propertyId": 49940821,
  "name": "APPART’CITY COLLECTION PARIS ROISSY AIRPORT",
  "url": "https://www.agoda.com/appart-city-collection-paris-roissy-airport/hotel/paris-fr.html",
  "propertyType": "Serviced apartment",
  "starRating": 4,
  "reviewScore": 8.7,
  "reviewCount": 2318,
  "isAvailable": true,
  "currency": "EUR",
  "pricePerNight": 77.86,
  "pricePerNightWithTaxes": 101.91,
  "originalPricePerNight": 236.1,
  "discountPercent": 67,
  "totalPrice": 155.72,
  "totalPriceWithTaxes": 203.81,
  "roomsLeft": 1,
  "freeCancellation": true,
  "cancellationPolicy": "FreeCancellation",
  "freeCancellationUntil": "2026-11-15",
  "payLater": true,
  "benefits": ["Express check-in", "Free WiFi", "Free fitness center access"],
  "address": "8 Rue de l Esperance, 95700 Roissy-en-France",
  "area": "Paris Charles de Gaulle Airport",
  "city": "Paris",
  "country": "France",
  "countryCode": "FR",
  "postalCode": "95700",
  "latitude": 48.999287,
  "longitude": 2.510068,
  "distanceFromCityCenterKm": 14.28,
  "checkInTime": "03:00 PM",
  "checkOutTime": "11:00 AM",
  "imageUrl": "https://pix8.agoda.net/hotelImages/49940821/0/bcc63db03bfd50bb7c0d095f257b8703.jpeg?va=1&ce=3",
  "isHomeListing": false,
  "isSponsored": false,
  "checkIn": "2026-11-17",
  "checkOut": "2026-11-19",
  "nights": 2,
  "adults": 2,
  "searchInput": "Paris, France",
  "searchCity": "Paris",
  "position": 31,
  "scrapedAt": "2026-10-02T00:26:48.777Z"
}
```

Every row has the same columns (the example above is shortened); a value Agoda doesn't show is `null`.

### Use cases

- **Hotel price monitoring**: track nightly prices and discounts for a city and date range with a scheduled run.
- **Revenue management**: benchmark your hotel against competitors' prices, review scores and cancellation terms.
- **Travel market research**: compare supply, star mix, property types and price levels across cities.
- **Travel content and apps**: build "best hotels in…" lists, maps and price comparisons from fresh data.
- **Lead lists**: hotels and serviced apartments by city, with address and coordinates, for travel-tech, hospitality and B2B vendors.

### FAQ

**Do I need an Agoda account, cookies or a login?** No. The scraper asks Agoda's own search the same way any visitor's browser does. It never logs in and needs nothing from you except a city.

**Which dates are the prices for?** The check-in date, nights, adults, children and rooms you set. With no date, check-in is 14 days from today for 1 night. Prices are Agoda's cheapest available room for that stay; `totalPrice` covers all nights and rooms.

**Can I get prices in my currency?** Yes. Pick one of 30+ currencies under **Currency**; every row says which currency its prices are in. Agoda can show different deals to visitors from different countries; **Market country** (default US) sets which market the prices are for.

**Why does a property have no price?** It is sold out for your dates (`isAvailable: false`). Turn on **Only available properties** to leave sold-out properties out; they are never charged.

**How many properties can I get?** Thousands per city: Agoda lists over 7,000 properties for a typical London search. Set **Max properties** to 0 to get everything your searches find (up to 50,000 per run).

**How fast is it?** Each result page holds about 45 properties and loads in about 2 seconds, so 1,000 properties take about a minute.

**Are the filters exact?** Yes. Filters are sent to Agoda and checked again on every property, so a property that doesn't match your stars, score, price or type is never saved or charged.

**What about private homes?** Agoda Homes (apartments, homestays, houses let by private hosts) are included with their property facts, prices and ratings. Because their street address is someone's home, the scraper leaves the street address out and rounds their coordinates to about 100 metres. It never collects host names or profiles.

**Does it scrape guest reviews?** No. It returns each property's review score and review count, never individual reviews, reviewer names or nationalities.

**Which proxy should I use?** Keep the default (Apify Proxy, datacenter). It comes with every Apify plan, including the free one. If Agoda refuses datacenter IPs for a while, the run switches to residential proxies when your account has them, and carries on without them when it doesn't.

**What does a run cost?** You pay per property saved, per city searched, and a small fee per run. See the Pricing tab. Places Agoda doesn't know and properties left out by your filters are never charged.

**Is it legal to scrape Agoda?** This Actor only collects publicly available data: property listings that anyone can see on Agoda without an account, such as a property's name, type, rating, prices, booking terms and location. Collecting publicly available data is generally legal, but you're responsible for how you use it. Hotels and serviced apartments are businesses; for private homes the scraper withholds the street address and rounds the coordinates, and it doesn't collect guest reviews, host profiles or anything about individual travellers. You must follow privacy laws such as GDPR, PIPEDA and CCPA, as well as Agoda's terms. If you're unsure, check with a lawyer. More on this: [Is web scraping legal?](https://blog.apify.com/is-web-scraping-legal/)

**Does it access any private data?** No. Everything comes from searches Agoda answers for any visitor without logging in. It never uses a login, never touches bookings or accounts, and follows the site's robots.txt.

This Actor is not affiliated with, endorsed by or sponsored by Agoda. Agoda is a trademark of its owner, used here only to describe the data the Actor works with.

# Actor input Schema

## `locations` (type: `array`):

Cities to search, e.g. "London", "Bangkok", "Paris, France" (add the country when a name exists in several places). You can also paste Agoda city IDs (233 = London) or Agoda search / city page URLs.

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

Maximum number of properties for the whole run, shared fairly between your cities (a city with fewer leaves its share to the others). 0 = everything Agoda lists (up to 50,000).

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

Check-in date (YYYY-MM-DD), or relative like "30 days". Empty = 14 days from today. Prices and availability are for these dates.

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

Length of stay (1–30 nights).

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

The check-out date (YYYY-MM-DD) or relative like "33 days". When set, it decides the number of nights instead of Nights.

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

Number of adults.

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

Number of children.

## `childAges` (type: `array`):

Age of each child (0–17), e.g. 5 and 9. Missing ages count as 8.

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

Number of rooms.

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

Currency for all prices.

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

Order of the results (as on Agoda).

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

Language of property names and areas.

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

Only properties with these star ratings (4 includes 4.5). Empty = all.

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

Only properties with a guest review score of at least this (out of 10), e.g. 8. Empty = all.

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

In the chosen currency, before taxes.

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

In the chosen currency, before taxes.

## `propertyTypes` (type: `array`):

Only these types. Empty = all.

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

Leave out properties that are sold out for your dates (they are never charged). Off = sold-out properties are included with isAvailable false and no price.

## `marketCountry` (type: `string`):

Two-letter country code of the market Agoda prices for (prices and deals can differ by the visitor’s country). Default US.

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

Apify Proxy (datacenter) is the default and comes with every Apify plan. If Agoda refuses datacenter IPs for a while, the run switches to residential proxies when your account has them.

## Actor input object example

```json
{
  "locations": [
    "London"
  ],
  "maxItems": 45,
  "nights": 1,
  "adults": 2,
  "children": 0,
  "rooms": 1,
  "currency": "USD",
  "sortBy": "recommended",
  "language": "en-us",
  "onlyAvailable": false,
  "marketCountry": "US",
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

All scraped properties.

## `run` (type: `string`):

Status and statistics for this run.

## `report` (type: `string`):

RUN_REPORT: how the run ended, the stay searched, counts, requests and proxy use.

# 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 = {
    "locations": [
        "London"
    ],
    "maxItems": 45,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("yugenox/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 = {
    "locations": ["London"],
    "maxItems": 45,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("yugenox/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 '{
  "locations": [
    "London"
  ],
  "maxItems": 45,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call yugenox/agoda-scraper --silent --output-dataset

```

## MCP server setup

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