# Agoda Activities Search Scraper (`stealth_mode/agoda-activities-search-scraper`) Actor

Scrape Agoda's Activities search pages to collect structured data on tours, experiences, and attractions. Captures pricing, reviews, images, cancellation policies, and more — perfect for travel aggregators and market researchers.

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

## Pricing

from $2.00 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
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

## Agoda Activities Scraper: Extract Tour & Experience Listings at Scale

---

### What Is Agoda Activities?

Agoda.com is one of Asia's largest travel platforms, offering not only hotel bookings but also a growing catalog of tours, day trips, and local experiences. Its Activities section lists thousands of options across cities worldwide, with rich metadata including pricing, reviews, and cancellation terms. Manually collecting this data is impractical at scale — the **Agoda Activities Search Scraper** automates extraction from search result pages, delivering clean, structured records ready for analysis or integration.

---

### Overview

This scraper targets Agoda's Activities search result pages, collecting up to hundreds of listings per URL across multiple pages. It is suited for:

- **Travel aggregators** building curated activity feeds
- **Market researchers** analyzing pricing and availability trends
- **Tour operators** benchmarking competitors
- **Data engineers** feeding travel datasets into recommendation systems

---

### Input Format

```json
{
  "urls": [
    "https://www.agoda.com/vi-vn/activities/search?cityId=15470&cid=1922896&tag=7adbeb35-4108-414c-9559-32893b4cdfe5&page=2"
  ],
  "ignore_url_failures": true,
  "max_items_per_url": 200,
  "page": 3,
  "sort_by": "Default"
}
````

| Field | Type | Description |
|---|---|---|
| `urls` | `array` | One or more Agoda Activities search page URLs. Must be search result pages (e.g., `/activities/search?cityId=...`), not individual activity detail pages. Add URLs one by one or via bulk edit. |
| `max_items_per_url` | `integer` | Maximum number of activity records to collect per URL. Default: `20`. Set higher (e.g., `200`) for broader collection. |
| `ignore_url_failures` | `boolean` | If `true`, the scraper continues when a URL fails instead of stopping the run. Recommended for bulk runs. Default: `true`. |
| `page` | `integer` | Starting page number within the search results. Useful for paginated collection across large city catalogs. |
| `sort_by` | `string` | Sort order for results. Common value: `"Default"`. May also support relevance or price-based sorting depending on Agoda's available options. |

> **Tip:** To collect activities across multiple pages, create separate URL entries with different `?page=N` parameters, or use the `page` field to offset the starting point.

***

### Output Format

**Sample output**

```json
{
  "activity": {
    "title": "Seine River Cruise by Bateaux Parisiens – Eiffel Tower",
    "categories": [
      "Attractions"
    ],
    "description": "Cruise along the Seine River on a one-hour voyage departing from the iconic Eiffel Tower. Glide through the heart of Paris to admire the city's most celebrated waterways and historic architecture.\n\n- Pass by the medieval Notre-Dame Cathedral and the ornate Hotel de Ville\n- Sail past the Musee d'Orsay, the former railway station housing Impressionist masterpieces\n- Explore the scenic riverbanks before returning to the Eiffel Tower",
    "duration": {
      "minutes": 60,
      "minutes_until": null,
      "duration_type": "FIXED"
    },
    "location": {
      "city": {
        "id": 15470,
        "name": "Paris"
      },
      "address_line": "",
      "geo": {
        "lat": 0.0,
        "long": 0.0
      },
      "country": {
        "id": 153,
        "name": "France"
      },
      "postal_code": ""
    }
  },
  "images": [
    {
      "url": "https://pix6.agoda.net/generic/52d4e29038b54354c8fcf027fd784cd9.jpeg?ce=0",
      "description": "",
      "image_type": "SUPPLIER",
      "image_size": {
        "height": 1667,
        "width": 2500
      }
    }
  ],
  "review_summary": {
    "average_score": 0.0,
    "total_count": 0
  },
  "detail": null,
  "content_locale": "en-us",
  "badges": {
    "booking_info": [
      {
        "badge_type": "BOOKING_COUNT_ALL_TIME",
        "enrichment_data": [
          "351"
        ]
      }
    ],
    "activity_highlights": [
      {
        "badge_type": "BEST_SELLER",
        "enrichment_data": null
      },
      {
        "badge_type": "TOP_IN_CATEGORY",
        "enrichment_data": [
          "Attractions"
        ]
      }
    ],
    "deals": [
      {
        "badge_type": "DISCOUNT",
        "enrichment_data": [
          "18"
        ]
      }
    ],
    "key_attributes": [
      {
        "badge_type": "INSTANT_CONFIRMATION",
        "enrichment_data": null
      }
    ],
    "promocodes": []
  },
  "activity_id": 1262390,
  "activity_token": "AAAB2-F7Im1haWQiOm51bGwsIgsAoDEyNjIzOTAsInMOAPAmNTAwMDQsInNhYyI6Ijc4MzNhYjkxLTBmMTctNGMxNy1hOGM3LTFkOTk2MTFjOTc0MyIsIm85AABBABBvNQDwHCIsImN1ciI6IlZORCIsInByaWNlIjp7ImR0IjoiQk9PSyIsInEiOjEsInQXACBleAYA_xBjdCI6MjUxNzE1LjAsImNvIjozMDYyMjMuMH0sImFsIwAOFWXTAAIJAOB9LCJsbyI6W10sInBtYwkAr30sInN0YXJ0cHKNAHMVdIYBNG9zdAsARXBheHIMABRtCgAVYhQAFG9rASJwclAAsG9naWQiOm51bGx9",
  "pricing_summary": {
    "pricing": [
      {
        "currency": "VND",
        "display": {
          "per_book": {
            "display_type": "BOOK",
            "quantity": 1,
            "total": {
              "exclusive": {
                "charge_total": 251715.0,
                "crossed_out": 306223.0
              },
              "all_inclusive": {
                "charge_total": 251715.0,
                "crossed_out": 306223.0
              }
            },
            "loyalty_offers": [],
            "promocode_items": [],
            "badges": null
          },
          "per_pax": [
            {
              "display_type": "PERSON",
              "pax_code": null,
              "quantity": 1,
              "total": {
                "exclusive": {
                  "charge_total": 251715.0,
                  "crossed_out": 306223.0
                },
                "all_inclusive": {
                  "charge_total": 251715.0,
                  "crossed_out": 306223.0
                }
              },
              "loyalty_offers": []
            }
          ]
        }
      }
    ]
  },
  "supplier_activity_code": "7833ab91-0f17-4c17-a8c7-1d99611c9743",
  "cancellation_policy": {
    "cancellation_type": "NON_REFUNDABLE",
    "policies": [
      {
        "hours_from": 8760,
        "hours_until": 0,
        "penalty_code": "100P"
      },
      {
        "hours_from": 0,
        "hours_until": -1,
        "penalty_code": "100P"
      }
    ]
  },
  "from_url": "https://www.agoda.com/activities/search?cityId=15470&cid=1922896&tag=7adbeb35-4108-414c-9559-32893b4cdfe5&page=2"
}
```

Each activity record contains the following fields:

#### Core Identification

| Field | Meaning |
|---|---|
| `Activity ID` | Unique internal Agoda identifier for the activity |
| `Activity Token` | Encoded session/context token associated with the listing |
| `Supplier Activity Code` | Reference code used by the third-party supplier or operator |

#### Listing Content

| Field | Meaning |
|---|---|
| `Activity` | Core listing data: name, location, category, and basic attributes |
| `Images` | Array of image URLs representing the activity |
| `Detail` | Extended description including highlights, inclusions, and itinerary |
| `Content Locale` | Language/locale of the content (e.g., `vi-vn`, `en-us`) |
| `Badges` | Labels such as "Best Seller", "New", or "Instant Confirmation" |

#### Pricing & Commercial

| Field | Meaning |
|---|---|
| `Pricing Summary` | Pricing tiers, base price, currency, and any discount information |
| `Cancellation Policy` | Refund rules and deadlines (e.g., free cancellation up to 24h before) |

#### Reviews

| Field | Meaning |
|---|---|
| `Review Summary` | Aggregated review score, total review count, and sentiment highlights |

***

### How to Use

1. **Find a search URL** — Go to `agoda.com/activities/search`, filter by city or category, and copy the URL from your browser.
2. **Paste into `urls`** — Add one or more search URLs to the array.
3. **Set limits** — Adjust `max_items_per_url` based on how many listings you need. Start with `20` for testing.
4. **Configure pagination** — Use `?page=N` in URLs or the `page` field to target specific result pages.
5. **Run and export** — Download results as JSON or CSV for use in spreadsheets, databases, or pipelines.

**Common issues:**

- Ensure URLs point to *search result* pages, not individual activity pages.
- If results seem incomplete, try reducing `max_items_per_url` and splitting across multiple URL entries.
- Use `ignore_url_failures: true` for multi-URL runs to prevent a single failure from stopping the job.

***

### Use Cases & Business Value

- **Aggregator feeds:** Sync Agoda activity inventory into a custom travel marketplace
- **Pricing intelligence:** Monitor how tour prices fluctuate across cities and seasons
- **Content enrichment:** Pull descriptions, images, and badges to enrich internal databases
- **Review analytics:** Analyze guest sentiment across activity categories

***

### Conclusion

The **Agoda Activities Search Scraper** turns paginated search results into structured, analysis-ready datasets. With flexible pagination, configurable limits, and rich output spanning pricing, reviews, and cancellation terms, it covers the full data needs of travel industry professionals. Configure your first URL and start collecting.

# Actor input Schema

## `urls` (type: `array`):

Add the URLs of the Activities list urls you want to scrape. You can paste URLs one by one, or use the Bulk edit section to add a prepared list.

## `ignore_url_failures` (type: `boolean`):

If true, the scraper will continue running even if some URLs fail to be scraped.

## `max_items_per_url` (type: `integer`):

The maximum number of items to scrape per URL.

## Actor input object example

```json
{
  "urls": [
    "https://www.agoda.com/vi-vn/activities/search?cityId=15470&cid=1922896&tag=7adbeb35-4108-414c-9559-32893b4cdfe5&page=2"
  ],
  "ignore_url_failures": true,
  "max_items_per_url": 20
}
```

# 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 = {
    "urls": [
        "https://www.agoda.com/vi-vn/activities/search?cityId=15470&cid=1922896&tag=7adbeb35-4108-414c-9559-32893b4cdfe5&page=2"
    ],
    "ignore_url_failures": true,
    "max_items_per_url": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("stealth_mode/agoda-activities-search-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 = {
    "urls": ["https://www.agoda.com/vi-vn/activities/search?cityId=15470&cid=1922896&tag=7adbeb35-4108-414c-9559-32893b4cdfe5&page=2"],
    "ignore_url_failures": True,
    "max_items_per_url": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("stealth_mode/agoda-activities-search-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 '{
  "urls": [
    "https://www.agoda.com/vi-vn/activities/search?cityId=15470&cid=1922896&tag=7adbeb35-4108-414c-9559-32893b4cdfe5&page=2"
  ],
  "ignore_url_failures": true,
  "max_items_per_url": 20
}' |
apify call stealth_mode/agoda-activities-search-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Agoda Activities Search Scraper",
        "description": "Scrape Agoda's Activities search pages to collect structured data on tours, experiences, and attractions. Captures pricing, reviews, images, cancellation policies, and more — perfect for travel aggregators and market researchers.",
        "version": "0.0",
        "x-build-id": "OgQhbK1SaUZGhqmKD"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/stealth_mode~agoda-activities-search-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-stealth_mode-agoda-activities-search-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/stealth_mode~agoda-activities-search-scraper/runs": {
            "post": {
                "operationId": "runs-sync-stealth_mode-agoda-activities-search-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/stealth_mode~agoda-activities-search-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-stealth_mode-agoda-activities-search-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": {
                    "urls": {
                        "title": "URLs of the Activities list urls to scrape",
                        "type": "array",
                        "description": "Add the URLs of the Activities list urls you want to scrape. You can paste URLs one by one, or use the Bulk edit section to add a prepared list.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "ignore_url_failures": {
                        "title": "Continue running even if some URLs fail to be scraped",
                        "type": "boolean",
                        "description": "If true, the scraper will continue running even if some URLs fail to be scraped."
                    },
                    "max_items_per_url": {
                        "title": "Max items per URL",
                        "type": "integer",
                        "description": "The maximum number of items to scrape per URL."
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
