# Tripadvisor Reviews Scraper (`shahidirfan/tripadvisor-reviews-scraper`) Actor

Extract Tripadvisor reviews, ratings & guest feedback at scale. Perfect for market research, competitor benchmarking, reputation monitoring & travel industry intelligence. Scrape thousands of reviews instantly.

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

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

## TripAdvisor Reviews Scraper

Extract TripAdvisor hotel user reviews into a clean dataset for research, analytics, and travel intelligence workflows. This actor is API-based with paginated review retrieval, null value cleanup, and duplicate filtering.

### Features

- **TripAdvisor review extraction** — Collect review records from a hotel page URL.
- **Duplicate-safe output** — Automatically removes duplicate review items.
- **Null-free dataset** — Skips empty or null fields from every output item.
- **Pagination support** — Retrieves reviews page-by-page using API `offset` and `limit`.

---

### Use Cases

#### Reputation Monitoring
Track rating changes and review trends for a hotel over time. Build recurring snapshots to compare service perception month by month.

#### Competitive Benchmarking
Compare ranking, review volume, and guest sentiment between competing hotels in the same city.

#### Travel Market Research
Create structured datasets of guest feedback to identify frequent complaints, high-performing amenities, and seasonal patterns.

#### BI and Dashboards
Export review data to analytics tools and visualize rating distribution, helpful-vote trends, and review cadence.

---

### Input Parameters

| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| `startUrl` | String | Yes | Sheraton Istanbul sample URL | TripAdvisor hotel review page URL. |
| `results_wanted` | Integer | No | `20` | Maximum number of reviews to collect. |
| `max_pages` | Integer | No | `5` | Safety cap for pagination operations. |
| `proxyConfiguration` | Object | No | Residential proxy preset | Proxy settings for reliability and anti-blocking resilience. |

Environment variable required:

- `TRIPADVISOR_API_KEY` — TripAdvisor Content API key used by the actor.

---

### Output Data

Each dataset item contains only non-empty fields. The actor outputs review records.

| Field | Type | Description |
|---|---|---|
| `item_type` | String | `review`. |
| `review_id` | String | Unique review identifier. |
| `location_id` | String | TripAdvisor location identifier. |
| `location_name` | String | Hotel name. |
| `rating` | Number | Review rating or overall location rating. |
| `title` | String | Review headline. |
| `review_text` | String | Full review content. |
| `published_date` | String | Review publication date. |
| `stay_date` | String | Stay/trip date when available. |
| `trip_type` | String | Trip category (for example family, business). |
| `helpful_votes` | Number | Helpful vote count. |
| `user_name` | String | Reviewer display name. |
| `user_location` | String | Reviewer location. |
| `source_url` | String | Source TripAdvisor URL. |

---

### Usage Examples

#### Basic Run

