# Fast & Easy TripAdvisor Restaurant Leads (`duncan_cf/tripadvisor-restaurants`) Actor

Scrape restaurant leads from TripAdvisor in one click. Country, city, or region - paste the URL, set your filters, get emails and phone numbers. No setup required.

- **URL**: https://apify.com/duncan\_cf/tripadvisor-restaurants.md
- **Developed by:** [Duncan CF](https://apify.com/duncan_cf) (community)
- **Categories:** Lead generation, E-commerce
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $9.90 / 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.

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.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — 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 Restaurant Scraper

Scrape restaurant contact data from TripAdvisor — name, phone, email, address, website, rating, cuisine, and price range — for any city, region, or country worldwide.

### How to use

#### Step 1 — Get your Start URL

Go to TripAdvisor and navigate to any of the following:

- **A country page**: `https://www.tripadvisor.com/Restaurants-g187275-Germany.html`
- **A city page**: `https://www.tripadvisor.com/Restaurants-g187514-Madrid.html`
- **A region page**: `https://www.tripadvisor.com/Restaurants-g187443-Seville_Province_of_Seville_Andalucia.html`

#### Step 2 — Apply filters (optional)

On TripAdvisor, use the filter panel to select:

- Cuisine type (French, Italian, Japanese...)
- Price range (Budget, Mid-range, Fine Dining...)
- Meal type (Breakfast, Lunch, Dinner...)
- Minimum rating, online reservation, Travelers' Choice...

Once filters are applied, copy the full URL from your browser — it will look like:
`https://www.tripadvisor.com/FindRestaurants?geo=187514&cuisines=5086&priceTypes=10954%2C10955&broadened=false`

Paste this URL directly into the **Start URL** field.

#### Step 3 — Run the Actor

The Actor auto-detects the URL type and:

- **Country URL** → crawls all cities, then all restaurants in each city
- **City/Region URL** → crawls all restaurants in that location
- **FindRestaurants URL** → uses your pre-filtered results directly

### Output fields

| Field | Description |
|---|---|
| `name` | Restaurant name |
| `phone` | Phone number |
| `email` | Email address (when available) |
| `address` | Full address |
| `website` | Restaurant website |
| `rating` | TripAdvisor rating |
| `reviewCount` | Number of reviews |
| `priceRange` | Price range (€, €€, €€€...) |
| `cuisine` | Cuisine type |
| `latitude` | GPS latitude |
| `longitude` | GPS longitude |
| `url` | TripAdvisor page URL |

### Notes

- Email is only available when the restaurant has published it on TripAdvisor
- Running on a full country may take several hours and consume significant proxy credits
- Start with a single city to validate results before scaling to a full country

# Actor input Schema

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

One or more TripAdvisor URLs (country or city pages). Example: https://www.tripadvisor.com/Restaurants-g190356-Luxembourg\_City.html

## `cuisineId` (type: `string`):

TripAdvisor cuisine filter ID. Example: 5086 = French, 9908 = Italian, 10641 = Japanese. Leave empty for all cuisines.

## `establishmentType` (type: `string`):

TripAdvisor establishment type ID. Default: 10591 (Restaurants).

## `priceTypes` (type: `string`):

Comma-separated price range IDs. 10952 = $, 10953 = $$, 10954 = $$$, 10955 = $$$$. Example: 10954,10955 for $$$ and $$$$. Leave empty for all prices.

## `mealTypes` (type: `string`):

Comma-separated meal type IDs. Leave empty for all meal types.

## `dishes` (type: `string`):

Comma-separated dish IDs. Leave empty for all dishes.

## `minimumTravelerRating` (type: `string`):

Minimum rating filter. Example: 40 = 4.0+, 45 = 4.5+. Leave empty for all ratings.

## `onlineOptions` (type: `string`):

Online booking/delivery filter IDs. Leave empty for all options.

## `travelersChoice` (type: `string`):

Set to true to filter Travelers Choice award winners only. Leave empty for all.

## `date` (type: `string`):

Reservation date filter. Format: YYYY-MM-DD. Leave empty to ignore.

## `time` (type: `string`):

Reservation time filter. Format: HH:MM. Leave empty to ignore.

## `guests` (type: `string`):

Number of guests for reservation filter. Leave empty to ignore.

## `maxConcurrency` (type: `integer`):

Number of parallel requests. Default: 2. Higher values are faster but increase the risk of being blocked by TripAdvisor.

## `maxResults` (type: `integer`):

Maximum number of results to return.

## Actor input object example

```json
{
  "startUrls": [
    "https://www.tripadvisor.com/Restaurants-g190356-Luxembourg_City.html"
  ],
  "cuisineId": "",
  "establishmentType": "10591",
  "priceTypes": "",
  "mealTypes": "",
  "dishes": "",
  "minimumTravelerRating": "",
  "onlineOptions": "",
  "travelersChoice": "",
  "date": "",
  "time": "",
  "guests": "",
  "maxConcurrency": 2,
  "maxResults": 10
}
```

# Actor output Schema

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

No description

## `downloadCsv` (type: `string`):

No description

## `downloadExcel` (type: `string`):

No description

## `totalItems` (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": [
        "https://www.tripadvisor.com/Restaurants-g190356-Luxembourg_City.html"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("duncan_cf/tripadvisor-restaurants").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": ["https://www.tripadvisor.com/Restaurants-g190356-Luxembourg_City.html"] }

# Run the Actor and wait for it to finish
run = client.actor("duncan_cf/tripadvisor-restaurants").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": [
    "https://www.tripadvisor.com/Restaurants-g190356-Luxembourg_City.html"
  ]
}' |
apify call duncan_cf/tripadvisor-restaurants --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/SVaeSfFyHfOak0Oyb/builds/e9eK8oCAFVIgmlebt/openapi.json
