# Expedia Activities Reviews Scraper (`knagymate/expedia-activities-reviews-scraper`) Actor

Scrape Expedia Things To Do reviews, also known as Expedia Activities reviews. Extract ratings, reviewer details, dates, locations, platforms, and full review text for tours, attractions, experiences, and travel analytics.

- **URL**: https://apify.com/knagymate/expedia-activities-reviews-scraper.md
- **Developed by:** [knagymate](https://apify.com/knagymate) (community)
- **Categories:** Travel, Developer tools, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: 5.00 out of 5 stars

## 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 web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

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

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js/docs.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python/docs.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/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

## Expedia Activities Reviews Scraper

Scrape structured **Expedia Things To Do reviews** from Expedia **Activities** pages with an Apify Actor built for travel data extraction, tour review monitoring, attraction analytics, and customer sentiment research.

Use this Actor as an **Expedia Activities Reviews Scraper** or **Expedia Things To Do Reviews Scraper** to collect review ratings, review text, reviewer details, activity dates, and review dates from Expedia activity detail pages.

It is designed for tours, attractions, sightseeing buses, guided walks, boat tours, day trips, museum tickets, experiences, and other Expedia Things To Do listings.

---

### Why scrape Expedia Activities reviews?

Expedia is one of the major travel marketplaces for bookable activities and experiences. Reviews on Expedia Things To Do pages can help you understand how travelers evaluate tours, local attractions, suppliers, guides, routes, timing, cancellation handling, and the overall activity experience.

This scraper turns Expedia activity reviews into clean, exportable JSON records that are ready for:

- **Travel sentiment analysis** — analyze traveler feedback from Expedia Things To Do reviews.
- **Tour operator benchmarking** — compare ratings and written reviews across competing activities.
- **Attraction review monitoring** — track recent reviews for sightseeing tours, excursions, and local experiences.
- **Destination analytics** — understand what visitors praise or complain about in a city or region.
- **OTA and marketplace research** — collect review data from Expedia activity listings at scale.
- **AI and NLP workflows** — feed review text into LLMs, classifiers, dashboards, and data pipelines.

---

### What this Expedia Things To Do Reviews Scraper extracts

For each Expedia activity review, the Actor can return:

- Expedia activity URL
- Expedia activity ID
- review score
- maximum score
- reviewer name
- reviewer platform
- review date
- reviewer location
- full review text
- activity date

The output is stored in the default Apify dataset and can be exported as JSON, CSV, Excel, XML, RSS, or HTML.

---

### Supported Expedia URLs

Use Expedia activity detail pages, also known as Expedia Things To Do pages.

Example:

```text
https://euro.expedia.net/things-to-do/city-sightseeing-budapest-hop-on-hop-off-bus-guided-walking-tour.a277157.activity-details
````

The Actor resolves the Expedia activity ID from the page and then extracts available reviews for that activity.

> This Actor is for Expedia Activities / Things To Do reviews. It is not a hotel or lodging reviews scraper.

***

### Input

| Field | Type | Required | Default | Description |
|---|---|---:|---:|---|
| `startUrls` | `array` | Yes | - | Expedia activity detail page URLs to scrape reviews from. |
| `maxReviewsPerActivity` | `integer` | No | `100` | Maximum number of review records to return per activity. |
| `cutoffDate` | `string` | No | - | Only scrape reviews from this month onwards. Accepts `YYYY-MM` or `YYYY-MM-DD`; if a full date is provided, the day is ignored and the whole month is used as the cutoff. |
| `sortBy` | `string` | No | `REVIEWS_SORT_NEWEST_TO_OLDEST` | Review sorting mode. Supported values: `REVIEWS_SORT_NEWEST_TO_OLDEST`, `REVIEWS_SORT_HIGHEST_TO_LOWEST_RATED`, `REVIEWS_SORT_LOWEST_TO_HIGHEST_RATED`. |

If `cutoffDate` is set, the Actor uses newest-first review sorting so it can stop once older reviews are reached.

***

### Example input

```json
{
  "startUrls": [
    {
      "url": "https://euro.expedia.net/things-to-do/city-sightseeing-budapest-hop-on-hop-off-bus-guided-walking-tour.a277157.activity-details?rid=179994&location=Budapest+%28and+vicinity%29%2C+Hungary"
    }
  ],
  "maxReviewsPerActivity": 50,
  "sortBy": "REVIEWS_SORT_HIGHEST_TO_LOWEST_RATED",
  "cutoffDate": "2025-01-01"
}
```

***

### Output

Each dataset item represents one Expedia activity review.

```json
{
  "activityUrl": "https://euro.expedia.net/things-to-do/city-sightseeing-budapest-hop-on-hop-off-bus-guided-walking-tour.a277157.activity-details",
  "activityId": "277157",
  "score": 8.0,
  "maxScore": 10,
  "reviewerName": "Kadesha T",
  "reviewerPlatform": "Expedia",
  "reviewDate": "2025-06-16 00:00:00",
  "reviewerLocation": "United States",
  "reviewText": "I had booked this tour and had to cancel because my flight was cancelled and I wouldn’t have made it. I didn’t like that I was not able to rebook this for another day if I had proof of the cancellation. I did book it again and I’m glad I did because this was a really nice tour. The boat tour was just okay but I enjoyed the red and green line bus tours.",
  "activityDate": "2025-06-15 00:00:00"
}
```

***

### Output fields

| Field | Description |
|---|---|
| `activityUrl` | Original Expedia activity URL from the input. |
| `activityId` | Expedia activity identifier extracted from the page. |
| `score` | Review score given by the traveler. |
| `maxScore` | Maximum possible score, usually `10`. |
| `reviewerName` | Name displayed for the reviewer. |
| `reviewerPlatform` | Platform shown by Expedia for the review. |
| `reviewDate` | Date when the review was submitted. |
| `reviewerLocation` | Reviewer location when available. |
| `reviewText` | Full review text. |
| `activityDate` | Date when the reviewed activity took place. |

***

### How to use this Actor on Apify

1. Open the Actor on Apify.
2. Add one or more Expedia Things To Do activity URLs to `startUrls`.
3. Set `maxReviewsPerActivity` if you want to limit the number of reviews per activity.
4. Optionally set `cutoffDate` for incremental review scraping.
5. Choose a sorting mode: recent, positive, or critical.
6. Run the Actor and export the dataset in your preferred format.

***

### Common use cases

- Scrape Expedia activity reviews for a destination.
- Monitor recent Things To Do reviews for your own tours.
- Compare competing attractions by rating and review text.
- Build a review analytics database for travel experiences.
- Analyze cancellation, guide quality, route, timing, and customer service complaints.
- Export Expedia review data for dashboards, BI tools, spreadsheets, or AI processing.

***

### Notes and limitations

- Only publicly available Expedia activity review data is extracted.
- The number of returned reviews depends on what Expedia exposes for the activity.
- `cutoffDate` works at month level; the day part is intentionally ignored.
- This Actor targets Expedia Activities / Things To Do pages, not Expedia hotel pages.

***

If this Expedia Activities Reviews Scraper helps your travel data workflow, a rating on Apify is appreciated.

# Actor input Schema

## `startUrls` (type: `array`):

Expedia activity detail page URLs to scrape reviews from.

## `maxReviewsPerActivity` (type: `integer`):

Maximum number of reviews to scrape per activity.

## `cutoffDate` (type: `string`):

Only scrape reviews from this month onwards. Accepts either YYYY-MM or YYYY-MM-DD format — if a full date is provided, the day is ignored and the entire month is used as the cutoff. Leave empty to scrape all available reviews.

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

Choose how reviews should be sorted. If a cutoff date is set, newest reviews are always used.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://euro.expedia.net/things-to-do/city-sightseeing-budapest-hop-on-hop-off-bus-guided-walking-tour.a277157.activity-details"
    }
  ],
  "maxReviewsPerActivity": 100,
  "cutoffDate": "2025-01",
  "sortBy": "REVIEWS_SORT_NEWEST_TO_OLDEST"
}
```

# Actor output Schema

## `results` (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 = {
    "startUrls": [
        {
            "url": "https://euro.expedia.net/things-to-do/city-sightseeing-budapest-hop-on-hop-off-bus-guided-walking-tour.a277157.activity-details"
        }
    ],
    "maxReviewsPerActivity": 100,
    "sortBy": "REVIEWS_SORT_NEWEST_TO_OLDEST"
};