```json
{
	"startUrl": "https://www.tripadvisor.com/Hotel_Review-g293974-d14930175-Reviews-Sheraton_Istanbul_City_Center-Istanbul.html",
	"results_wanted": 20
}
````

#### Extended Pagination

```json
{
	"startUrl": "https://www.tripadvisor.com/Hotel_Review-g293974-d14930175-Reviews-Sheraton_Istanbul_City_Center-Istanbul.html",
	"results_wanted": 100,
	"max_pages": 20,
	"proxyConfiguration": {
		"useApifyProxy": true,
		"apifyProxyGroups": ["RESIDENTIAL"]
	}
}
```

***

### Sample Output

```json
{
	"item_type": "review",
	"review_id": "123456789",
	"location_id": "14930175",
	"location_name": "Sheraton Istanbul City Center",
	"rating": 5,
	"title": "Excellent stay in Istanbul",
	"review_text": "Great service, clean rooms, and very convenient location.",
	"published_date": "2026-03-12",
	"stay_date": "2026-03",
	"trip_type": "Couples",
	"helpful_votes": 3,
	"user_name": "TravelExplorer",
	"user_location": "London, United Kingdom",
	"source_url": "https://www.tripadvisor.com/Hotel_Review-g293974-d14930175-Reviews-Sheraton_Istanbul_City_Center-Istanbul.html"
}
```

***

### Tips For Best Results

#### Start With 20 Results

Use `results_wanted: 20` for quick validation runs and faster QA-friendly execution.

#### Prefer Residential Proxies

Residential proxy routing improves reliability for protected pages and reduces blocked runs.

#### Use Stable Hotel URLs

Use canonical TripAdvisor hotel URLs containing the `-d<locationId>-` segment to ensure reliable ID extraction.

***

### Integrations

- **Google Sheets** — Share hotel review datasets with non-technical teams.
- **Airtable** — Build searchable review repositories.
- **Make** — Automate review ingestion pipelines.
- **Zapier** — Trigger notifications on fresh run data.
- **Webhooks** — Push new records into custom backend services.

#### Export Formats

- **JSON** — Best for APIs and downstream processing.
- **CSV** — Best for spreadsheet analysis.
- **Excel** — Best for reports and stakeholder sharing.
- **XML** — Best for legacy integrations.

***

### Frequently Asked Questions

#### Why does the run fail with missing API key?

This actor uses the TripAdvisor reviews API directly and requires `TRIPADVISOR_API_KEY` in the runtime environment.

#### Does this actor remove duplicate reviews?

Yes. Duplicate entries are filtered before writing to the dataset.

#### Are null values included in output?

No. Empty and null fields are removed automatically from every saved item.

#### Can I scrape multiple hotels?

This actor is optimized for one hotel per run. Schedule multiple runs for multiple hotels.

#### How do I improve blocked runs?

Enable proxy routing with residential IPs and keep result limits reasonable.

***

### Support

For issues or feature requests, use the Apify Console issue/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 legitimate data collection and analytics workflows. You are responsible for compliance with applicable laws, platform terms, and internal usage policies.

# Actor input Schema

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

Hotel review page URL. If empty, the actor falls back to INPUT.json value. The scraper automatically extracts locationId from the URL.

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

Maximum number of reviews to collect.

## `max_pages` (type: `integer`):

Safety cap for pagination operations.

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

Residential proxy is recommended for stable extraction.

## Actor input object example

```json
{
  "startUrl": "https://www.tripadvisor.com/Hotel_Review-g293974-d14930175-Reviews-Sheraton_Istanbul_City_Center-Istanbul.html",
  "results_wanted": 20,
  "max_pages": 5,
  "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.tripadvisor.com/Hotel_Review-g293974-d14930175-Reviews-Sheraton_Istanbul_City_Center-Istanbul.html",
    "results_wanted": 20,
    "max_pages": 5
};

// Run the Actor and wait for it to finish
const run = await client.actor("shahidirfan/tripadvisor-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.tripadvisor.com/Hotel_Review-g293974-d14930175-Reviews-Sheraton_Istanbul_City_Center-Istanbul.html",
    "results_wanted": 20,
    "max_pages": 5,
}

# Run the Actor and wait for it to finish
run = client.actor("shahidirfan/tripadvisor-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.tripadvisor.com/Hotel_Review-g293974-d14930175-Reviews-Sheraton_Istanbul_City_Center-Istanbul.html",
  "results_wanted": 20,
  "max_pages": 5
}' |
apify call shahidirfan/tripadvisor-reviews-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Tripadvisor Reviews Scraper",
        "description": "Extract Tripadvisor reviews, ratings & guest feedback at scale. Perfect for market research, competitor benchmarking, reputation monitoring & travel industry intelligence. Scrape thousands of reviews instantly.",
        "version": "1.0",
        "x-build-id": "fplYA8kCb3d5gga4y"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/shahidirfan~tripadvisor-reviews-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-shahidirfan-tripadvisor-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~tripadvisor-reviews-scraper/runs": {
            "post": {
                "operationId": "runs-sync-shahidirfan-tripadvisor-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~tripadvisor-reviews-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-shahidirfan-tripadvisor-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": "TripAdvisor hotel URL (optional)",
                        "type": "string",
                        "description": "Hotel review page URL. If empty, the actor falls back to INPUT.json value. The scraper automatically extracts locationId from the URL."
                    },
                    "results_wanted": {
                        "title": "Maximum number of reviews",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Maximum number of reviews to collect.",
                        "default": 20
                    },
                    "max_pages": {
                        "title": "Maximum pages",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Safety cap for pagination operations.",
                        "default": 5
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Residential proxy is recommended for stable extraction.",
                        "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
