# Tripadvisor Restaurants Email Scraper (`leads-scraper/tripadvisor-restaurants-email-scraper`) Actor

Tripadvisor Restaurants Email Scraper SD - Tripadvisor Restaurants Email Scraper is a lead generation tool that extracts leads with public contact emails, account names and profile URLs from Tripadvisor results by keyword, location and email domain - Tripadvisor email extractor.

- **URL**: https://apify.com/leads-scraper/tripadvisor-restaurants-email-scraper.md
- **Developed by:** [Leads Scraper](https://apify.com/leads-scraper) (community)
- **Stats:** 2 total users, 1 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.49 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

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

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

### Tripadvisor Restaurants Email Scraper

The Tripadvisor Restaurants Email Scraper collects publicly indexed contact emails from the restaurant side of `tripadvisor.com` and `tripadvisor.co.uk`, the world's largest review platform for places to eat.
It builds Google queries with the `site:` operator, fetches them through the Apify GOOGLE\_SERP proxy, and extracts emails from the result blocks.
No login, no browser, no Tripadvisor API — only what Google has already published in its index.

**Start with the honest part.** Tripadvisor review URLs are opaque numeric ids, so many rows carry a venue email without a resolvable handle.
A Tripadvisor restaurant page is identified by machine ids like `g60763-d1234567`, not by a readable slug, and Google frequently prints a page title with nothing the parser can turn into a clean account.

In a live test run, roughly 10 parsed results produced 5 unique emails but only 2 rows with a usable venue identity and 2 resolvable profile URLs.
Good email density, thin account context — plan around the address rather than the name.

Tripadvisor's global reach is what makes it worth running anyway.
It covers restaurants in cities where no reservation platform operates, which is exactly where the other Actors in this family run out of coverage.

#### What one run of the Tripadvisor Restaurants Email Scraper produces

Each dataset row is one unique email plus whatever venue context Google printed around it.
You get the raw title, an account label where one exists, a cleaned snippet, the exact query used and a truncation flag.
The Tripadvisor Restaurants Email Scraper pushes rows to the Apify dataset as they are found, so you can export CSV, JSON or Excel mid-run.

#### Exporting and integrating the Tripadvisor Restaurants Email Scraper dataset

Because rows are written incrementally, an aborted or migrated run still leaves a usable dataset behind.
Export from the Apify console, pull the dataset over the API, or schedule the Tripadvisor Restaurants Email Scraper and push results straight into your CRM.

### How the Tripadvisor Restaurants Email Scraper narrows to restaurant pages

This is the mechanism that separates this Actor from its two siblings, and it is worth understanding before you run it.
Tripadvisor puts hotels, restaurants and attractions on one shared domain, so a plain `site:tripadvisor.com` search returns all three mixed together.

The Tripadvisor Restaurants Email Scraper adds an extra `inurl:Restaurant_Review` operator to **every** query it builds.
Tripadvisor routes restaurant pages under a `Restaurant_Review` URL segment, so that one operator filters the shared domain down to restaurant pages only.

A finished query therefore looks like this:

```
site:tripadvisor.com OR site:tripadvisor.co.uk restaurant inurl:Restaurant_Review "@gmail.com" catering "Lisbon"
```

Its siblings use the same trick on their own segments — the [Tripadvisor Hotels Email Scraper](https://apify.com/leads-scraper/tripadvisor-hotels-email-scraper) narrows to `Hotel_Review` pages and the [Tripadvisor Attractions Email Scraper](https://apify.com/leads-scraper/tripadvisor-attractions-email-scraper) to `Attraction_Review` pages.
Run all three if you want full Tripadvisor coverage; run only this one if you want restaurants and nothing else.

### How the Tripadvisor Restaurants Email Scraper works: SERP parsing, not an API

The Tripadvisor Restaurants Email Scraper runs the same six steps on every query it builds.

1. It reads your input: keywords, location, email domains and limits.
2. It builds Google queries with the `site:` operator plus `inurl:Restaurant_Review`.
3. It fetches result pages through the Apify GOOGLE\_SERP proxy using async `aiohttp` requests.
4. It parses each result block structurally — locating the `<h3>` and the smallest surrounding block — rather than by CSS class name.
5. It extracts emails with a domain-filtered regex and normalises obfuscated forms.
6. It deduplicates globally and pushes each lead to the dataset immediately.

There is no browser, no JavaScript rendering, no authentication and no cookies.
The Tripadvisor Restaurants Email Scraper never signs into Tripadvisor and never requests pages from Tripadvisor's own servers.
Everything it returns was already public in Google's search index.

### Tripadvisor Restaurants Email Scraper features

Everything listed below is implemented in the Tripadvisor Restaurants Email Scraper today.

| Feature | What it means in practice |
|---|---|
| Restaurant-only narrowing | `inurl:Restaurant_Review` is appended to every query built |
| Dual-domain search | `tripadvisor.com` and `tripadvisor.co.uk` are covered together |
| Query expansion | Base, quoted, `intitle:` and one variant per modifier; base queries run first |
| Global deduplication | An email found by several queries is stored exactly once |
| Email normalisation | Understands `name [at] domain [dot] com`, `name (at) domain`, `name @ domain`, `domain .com`, zero-width characters and the full-width `＠` |
| Junk filter | Rejects placeholders such as `email@`, `yourname@`, `test@`, `xxx@` and single-character locals |
| Boundary-correct matching | `@gmail.com` will not match inside `@gmail.company` or `@gmail.com.br` |
| Soft-wrap repair | Drops a hit that is only the tail of another email in the same block |
| Structural parsing | Independent of Google's obfuscated CSS class names |
| Whole-page fallback | A markup change degrades to "emails without account details" rather than "no emails" |
| Block detection | CAPTCHA, "unusual traffic" and consent pages are detected and retried, not counted as empty |
| Retries | Up to 3 attempts per page with exponential backoff and a fresh proxy session per request |
| Failed-query requeue | Blocked or failed queries are re-queued once at the end of the run |
| Concurrency | An `asyncio` worker pool with a shared stop signal on `maxEmails` |
| Resumable state | Key-value store state keyed by an input hash; saves on `PERSIST_STATE`, `MIGRATING` and `ABORTING` |
| Run summary | Logs pages fetched, blocked pages, retries and emails per page |

### Tripadvisor Restaurants Email Scraper input fields

These are the exact input fields the Tripadvisor Restaurants Email Scraper accepts, with the defaults it ships with.

| Field | Type | Default | Meaning |
|---|---|---|---|
| `keywords` | array (required) | `["restaurant","cafe"]` | Search terms describing the venues you want |
| `location` | string | `""` | Optional location phrase added to every query |
| `customDomains` | array | `["@gmail.com","@yahoo.com"]` | Only emails on these domains are kept; `@` optional |
| `maxEmails` | integer 1-10000 | `20` | Stop after this many unique emails |
| `countryCode` | string | `""` | Two-letter country for the search proxy (US, GB, ES, IT...) |
| `expandQueries` | boolean | `true` | Search each keyword x domain in several phrasings |
| `queryModifiers` | array | `["email","contact","catering","reservations","owner"]` | Extra words combined with each keyword when expansion is on |
| `maxPagesPerQuery` | integer 1-50 | `30` | Page cap per query |
| `maxConcurrency` | integer 1-20 | `5` | Parallel queries |

#### Example Tripadvisor Restaurants Email Scraper input

```json
{
  "keywords": ["restaurant", "seafood", "rooftop bar"],
  "location": "Lisbon",
  "customDomains": ["@gmail.com", "@hotmail.com", "@sapo.pt"],
  "maxEmails": 200,
  "countryCode": "PT",
  "expandQueries": true,
  "queryModifiers": ["email", "contact", "catering", "reservations", "owner"],
  "maxPagesPerQuery": 30,
  "maxConcurrency": 5
}
```

#### City-level prospecting with `location`

`location` is the most valuable field in the Tripadvisor Restaurants Email Scraper, both because restaurants are a local sale and because it is your most dependable segmentation signal on an identity-thin platform.
It appends a quoted phrase to every query, so you can build one dataset per destination instead of one global dump.

Tripadvisor's strength is coverage, so the interesting values are not only major capitals.
Tourist cities and secondary destinations — `Lisbon`, `Porto`, `Kraków`, `Valletta`, `Hoi An`, `Mérida`, `Cape Town` — often have far better Tripadvisor coverage than any booking network.

Match `countryCode` to the destination, and use local-language keywords where the market is not English-speaking.
Leave `location` empty for one exploratory run, then narrow city by city.

#### Keyword suggestions

The defaults, `restaurant` and `cafe`, are deliberately broad. Cuisine and format terms match more of the index and produce cleaner segments.

| Keyword | Why it works on Tripadvisor |
|---|---|
| `seafood` | A dominant category in coastal destinations |
| `steakhouse` | High-ticket venues with events inboxes |
| `rooftop bar` | Tourism-driven venues that publish a booking address |
| `vegetarian` | A well-tagged Tripadvisor category |
| `tapas` | Strong in Spain and Portugal |
| `fine dining` | Venues most likely to publish a managed inbox |
| `beach restaurant` | Seasonal operators reachable out of season |
| `family restaurant` | Broad coverage in secondary destinations |

### Tripadvisor Restaurants Email Scraper output fields

Every dataset item the Tripadvisor Restaurants Email Scraper writes carries all fourteen of these fields.

| Field | Meaning |
|---|---|
| `network` | Platform name |
| `keyword` | The keyword that produced the lead |
| `query` | The exact Google query used |
| `title` | Raw result title |
| `accountName` | Account label Google prints |
| `fullName` | Display name parsed from a profile-style title; empty for post captions |
| `username` | URL-safe handle when the platform exposes one; otherwise `null` |
| `profileUrl` | Canonical account URL when a handle is known; otherwise empty |
| `url` | Direct platform link when exposed, else the profile URL |
| `description` | Bio or snippet text, cleaned of labels and engagement counters |
| `email` | Lower-cased email address |
| `emailDomain` | The matched domain |
| `possiblyTruncated` | `true` when Google's snippet ellipsis touched the email |
| `foundAt` | ISO 8601 UTC timestamp |

#### Example Tripadvisor Restaurants Email Scraper output

```json
[
  {
    "network": "Tripadvisor",
    "keyword": "seafood",
    "query": "site:tripadvisor.com OR site:tripadvisor.co.uk seafood inurl:Restaurant_Review \"@gmail.com\" contact \"Lisbon\"",
    "title": "CERVEJARIA RAMIRO, Lisbon - Menu, Prices & Reviews - Tripadvisor",
    "accountName": "Tripadvisor",
    "fullName": "CERVEJARIA RAMIRO, Lisbon - Menu, Prices & Reviews",
    "username": "Restaurant_Review-g189158-d1234567-Reviews-Cervejaria_Ramiro-Lisbon.html",
    "profileUrl": "https://www.tripadvisor.com/Restaurant_Review-g189158-d1234567-Reviews-Cervejaria_Ramiro-Lisbon.html",
    "url": "https://www.tripadvisor.com/Restaurant_Review-g189158-d1234567-Reviews-Cervejaria_Ramiro-Lisbon.html",
    "description": "Seafood, Portuguese. Group bookings and press: ramiro.reservas@gmail.com",
    "email": "ramiro.reservas@gmail.com",
    "emailDomain": "@gmail.com",
    "possiblyTruncated": false,
    "foundAt": "2026-08-31T17:04:26Z"
  },
  {
    "network": "Tripadvisor",
    "keyword": "rooftop bar",
    "query": "site:tripadvisor.com OR site:tripadvisor.co.uk rooftop bar inurl:Restaurant_Review \"@hotmail.com\" reservations \"Lisbon\"",
    "title": "THE 10 BEST Rooftop Bars in Lisbon - Updated 2026",
    "accountName": "",
    "fullName": "",
    "username": null,
    "profileUrl": "",
    "url": "",
    "description": "Reader-recommended rooftops in Bairro Alto. Events enquiries: alto.rooftop.lx@hotmail.com",
    "email": "alto.rooftop.lx@hotmail.com",
    "emailDomain": "@hotmail.com",
    "possiblyTruncated": true,
    "foundAt": "2026-08-31T17:06:39Z"
  }
]
```

The first row shows the best case: Google exposed the full `Restaurant_Review` path, so the Tripadvisor Restaurants Email Scraper could build a working `https://www.tripadvisor.com/{path}` link.
Note that `g189158` and `d1234567` are opaque machine ids — they identify the destination and the venue internally but tell you nothing on their own.

The second row is the more common case: a listicle page with a contact address but no resolvable venue path, so `username` is `null` and `profileUrl` is empty.
Tripadvisor review URLs are opaque numeric ids, so many rows carry a venue email without a resolvable handle.

#### What a measured Tripadvisor Restaurants Email Scraper run looked like

Per roughly 10 parsed results in a live test: 2 rows with a usable identity, 2 resolvable profile URLs, 5 unique emails.
Email density is reasonable; identity coverage is low, and the `inurl:Restaurant_Review` filter tightens the result set in exchange for relevance.

Treat the output as an address list with strong topical and geographic metadata.
`keyword`, `query` and your chosen `location` are the columns you will segment on.

### Restaurant lead generation use cases for the Tripadvisor Restaurants Email Scraper

Here is where the Tripadvisor Restaurants Email Scraper fits into real B2B prospecting and market research workflows.

| Use case | How to configure it |
|---|---|
| Global restaurant prospecting | One destination per run; `countryCode` matched to the market |
| Reservation and booking software sales | Use the `reservations` modifier in tourist cities |
| POS and payments in emerging markets | Cities with no OpenTable or TheFork presence |
| Food and beverage distribution | `keywords: ["seafood","steakhouse"]` per destination |
| Tourism marketing and OTA partnerships | `keywords: ["rooftop bar","beach restaurant"]` |
| Catering and events sourcing | Lean on `catering` and `contact` modifiers |
| Hospitality recruitment | Use `owner` to surface decision-maker inboxes |
| Travel media and PR outreach | Venues that publish a press or bookings address |
| Destination market research | Compare row counts per cuisine keyword across cities |
| CRM enrichment | Match on `email`; use `fullName` where the review title carries the venue name |

### Practical Tripadvisor Restaurants Email Scraper recipes

**Single-destination baseline.** One city in `location`, matching `countryCode`, three cuisine keywords, `maxEmails: 200`.
This is the configuration most likely to return a coherent, actionable dataset.

**Secondary-city sweep.** Run destinations that no booking platform covers well.
This is where Tripadvisor's index is genuinely differentiated from the rest of this Actor family.

**Full Tripadvisor coverage.** Run this Actor together with the [Tripadvisor Hotels Email Scraper](https://apify.com/leads-scraper/tripadvisor-hotels-email-scraper) and [Tripadvisor Attractions Email Scraper](https://apify.com/leads-scraper/tripadvisor-attractions-email-scraper).
The three narrow the same shared domain to different page segments, so together they cover it without overlapping.

**Widen before you deepen.** Google caps a single query at roughly 300 results, and `inurl:Restaurant_Review` narrows it further, so keyword and city breadth beat page depth.
Raise `maxPagesPerQuery` last.

**Pair for identity.** Where a city is also covered by [OpenTable](https://apify.com/neuro-scraper/opentable-email-scraper) or [TheFork](https://apify.com/leads-scraper/thefork-email-scraper), run those too — they resolve venue names far more reliably and make good enrichment partners.

### Responsible use, GDPR and CAN-SPAM

An email that identifies a natural person is personal data even when it was published publicly.
Public availability is not consent to send. This Actor covers many countries at once, so assume the strictest applicable regime: the GDPR for EU and UK recipients, CAN-SPAM for the United States.

Practical steps that keep a Tripadvisor Restaurants Email Scraper workflow defensible:

- Prefer role addresses (`info@`, `reservations@`, `events@`) over addresses naming an individual.
- Be careful with review-page rows: the address may belong to a reviewer or a listicle author rather than the venue, so read `description` first.
- Keep provenance for every lead — the `query`, `url` and `foundAt` fields exist for exactly this.
- Give a clear sender identity, a stated purpose and a working opt-out in every message.
- Honour opt-outs and erasure requests immediately, and check suppression lists before each follow-up.
- Delete data you are not actively using rather than warehousing scraped lists.

This is operational guidance, not legal advice.

### Related Actors

The Tripadvisor Restaurants Email Scraper is one of 35 Actors in a Travel, Hospitality and Food family that all share this engine.
Its two closest relatives narrow the same Tripadvisor domain to other page types: [Tripadvisor Hotels Email Scraper](https://apify.com/leads-scraper/tripadvisor-hotels-email-scraper) for `Hotel_Review` pages and [Tripadvisor Attractions Email Scraper](https://apify.com/leads-scraper/tripadvisor-attractions-email-scraper) for `Attraction_Review` pages.

| Actor | What it collects |
|---|---|
| [Tripadvisor Attractions Email Scraper](https://apify.com/leads-scraper/tripadvisor-attractions-email-scraper) | Public contact emails from Tripadvisor |
| [Tripadvisor Hotels Email Scraper](https://apify.com/leads-scraper/tripadvisor-hotels-email-scraper) | Public contact emails from Tripadvisor |
| [Tripadvisor Email and Phone Number Scraper](https://apify.com/leads-scraper/tripadvisor-attractions-email-and-phone-number-scraper) | Emails and phone numbers from Tripadvisor |
| [Tripadvisor Email and Phone Number Scraper](https://apify.com/leads-scraper/tripadvisor-hotels-email-and-phone-number-scraper) | Emails and phone numbers from Tripadvisor |
| [Tripadvisor Email and Phone Number Scraper](https://apify.com/leads-scraper/tripadvisor-restaurants-email-and-phone-number-scraper) | Emails and phone numbers from Tripadvisor |
| [Tripadvisor Phone Number Scraper](https://apify.com/leads-scraper/tripadvisor-attractions-phone-number-scraper) | Public phone numbers from Tripadvisor |
| [Tripadvisor Phone Number Scraper](https://apify.com/leads-scraper/tripadvisor-hotels-phone-number-scraper) | Public phone numbers from Tripadvisor |
| [Tripadvisor Phone Number Scraper](https://apify.com/leads-scraper/tripadvisor-restaurants-phone-number-scraper) | Public phone numbers from Tripadvisor |
| [Airbnb Email Scraper](https://apify.com/leads-scraper/airbnb-email-scraper) | Public contact emails from Airbnb |
| [Booking.com Email Scraper](https://apify.com/leads-scraper/booking-com-email-scraper) | Public contact emails from Booking.com |
| [Caviar Email Scraper](https://apify.com/neuro-scraper/caviar-email-scraper) | Public contact emails from Caviar |
| [ChowNow Email Scraper](https://apify.com/neuro-scraper/chownow-email-scraper) | Public contact emails from ChowNow |
| [Contiki Email Scraper](https://apify.com/neuro-scraper/contiki-email-scraper) | Public contact emails from Contiki |
| [Craigslist Email Scraper](https://apify.com/leads-scraper/craigslist-email-scraper) | Public contact emails from Craigslist |
| [Delivery.com Email Scraper](https://apify.com/neuro-scraper/delivery-com-email-scraper) | Public contact emails from Delivery.com |
| [DoorDash Email Scraper](https://apify.com/leads-scraper/doordash-email-scraper) | Public contact emails from DoorDash |
| [EatStreet Email Scraper](https://apify.com/neuro-scraper/eatstreet-email-scraper) | Public contact emails from EatStreet |
| [G Adventures Email Scraper](https://apify.com/neuro-scraper/g-adventures-email-scraper) | Public contact emails from G Adventures |
| [GetYourGuide Email Scraper](https://apify.com/leads-scraper/getyourguide-email-scraper) | Public contact emails from GetYourGuide |
| [Grubhub Email Scraper](https://apify.com/leads-scraper/grubhub-email-scraper) | Public contact emails from Grubhub |
| [Hostelbookers Email Scraper](https://apify.com/leads-scraper/hostelbookers-email-scraper) | Public contact emails from Hostelworld |
| [HotelsCombined Email Scraper](https://apify.com/neuro-scraper/hotelscombined-email-scraper) | Public contact emails from HotelsCombined |
| [Intrepid Travel Email Scraper](https://apify.com/neuro-scraper/intrepid-travel-email-scraper) | Public contact emails from Intrepid Travel |
| [Just Eat Email Scraper](https://apify.com/leads-scraper/just-eat-email-scraper) | Public contact emails from Just Eat |
| [Klook Email Scraper](https://apify.com/neuro-scraper/klook-email-scraper) | Public contact emails from Klook |
| [OpenTable Email Scraper](https://apify.com/neuro-scraper/opentable-email-scraper) | Public contact emails from OpenTable |
| [Resy Email Scraper](https://apify.com/leads-scraper/resy-email-scraper) | Public contact emails from Resy |
| [TheFork Email Scraper](https://apify.com/leads-scraper/thefork-email-scraper) | Public contact emails from TheFork |
| [Toast Restaurant Email Scraper](https://apify.com/leads-scraper/toast-restaurant-email-scraper) | Public contact emails from Toast |
| [TourRadar Email Scraper](https://apify.com/leads-scraper/tourradar-email-scraper) | Public contact emails from TourRadar |
| [Traveloka Email Scraper](https://apify.com/leads-scraper/traveloka-email-scraper) | Public contact emails from Traveloka |
| [Uber Eats Email Scraper](https://apify.com/leads-scraper/uber-eats-email-scraper) | Public contact emails from Uber Eats |
| [Viator Email Scraper](https://apify.com/leads-scraper/viator-email-scraper) | Public contact emails from Viator |
| [Wanderlog Email Scraper](https://apify.com/leads-scraper/wanderlog-email-scraper) | Public contact emails from Wanderlog |
| [Wego Email Scraper](https://apify.com/leads-scraper/wego-email-scraper) | Public contact emails from Wego |
| [Zomato Email Scraper](https://apify.com/leads-scraper/zomato-email-scraper) | Public contact emails from Zomato |
| [Airbnb Email and Phone Number Scraper](https://apify.com/leads-scraper/airbnb-email-and-phone-number-scraper) | Emails and phone numbers from Airbnb |
| [Booking.com Email and Phone Number Scraper](https://apify.com/leads-scraper/booking-com-email-and-phone-number-scraper) | Emails and phone numbers from Booking.com |
| [Caviar Email and Phone Number Scraper](https://apify.com/neuro-scraper/caviar-email-and-phone-number-scraper) | Emails and phone numbers from Caviar |
| [ChowNow Email and Phone Number Scraper](https://apify.com/neuro-scraper/chownow-email-and-phone-number-scraper) | Emails and phone numbers from ChowNow |
| [Contiki Email and Phone Number Scraper](https://apify.com/neuro-scraper/contiki-email-and-phone-number-scraper) | Emails and phone numbers from Contiki |
| [Craigslist Email and Phone Number Scraper](https://apify.com/leads-scraper/craigslist-email-and-phone-number-scraper) | Emails and phone numbers from Craigslist |

### Tripadvisor Restaurants Email Scraper limitations

Read these before planning anything around Tripadvisor Restaurants Email Scraper output.

- **Tripadvisor review URLs are opaque numeric ids, so many rows carry a venue email without a resolvable handle.** This is the defining limitation of the Tripadvisor Restaurants Email Scraper.
- **Weak account identity.** In a live test only about 2 of 10 parsed results carried a usable `accountName` or `fullName`, and 2 resolved to a profile URL.
- **The `inurl:Restaurant_Review` filter narrows the result set.** It buys relevance at the cost of volume; a plain domain search would return more rows, but most would be hotels and attractions.
- **Publicly indexed emails only.** The Tripadvisor Restaurants Email Scraper finds addresses already visible in Google's index. Anything behind a contact form or a login is unreachable.
- **Google's ~300-result cap.** A single query returns roughly 300 results at most, which is why `expandQueries` defaults to `true`.
- **`possiblyTruncated`.** When `true`, Google's snippet ellipsis touched the email and it may be cut off. Verify before sending.
- **`username` and `profileUrl` are frequently empty.** When populated, `username` is the full `Restaurant_Review-g...-d...` path Google exposed. That is a Google and platform limitation, not a bug.
- **Review-page noise.** An address on a review or listicle page may belong to a reviewer or author, not the venue. Read `description` before sending.
- **Apify GOOGLE\_SERP proxy required.** The Tripadvisor Restaurants Email Scraper cannot run without Apify proxy credentials.
- **Free-plan cap.** Free Apify plans stop at 100 emails per run. Paid plans are uncapped.
- **No guaranteed volume.** Results vary with keywords, domains, location and Google's index on the day.
- **Not affiliated with Tripadvisor.** This is an independent tool, not supported, endorsed by or connected to Tripadvisor LLC.

### Tripadvisor Restaurants Email Scraper FAQ

Common questions about the Tripadvisor Restaurants Email Scraper, its inputs and its output.

#### How many results should I expect from the Tripadvisor Restaurants Email Scraper?

In a live test, roughly 10 parsed results produced 5 unique emails but only 2 identified venues and 2 profile URLs. Expect reasonable email density and thin account context. Total volume depends on your keywords, domains, `location` and `countryCode`, and no row count is guaranteed.

#### How does it avoid returning hotels and attractions?

Every query it builds includes an extra `inurl:Restaurant_Review` operator. Tripadvisor routes restaurant pages under that URL segment, so the shared domain is narrowed to restaurants only.

#### What are the sibling Actors?

The [Tripadvisor Hotels Email Scraper](https://apify.com/leads-scraper/tripadvisor-hotels-email-scraper) narrows to `Hotel_Review` pages and the [Tripadvisor Attractions Email Scraper](https://apify.com/leads-scraper/tripadvisor-attractions-email-scraper) to `Attraction_Review` pages. Run all three for full domain coverage.

#### Why do so many rows have no venue name?

Because Tripadvisor review URLs are opaque numeric ids, so many rows carry a venue email without a resolvable handle. Listicle pages such as "THE 10 BEST..." are especially common and resolve to nothing.

#### What are `g189158` and `d1234567` in the URLs?

Tripadvisor's internal destination and venue ids. They are stable enough to use as keys, but they carry no readable meaning on their own.

#### Does the Tripadvisor Restaurants Email Scraper log into Tripadvisor?

No. It never logs in, never calls a Tripadvisor API and never opens tripadvisor.com in a browser. It reads Google results through the Apify GOOGLE\_SERP proxy.

#### How do I use `location` for city-level prospecting?

Put a destination in it — `Lisbon`, `Kraków`, `Hoi An` — and run one job per city with a matching `countryCode`. Tripadvisor's coverage of secondary destinations is its main advantage over booking platforms.

#### Which keywords work best?

Cuisine and format terms: `seafood`, `steakhouse`, `rooftop bar`, `tapas`, `vegetarian`, `fine dining`, `beach restaurant`. Use local-language terms in non-English markets.

#### Whose emails am I actually finding?

Mostly business inboxes published for reservations, events and catering — but review and listicle pages can surface a reviewer's or author's address instead. Check `description` before sending.

#### Does the Tripadvisor Restaurants Email Scraper verify deliverability?

No. It extracts and normalises what Google indexed. Check rows flagged `possiblyTruncated` before using them.

#### Can I resume an interrupted run?

Yes. State lives in the key-value store keyed by a hash of your input, with saves on Apify's `PERSIST_STATE`, `MIGRATING` and `ABORTING` events.

#### Is scraping Tripadvisor contact emails legal?

The Tripadvisor Restaurants Email Scraper only reads publicly indexed Google results. Whether you may then contact those addresses is a separate GDPR and CAN-SPAM question. See the responsible use section and take your own legal advice.

### Leave a review

If the Tripadvisor Restaurants Email Scraper saved you time, please leave a star rating and a
short review on the Actor page.

Reviews are how other buyers judge whether a tool works, and they tell us which features to
build next.

If something did not work, email <neurodata.apify@gmail.com>
instead - bugs get fixed faster than they get complained about.

### Support

Questions, a bug, or you need a custom build of the Tripadvisor Restaurants Email Scraper? Contact **<neurodata.apify@gmail.com>**.

# Actor input Schema

## `keywords` (type: `array`):

Search terms describing the Tripadvisor accounts you want (niche, job title, industry).

## `location` (type: `string`):

Optional location phrase added to every query (e.g. "New York").

## `customDomains` (type: `array`):

Only emails ending with one of these domains are collected. With or without the leading @. Each domain is searched separately, so more domains means more results but a longer run - remove some for a faster, narrower search, or add your own (e.g. @company.com).

## `maxEmails` (type: `integer`):

Stop once this many unique emails have been collected.

## `countryCode` (type: `string`):

Two-letter country code for the search proxy (e.g. US, GB, DE). Empty for any.

## `expandQueries` (type: `boolean`):

Search each keyword x domain pair with several phrasings. Recommended - Google caps a single query at ~300 results.

## `queryModifiers` (type: `array`):

Extra words combined with each keyword when Expand queries is on. Tuned for Tripadvisor.

## `maxPagesPerQuery` (type: `integer`):

Google rarely returns more than ~30 pages for one query.

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

How many queries run in parallel.

## Actor input object example

```json
{
  "keywords": [
    "restaurant",
    "cafe"
  ],
  "location": "",
  "customDomains": [
    "@gmail.com",
    "@yahoo.com"
  ],
  "maxEmails": 20,
  "countryCode": "",
  "expandQueries": true,
  "queryModifiers": [
    "email",
    "contact",
    "catering",
    "reservations",
    "owner"
  ],
  "maxPagesPerQuery": 30,
  "maxConcurrency": 5
}
```

# Actor output Schema

## `results` (type: `string`):

Records produced by Tripadvisor Restaurants Email Scraper, stored in the run's default dataset.

# 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 = {
    "keywords": [
        "restaurant",
        "cafe"
    ],
    "location": "",
    "customDomains": [
        "@gmail.com",
        "@yahoo.com"
    ],
    "countryCode": "",
    "queryModifiers": [
        "email",
        "contact",
        "catering",
        "reservations",
        "owner"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("leads-scraper/tripadvisor-restaurants-email-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 = {
    "keywords": [
        "restaurant",
        "cafe",
    ],
    "location": "",
    "customDomains": [
        "@gmail.com",
        "@yahoo.com",
    ],
    "countryCode": "",
    "queryModifiers": [
        "email",
        "contact",
        "catering",
        "reservations",
        "owner",
    ],
}

# Run the Actor and wait for it to finish
run = client.actor("leads-scraper/tripadvisor-restaurants-email-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "keywords": [
    "restaurant",
    "cafe"
  ],
  "location": "",
  "customDomains": [
    "@gmail.com",
    "@yahoo.com"
  ],
  "countryCode": "",
  "queryModifiers": [
    "email",
    "contact",
    "catering",
    "reservations",
    "owner"
  ]
}' |
apify call leads-scraper/tripadvisor-restaurants-email-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,leads-scraper/tripadvisor-restaurants-email-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/rxJs57eO3In1EOTeB/builds/xGZiDPKBZ9E80Zz55/openapi.json
