# Agoda Reviews Scraper (`shahidirfan/agoda-reviews-scraper`) Actor

Extract Agoda hotel reviews instantly. Scrape ratings, guest feedback & review metadata at scale. Perfect for market research, competitor analysis & hospitality insights. Automate your data extraction effortlessly.

- **URL**: https://apify.com/shahidirfan/agoda-reviews-scraper.md
- **Developed by:** [Shahid Irfan](https://apify.com/shahidirfan) (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

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

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

## 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 Reviews Scraper

Extract Agoda hotel review data in a structured format for research, monitoring, and analytics workflows. Collect guest comments, ratings, traveler segments, and reviewer context in one dataset. Built for fast review collection with clean output fields.

### Features

- **Review collection at scale** - Pulls large review batches from Agoda property pages.
- **Structured guest feedback** - Captures review text, title, rating, and dates.
- **Reviewer context** - Includes reviewer country, traveler group, and room type.
- **Pagination support** - Moves through multiple review pages automatically.
- **Clean dataset output** - Saves records without null-only noise fields.

### Use Cases

#### Hospitality Reputation Monitoring
Track what guests say about properties over time and identify shifts in sentiment.

#### Competitor Review Intelligence
Collect competitor review data for benchmarking ratings, strengths, and weaknesses.

#### Market Research
Build review datasets for trend analysis by traveler segment, country, and room type.

#### Product and Service Improvement
Use positive and negative comments to identify recurring service issues and wins.

### Input Parameters

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| `startUrl` | String | No | `https://www.agoda.com/koisha/hotel/all/bishkek-kg.html` | Agoda property URL to scrape. |
| `results_wanted` | Integer | No | `20` | Maximum reviews to store. |
| `proxyConfiguration` | Object | No | `{"useApifyProxy": false}` | Proxy configuration. |

---

### Output Data

Each dataset item includes:

| Field | Type | Description |
|-------|------|-------------|
| `hotel_id` | Integer | Agoda hotel identifier. |
| `hotel_name` | String | Property name. |
| `review_id` | Integer | Unique review ID. |
| `provider_id` | Integer | Review provider identifier. |
| `review_provider` | String | Review provider name. |
| `rating` | Number | Numeric review rating. |
| `formatted_rating` | String | Display-formatted rating value. |
| `rating_text` | String | Human-friendly rating label. |
| `review_title` | String | Review title/headline. |
| `review_comment` | String | Full review text. |
| `review_positives` | String | Positive notes from review (when available). |
| `review_negatives` | String | Negative notes from review (when available). |
| `review_date` | String | Original review date timestamp. |
| `formatted_review_date` | String | Display-formatted review date. |
| `reviewer_name` | String | Displayed reviewer name. |
| `reviewer_country` | String | Reviewer country. |
| `reviewer_group` | String | Traveler segment (solo, couple, etc.). |
| `reviewer_room_type` | String | Room type in the review. |
| `helpful_votes` | Integer | Helpful votes count. |
| `source_url` | String | Agoda property URL used for extraction. |
| `scraped_at` | String | Extraction timestamp in ISO format. |

---

### Usage Examples

#### Basic Run

```json
{
  "startUrl": "https://www.agoda.com/koisha/hotel/all/bishkek-kg.html",
  "results_wanted": 20
}
````

#### Higher Review Count

```json
{
  "startUrl": "https://www.agoda.com/koisha/hotel/all/bishkek-kg.html",
  "results_wanted": 50
}
```

#### With Proxy Configuration

```json
{
  "startUrl": "https://www.agoda.com/koisha/hotel/all/bishkek-kg.html",
  "results_wanted": 100,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

***

### Sample Output

```json
{
  "hotel_id": 6686120,
  "hotel_name": "Koisha",
  "review_id": 1027578343,
  "provider_id": 332,
  "review_provider": "Agoda",
  "rating": 10,
  "formatted_rating": "10.0",
  "rating_text": "Exceptional",
  "review_title": "Well located and comfortable stay",
  "review_comment": "Located within a short walking distance to Osh Bazaar...",
  "review_date": "2025-09-21T09:28:00+07:00",
  "formatted_review_date": "September 21, 2025",
  "reviewer_name": "Lin",
  "reviewer_country": "Singapore",
  "reviewer_group": "Solo traveler",
  "reviewer_room_type": "Standard Double Room",
  "helpful_votes": 0,
  "source_url": "https://www.agoda.com/koisha/hotel/all/bishkek-kg.html",
  "scraped_at": "2026-04-04T05:00:00.000Z"
}
```

***

### Tips for Best Results

#### Use Valid Property URLs

- Use full Agoda property page URLs.

#### Tune Collection Size

- Start with `results_wanted: 20` for quick checks.
- Increase `results_wanted` when you need deeper review history.

#### Improve Stability

- Use proxy configuration when running large batches.
- Keep input values realistic to avoid unnecessary retries.

***

### Integrations

Connect your dataset with:

- **Google Sheets** - Analyze review trends quickly.
- **Airtable** - Build searchable review databases.
- **Looker Studio** - Visualize rating and sentiment patterns.
- **Webhooks** - Push new review data to your own systems.
- **Make** - Automate review monitoring workflows.
- **Zapier** - Trigger actions from fresh review records.

#### Export Formats

- **JSON** - API and engineering workflows
- **CSV** - Spreadsheet and BI tools
- **Excel** - Reporting and stakeholder sharing
- **XML** - System interoperability

***

### Frequently Asked Questions

#### Can I scrape reviews from any Agoda property?

Yes, use a valid Agoda property URL and the actor will resolve the hotel ID automatically when possible.

#### How many reviews can I collect?

It depends on available review comments for the property and your `results_wanted` setting.

#### Why are some optional review fields missing?

Not every review includes all optional fields, so only available values are saved.

#### Can I target specific traveler segments?

This actor is intentionally simplified to URL + pagination controls only.

#### Does the actor support automation?

Yes, you can schedule runs and connect outputs to downstream tools using standard Apify workflows.

***

### Support

For issues or feature requests, use the Apify Console support channels for this actor.

#### Resources

- [Apify Documentation](https://docs.apify.com/)
- [Apify API Reference](https://docs.apify.com/api/v2)
- [Apify Scheduling](https://docs.apify.com/platform/schedules)

***

### Legal Notice

This actor is intended for lawful data collection and analysis workflows. You are responsible for complying with Agoda terms, local laws, and data-use regulations in your jurisdiction.

# Actor input Schema

## `startUrl` (type: `string`):

Agoda hotel/property URL to scrape reviews from.

## `results_wanted` (type: `integer`):

Maximum number of reviews to save. Actual output can be lower if the property has fewer available review comments.

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

Apify Proxy configuration for request routing.

## Actor input object example

```json
{
  "startUrl": "https://www.agoda.com/koisha/hotel/all/bishkek-kg.html",
  "results_wanted": 20,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

No 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 = {
    "startUrl": "https://www.agoda.com/koisha/hotel/all/bishkek-kg.html",
    "results_wanted": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("shahidirfan/agoda-reviews-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 = {
    "startUrl": "https://www.agoda.com/koisha/hotel/all/bishkek-kg.html",
    "results_wanted": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("shahidirfan/agoda-reviews-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 '{
  "startUrl": "https://www.agoda.com/koisha/hotel/all/bishkek-kg.html",
  "results_wanted": 20
}' |
apify call shahidirfan/agoda-reviews-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Agoda Reviews Scraper",
        "description": "Extract Agoda hotel reviews instantly. Scrape ratings, guest feedback & review metadata at scale. Perfect for market research, competitor analysis & hospitality insights. Automate your data extraction effortlessly.",
        "version": "1.0",
        "x-build-id": "Iq1AhsSNqsWdVa7lU"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/shahidirfan~agoda-reviews-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-shahidirfan-agoda-reviews-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/shahidirfan~agoda-reviews-scraper/runs": {
            "post": {
                "operationId": "runs-sync-shahidirfan-agoda-reviews-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/shahidirfan~agoda-reviews-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-shahidirfan-agoda-reviews-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": {
                    "startUrl": {
                        "title": "Agoda Property URL",
                        "type": "string",
                        "description": "Agoda hotel/property URL to scrape reviews from."
                    },
                    "results_wanted": {
                        "title": "Maximum Reviews",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Maximum number of reviews to save. Actual output can be lower if the property has fewer available review comments.",
                        "default": 20
                    },
                    "proxyConfiguration": {
                        "title": "Proxy Configuration",
                        "type": "object",
                        "description": "Apify Proxy configuration for request routing.",
                        "default": {
                            "useApifyProxy": true
                        }
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