// Run the Actor and wait for it to finish
const run = await client.actor("knagymate/expedia-activities-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 = {
    "startUrls": [{ "url": "https://euro.expedia.net/things-to-do/city-sightseeing-budapest-hop-on-hop-off-bus-guided-walking-tour.a277157.activity-details" }],
    "maxReviewsPerActivity": 100,
    "sortBy": "REVIEWS_SORT_NEWEST_TO_OLDEST",
}

# Run the Actor and wait for it to finish
run = client.actor("knagymate/expedia-activities-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 '{
  "startUrls": [
    {
      "url": "https://euro.expedia.net/things-to-do/city-sightseeing-budapest-hop-on-hop-off-bus-guided-walking-tour.a277157.activity-details"
    }
  ],
  "maxReviewsPerActivity": 100,
  "sortBy": "REVIEWS_SORT_NEWEST_TO_OLDEST"
}' |
apify call knagymate/expedia-activities-reviews-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Expedia Activities Reviews Scraper",
        "description": "Scrape Expedia Things To Do reviews, also known as Expedia Activities reviews. Extract ratings, reviewer details, dates, locations, platforms, and full review text for tours, attractions, experiences, and travel analytics.",
        "version": "0.0",
        "x-build-id": "1Se91UD2oVQfXmKl8"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/knagymate~expedia-activities-reviews-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-knagymate-expedia-activities-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/knagymate~expedia-activities-reviews-scraper/runs": {
            "post": {
                "operationId": "runs-sync-knagymate-expedia-activities-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/knagymate~expedia-activities-reviews-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-knagymate-expedia-activities-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",
                "required": [
                    "startUrls"
                ],
                "properties": {
                    "startUrls": {
                        "title": "Activity URLs",
                        "type": "array",
                        "description": "Expedia activity detail page URLs to scrape reviews from.",
                        "items": {
                            "type": "object",
                            "required": [
                                "url"
                            ],
                            "properties": {
                                "url": {
                                    "type": "string",
                                    "title": "URL of a web page",
                                    "format": "uri"
                                }
                            }
                        }
                    },
                    "maxReviewsPerActivity": {
                        "title": "Maximum number of reviews per activity",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Maximum number of reviews to scrape per activity.",
                        "default": 100
                    },
                    "cutoffDate": {
                        "title": "Cutoff date",
                        "pattern": "^\\d{4}-\\d{2}(-\\d{2})?$",
                        "type": "string",
                        "description": "Only scrape reviews from this month onwards. Accepts either YYYY-MM or YYYY-MM-DD format — if a full date is provided, the day is ignored and the entire month is used as the cutoff. Leave empty to scrape all available reviews."
                    },
                    "sortBy": {
                        "title": "Sort reviews by",
                        "enum": [
                            "REVIEWS_SORT_NEWEST_TO_OLDEST",
                            "REVIEWS_SORT_HIGHEST_TO_LOWEST_RATED",
                            "REVIEWS_SORT_LOWEST_TO_HIGHEST_RATED"
                        ],
                        "type": "string",
                        "description": "Choose how reviews should be sorted. If a cutoff date is set, newest reviews are always used.",
                        "default": "REVIEWS_SORT_NEWEST_TO_OLDEST"
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
