# Tripadvisor Email Leads Scraper (Hotels, Restaurants, Tours) (`lurkapi/tripadvisor-email-leads-scraper-api`) Actor

Tripadvisor email scraper for B2B lead generation. Extract business emails, phones, websites, ratings and rankings from hotels, restaurants, attractions and tours. Search by keyword, category, city, URL or ID.

- **URL**: https://apify.com/lurkapi/tripadvisor-email-leads-scraper-api.md
- **Developed by:** [LurkAPI](https://apify.com/lurkapi) (community)
- **Categories:** Agents, Automation, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.99 / 1,000 place scrapeds

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 Email Leads Scraper (Hotels, Restaurants, Tours)

Turn any Tripadvisor search into a call list with email addresses. Names, phones, addresses, ratings and rankings from Tripadvisor, plus the emails and social profiles published on each venue's own website.

*A hospitality lead database for agencies pitching hotels and restaurants, travel-tech teams tracking a market, and anyone tired of copying contact details off Tripadvisor by hand.*

### 🎯 What it does

Tripadvisor shows you one venue at a time. This gives you the whole list as a spreadsheet, with contact details attached.

- **Search by keyword.** Put `sushi` in Search keywords and `Paris` in Location. You get sushi restaurants in Paris, not every restaurant in the city.
- **Or list a whole destination.** Pick a place category instead and it pages through the full listing: 22,541 restaurants in Paris, 1,036 hotels in New York. Cuisine, price, MICHELIN and star filters are applied by Tripadvisor during discovery, so places you exclude are never fetched or charged.
- **What each row contains.** Name, rating, review count, ranking with its denominator (`#3 of 22,541`, not a bare `#1`), price level, address, coordinates, phone, website, and the business email when Tripadvisor publishes one.
- **Emails Tripadvisor does not publish.** Turn on Find contacts on the business website ($) and each venue's own site is opened for public email addresses, extra phone numbers and social profiles. Off by default, and charged only when it finds something.
- **Optional enrichments.** Live Google and Meta ad activity, LinkedIn company data, official registry records, the legal entity behind the trading name, and a free 0–100 lead score.
- **Reviews.** Full text in the original language and translated, with rating, dates and helpful votes. Charged per review, and you set the cap.
- **Mixed inputs.** Keywords, categories, listing URLs, detail URLs and location IDs in one run. Duplicates are collapsed, so a venue is never collected or charged twice.

### 📋 How to use it

#### Step 1: Say what you want

Put `sushi` in **Search keywords** and `Paris` in **Location**. That is the whole setup.

```
Search keywords:  sushi
Location:         Paris
```

Want the whole city instead? Leave keywords empty and pick **Place categories**. Already have Tripadvisor links? Paste them into **Tripadvisor URLs**. Listing pages keep their cuisine and price filters, detail pages take one venue at a time. Bare place or destination IDs go in **Location IDs**.

Mix any of them in one run.

#### Step 2: Narrow it down

Filters cut the list before anything is fetched: cuisine (146 of them), dietary restrictions, establishment type, meal type, features, MICHELIN Guide level, "Great for" style, price level, and hotel star class.

Then switch on what you want beyond the listing. **Find contacts on the business website ($)** is the one most people want first.

#### Step 3: Run it

Rows appear as each input finishes, so you can watch the list fill. Download from the Storage tab as Excel, CSV or JSON, or pull it through the Apify API.

Ready-made views split the data for you: 📌 Overview, 📞 Contacts, 📍 Location, ⭐ Quality & ranking, 🏷️ Place details, 💎 Enrichments, 💬 Reviews.

Every row starts with **status**. `Success` means real data. `Error` or `No results` means that one input did not work out, and the **error** column says why in plain English. Those rows are never charged.

#### Example output

One restaurant row from a listing URL, add-ons off:

```json
{
    "status": "Success",
    "error": null,
    "locationId": "12714552",
    "name": "Pizzeria Arrivederci",
    "entityType": "restaurant",
    "category": "Restaurant",
    "webUrl": "https://www.tripadvisor.com/Restaurant_Review-g187147-d12714552-Reviews-Pizzeria_Arrivederci-Paris_Ile_de_France.html",
    "email": "arriedercinfo@gmail.com",
    "phone": "+33177324557",
    "website": "https://arrivedercipizzeria.com/",
    "address": "47 rue Gay Lussac, 75005 Paris France",
    "city": "Paris",
    "postalCode": "75005",
    "country": "France",
    "latitude": 48.84172,
    "longitude": 2.343511,
    "rating": 4.9,
    "reviewCount": 6621,
    "rankingPosition": 1,
    "rankingDenominator": 22542,
    "rankingCategory": "restaurant",
    "priceLevel": "$$ - $$$",
    "cuisines": ["Italian", "Pizza", "Mediterranean", "Neapolitan"],
    "mainImage": "https://media-cdn.tripadvisor.com/media/photo-s/1c/55/7e/b3/la-poesia-a-tavola.jpg",
    "scrapedAt": "2026-08-13T12:41:34.788Z"
}
```

Phone numbers are normalised to E.164 wherever the place's country makes that unambiguous, so `+33177324557` is comparable across every market in one export.

### 📊 Output fields

Ninety-six fields per place. Every one has its own toggle, and a field you switch off is absent from the row rather than present and empty. The seven named views in the Output tab group them the same way as the tables below.

#### Overview

| Field | Type | Description |
|---|---|---|
| `status` | String | `Success`, `Error`, or `No results` |
| `error` | String/null | Plain-English reason, on non-success rows only |
| `locationId` | String | Tripadvisor's own id for the place |
| `name` | String | Business name |
| `entityType` | String | `hotel`, `bnb`, `restaurant`, `attraction`, `tour`, or `vacationRental` |
| `category` | String | Tripadvisor's top-level category |
| `rating` | Number | 1 to 5 |
| `reviewCount` | Integer | Total reviews on Tripadvisor |
| `city` | String | City |
| `email` | String/null | Business email |
| `phone` | String/null | Phone, E.164 where the country is known |
| `website` | String/null | Business website |
| `webUrl` | String | Tripadvisor page for the place |
| `inputUrl` | String | The input this row came from |
| `scrapedAt` | String | ISO timestamp |

#### Contacts

| Field | Type | Description |
|---|---|---|
| `email`, `phone`, `website` | String/null | Primary contact details |
| `emails`, `phones` | Array/null | Everything found, including the business website |
| `emailValidationStatus` | String/null | `Valid`, `Invalid`, `Risky`, or `Unknown` |
| `emailProvider` | String/null | Google Workspace, Microsoft 365, and others |
| `facebook`, `instagram`, `linkedin`, `twitter`, `youtube`, `tiktok`, `pinterest` | String/null | Social profiles |
| `ownerWebsite` | String/null | Owner-declared site where Tripadvisor publishes one |
| `writeReviewUrl`, `menuWebUrl`, `orderOnlineUrl` | String/null | Tripadvisor action links |
| `booking`, `bookingUrl` | String/null | Booking partner and deep link |

#### Location

| Field | Type | Description |
|---|---|---|
| `address` | String | Full address as Tripadvisor prints it |
| `street`, `city`, `state`, `postalCode`, `country` | String/null | Address parts |
| `latitude`, `longitude` | Number/null | Coordinates |
| `timezone` | String/null | IANA timezone |
| `neighborhoods` | Array/null | Neighbourhoods the place sits in |
| `nearestMetroStations` | Array/null | Nearby transit |
| `parentDisplayName` | String/null | Parent destination |

#### Quality and ranking

| Field | Type | Description |
|---|---|---|
| `rating`, `reviewCount` | Number, Integer | Score and volume |
| `ratingHistogram1` … `ratingHistogram5` | Integer/null | Reviews per star (add-on) |
| `rankingPosition`, `rankingDenominator` | Integer/null | 1 of 22,542, not a bare "#1" |
| `rankingCategory`, `rankingString` | String/null | What the ranking is measured against |
| `rawRanking` | Number/null | Tripadvisor's underlying ranking score |
| `priceLevel`, `priceRange` | String/null | `$` to `$$$$`, and the printed range |
| `isClosed`, `isLongClosed` | Boolean/null | Closure flags |
| `mainImage`, `photoCount` | String/null, Integer/null | Lead photo and gallery size |
| `tags` | Array/null | Tripadvisor tags |
| `hotelClass`, `numberOfRooms` | Number/null, Integer/null | Star class and room count |

#### Place details

| Field | Type | Description |
|---|---|---|
| `subcategory`, `subtype` | String/null | Finer classification |
| `description` | String/null | Tripadvisor's description |
| `amenities`, `features` | Array/null | Hotel amenities, restaurant features |
| `cuisines`, `mealTypes`, `dishes`, `dietaryRestrictions`, `establishmentTypes` | Array/null | Restaurant attributes |
| `hours` | Array/null | Opening hours |
| `offers`, `offerGroup`, `roomTips` | Array/null | Deals and traveller tips |
| `checkInDate`, `checkOutDate` | String/null | Dates the hotel pricing was quoted for |
| `awards` | Array/null | Travellers' Choice and similar |
| `ancestorLocations` | Array/null | Destination hierarchy above the place |
| `hotelClassAttribution` | String/null | Who assigned the star class |
| `productCode`, `duration`, `priceFrom` | String/null, String/null, Number/null | Tour-specific fields |

#### Enrichments

| Field | Type | Description |
|---|---|---|
| `leadScore` | Integer/null | 0 to 100, free |
| `googleAdsActive`, `metaAdsActive` | Boolean/null | Live advertiser detection |
| `linkedinFollowers`, `linkedinIndustry` | Integer/null, String/null | LinkedIn company data |
| `registryFound`, `registryName`, `registryNumber` | Boolean/null, String/null | Official registry record |
| `legalEntityName` | String/null | Resolved legal entity |
| `reviewTags` | Array/null | Recurring review topics |
| `aiReviewSummary` | String/null | Tripadvisor's own AI summary |
| `reviews` | Array/null | Full reviews, original and translated text |

### 💎 Add-ons

Tripadvisor gives you a name, a rating, and sometimes an email. These go further. Everything here is off until you turn it on, and paid add-ons charge only when they return data.

**Reach a person**

- **Find contacts on the business website ($)** opens each venue's own site and collects the public email addresses, extra phone numbers and social profiles. This is where most emails come from, because Tripadvisor publishes one for some venues but not most.
- **Validate email ($)** checks the address can receive mail and names the provider behind it. A free provider usually means an owner-run business; a corporate mail system usually means a front desk between you and the decision.

**Know who you are dealing with**

- **LinkedIn company enrichment ($)** adds follower count, industry and the company page. It runs only when the venue's website links to one, so it never attaches the wrong company.
- **Company registry enrichment ($)** matches an official government record when the name and location or published registration numbers agree.
- **Legal entity resolution ($)** finds the registered company behind the trading name, taken from the venue's own legal pages.

**Judge the opportunity**

- **Detect Google Ads activity ($)** checks whether the venue's domain has run ads in the past seven days. A venue already buying traffic has a marketing budget.
- **Detect Meta Ads activity ($)** does the same through the Meta Ad Library, matched by Facebook page or domain, searching the venue's own country.
- **Lead score** rates each venue 0 to 100 from data already collected. Free, and it costs no extra requests.

**What the reviews say**

- **Reviews ($)** brings the full text in the original language and translated, with rating, dates and helpful votes, each on its own row. This is your opening line: a hotel sitting on complaints about slow check-in will read an email about slow check-in.
- **Rating histogram ($)** splits the reviews across one to five stars. A 4.2 built on 3,000 reviews reads very differently from a 4.2 built on nine.
- **Review tags ($)** returns the topics reviewers keep coming back to.
- **Tripadvisor AI review summary ($)** copies Tripadvisor's own summary of recent reviews, where it publishes one.

### 🤖 Use it from AI clients (MCP)

Call this Actor from Claude Code, Claude Desktop, Codex, Cursor, or any client that speaks the Model Context Protocol. Then just ask: *"Find 50 four-star hotels in Lisbon with emails and phone numbers."*

Every example needs an `APIFY_TOKEN` from [console.apify.com/settings/integrations](https://console.apify.com/settings/integrations).

**Claude Code**

```bash
claude mcp add apify -- npx -y @apify/actors-mcp-server \
  --actors lurkapi/tripadvisor-email-leads-scraper-api
```

**Claude Desktop**

Edit `~/Library/Application Support/Claude/claude_desktop_config.json` (macOS) or `%APPDATA%\Claude\claude_desktop_config.json` (Windows):

```json
{
  "mcpServers": {
    "apify": {
      "command": "npx",
      "args": ["-y", "@apify/actors-mcp-server",
               "--actors", "lurkapi/tripadvisor-email-leads-scraper-api"]
    }
  }
}
```

Then add your token to that server's `env` block as `APIFY_TOKEN`.

**Codex CLI**

Edit `~/.codex/config.toml`:

```toml
[mcp_servers.apify]
command = "npx"
args = ["-y", "@apify/actors-mcp-server",
        "--actors", "lurkapi/tripadvisor-email-leads-scraper-api"]
```

Add your token to the same block as an `APIFY_TOKEN` environment variable.

**Cursor**

Edit `~/.cursor/mcp.json` using the same shape as the Claude Desktop example.

### 💰 Pricing

Pay-per-result. You only pay for places actually delivered to your dataset. Filtered places, explanatory status rows, and failed lookups cost nothing. Optional add-ons charge only when they return a result; misses are free.

**Base**

| Item | Price |
|---|---|
| Actor start | $0.001 per run |
| Place scraped | **$0.99 per 1,000** |

**Add-ons** (pay only when the add-on returns a result)

| Add-on | Charges when | Price per 1,000 |
|---|---|---|
| Find contacts on the business website | At least one email, phone, or social profile is found | $5.00 |
| Validate email | An email is validated and its provider classified | $0.50 |
| Rating histogram | Per-star review counts are returned | $0.50 |
| Review tags | Recurring review topics are returned | $0.50 |
| Tripadvisor AI review summary | Tripadvisor publishes a summary for the place | $0.50 |
| Reviews | Per review delivered | $1.00 |
| Detect Google Ads activity | A live Google Ads advertiser is matched | $0.50 |
| Detect Meta Ads activity | A live Meta advertiser is matched | $0.50 |
| LinkedIn company enrichment | A LinkedIn company page is enriched | $1.00 |
| Company registry enrichment | An official registry record is matched | $2.00 |
| Legal entity resolution | A legal entity is decisively resolved | $2.00 |
| Lead score (0 to 100) | Free. No extra fetches, no extra charges. | **Free** |

### 💡 Good to know

- **Sort by the `rankingPosition` column, not by row order.** Places land in the file in whatever order they finish. `rankingPosition` is the place Tripadvisor gave each one, and `rankingDenominator` is how many it was ranked against: `#3 of 22,541`. Sort on it and you have Tripadvisor's order back.
- **One keyword gets you about twenty places. A category gets you the city.** Tripadvisor's own search caps a keyword at twenty per place type, which is fast and relevant but shallow. To sweep a destination, pick a place category instead and it pages the whole listing.
- **Attractions and tours are different things.** Attractions are places you visit. Tours are bookable products. Ask for attractions and you will not get a pile of tour listings.
- **Vacation rentals and some tours need a link.** Rentals are not in the category picker, and a tour buried deep in its destination cannot be reached by keyword. Paste the URL or the ID and both come back like anything else.
- **The same place twice costs you once.** Reach a venue through a keyword, a listing, a detail URL and a bare ID in one run, and it is fetched, delivered and charged a single time.
- **Data is stored in your Apify dataset. Retention depends on your Apify plan.**

### ❓ FAQ

**Why is the email field empty for some places?**

Tripadvisor only publishes a business email for some listings. Turn on website contact scanning to recover emails from the business's own site; that finds addresses Tripadvisor never shows. Some venues genuinely publish no email anywhere, and those come back `null` rather than guessed.

**Can I filter by price level, hotel star rating, or cuisine?**

Yes, and by more besides. Restaurants can be filtered by cuisine (all 146 Tripadvisor lists), dietary restrictions, establishment type, meal type, features such as outdoor seating or wheelchair access, MICHELIN Guide level, "Great for" style, and price level. Hotels can be filtered by star class. Every one of these is applied by Tripadvisor before results are fetched, so you are never billed for places that get filtered out.

**Can I search for a keyword like "sushi" or "rooftop bar"?**

Yes, that is the default input. Put the words in **Search keywords** and the city in **Location**. Each keyword goes to Tripadvisor's own search index and is asked separately for restaurants, hotels, attractions and tours, so `sushi` in Paris returns sushi restaurants rather than everything in Paris. Their search caps a keyword at twenty places per place type and offers no paging, so use several keywords to widen a search, or the category picker when you want every place in a destination.

**Why did I get fewer places than the destination says it has?**

Tripadvisor stops serving public listings after a few thousand places per destination, and your per-input cap applies on top of that. Check the run log: it states whether each input was exhausted, capped, or failed, so you can tell a real limit from a problem.

**Can I get full review text for each place?**

This Actor returns review intelligence: per-star counts, recurring topics, Tripadvisor's own AI summary, and a configurable sample of recent reviews. For complete review history with review-level filters and sorting, use a dedicated reviews Actor.

**What happens to rows that fail?**

They come back as explanatory rows with `status` set to `Error` or `No results` and a plain-English `error` message, using exactly the same columns as successful rows. They are never charged.

**How long are the results stored?**

They are stored in your Apify dataset. How long they are kept depends on your Apify plan.

### 🔗 Other tools you might like

- [Google Maps Business Leads Scraper (Email, Phone...)](https://apify.com/lurkapi/google-maps-business-leads-scraper): same job for businesses on Google Maps, with website contact scanning and lead scoring.
- [Google Maps Business Without Websites Leads Scraper](https://apify.com/lurkapi/google-maps-business-without-websites-leads-scraper): find businesses that have no website yet, the easiest web-design and marketing pitch there is.
- [Yelp Business Leads Scraper API (Email, Phone…)](https://apify.com/lurkapi/yelp-business-leads-scraper-api): the same call list built from Yelp, with emails from each company’s own website.
- [Trustpilot Reviews & Company Data Scraper API](https://apify.com/lurkapi/trustpilot-reviews-and-company-data-scraper-api): pull the full review stream and company profile from any Trustpilot page.
- [Google Maps Reviews Scraper](https://apify.com/lurkapi/google-maps-reviews-scraper): the complete review stream for any place on Google Maps.

### ⚖️ Disclaimer

This tool is intended for personal, research, and educational use. You are responsible for complying with Tripadvisor's Terms of Service and applicable laws in your jurisdiction, including anti-spam regulations (CAN-SPAM, GDPR, etc.) when using extracted email addresses. The developer is not liable for misuse. Data availability depends on Tripadvisor at run time.

**Keywords:** tripadvisor scraper, tripadvisor email scraper, hotel leads, restaurant leads, hospitality lead generation, travel data, tripadvisor api, venue contact data

# Actor input Schema

## `searchQueries` (type: `array`):

Free-text searches, one per line, such as `sushi`, `boutique hotel` or `rooftop bar`. Combined with the location below. Each keyword is answered by Tripadvisor's own search index and returns its best matches, drawn from restaurants, hotels, attractions and tours and capped by the limit below. For every place in a destination rather than the best matches for a word, use the category picker below, which pages the full listing.

## `searchTerms` (type: `array`):

Categories to discover in the location. This is a category picker, not a keyword search: free-text terms such as 'sushi' or 'boutique hotel' are rejected. Use a Tripadvisor listing URL if you need a narrower search.

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

City, region or country. Used with both search keywords and place categories, and required to hold a keyword to one destination. A keyword with no location searches worldwide.

## `maxResultsPerInput` (type: `integer`):

Cap how many places are returned for each search term, URL, or ID. Tripadvisor stops serving a public listing after a few thousand places per destination regardless of this value.

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

Tripadvisor detail or listing URLs for hotels, restaurants, attractions, tours, vacation rentals, and B\&Bs. Existing restaurant cuisine and price filters in a listing URL are preserved.

## `locationIds` (type: `array`):

Tripadvisor place or destination IDs as decimal strings. Destination IDs discover the selected place categories, or restaurants by default.

## `cuisines` (type: `array`):

Restaurant cuisine applied by Tripadvisor during discovery. Filtered-out places are not returned or charged.

## `dietaryRestrictions` (type: `array`):

Dietary restrictions applied by Tripadvisor during discovery. Filtered-out places are not returned or charged.

## `establishmentTypes` (type: `array`):

Restaurant establishment type applied by Tripadvisor during discovery. Filtered-out places are not returned or charged.

## `mealTypes` (type: `array`):

Meal type applied by Tripadvisor during discovery. Filtered-out places are not returned or charged.

## `diningOptions` (type: `array`):

Features applied by Tripadvisor during discovery. Filtered-out places are not returned or charged.

## `michelinAwards` (type: `array`):

MICHELIN Guide filter applied by Tripadvisor during discovery. Filtered-out places are not returned or charged.

## `styles` (type: `array`):

Restaurant vibe applied by Tripadvisor during discovery. Filtered-out places are not returned or charged.

## `priceLevel` (type: `array`):

Price tiers applied by Tripadvisor before discovery. Filtered-out places are not returned or charged.

## `hotelClass` (type: `array`):

Star classes applied by Tripadvisor before hotel discovery. Filtered-out places are not returned or charged.

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

Uses Tripadvisor's native server order or its highest-rated server order. It only affects restaurant discovery.

## `language` (type: `string`):

Target language used for delivered review translations, such as en, fr or de.

## `enrichWebsiteContacts` (type: `boolean`):

Crawls the business website for additional emails, phone numbers and social profiles. Charged only when at least one contact is found.

## `validateEmail` (type: `boolean`):

Checks the selected business email and identifies its mailbox provider when validation is decisive. Charged only when an email is validated and its provider classified.

## `maxReviewsPerPlace` (type: `integer`):

Delivers up to this many recent reviews per place. Set to 0 to disable review delivery. Charged per review actually delivered, so a place with fewer reviews costs less.

## `includeRatingHistogram` (type: `boolean`):

Adds exact one-star through five-star review counts for each place. Charged only when the per-star counts are returned.

## `includeReviewTags` (type: `boolean`):

Adds recurring topics found in a bounded sample of recent reviews. Charged only when at least one review topic is returned.

## `includeAiReviewSummary` (type: `boolean`):

Adds Tripadvisor's own AI-generated summary of recent reviews when the place has one. Charged only when Tripadvisor publishes a summary for the place.

## `checkGoogleAdsActive` (type: `boolean`):

Checks Google Ads Transparency Center for ads shown for the business website domain within the past seven days. Charged only when a live advertiser is matched; a confirmed "not advertising" result is free.

## `checkMetaAdsActive` (type: `boolean`):

Checks Meta Ad Library for active ads in the venue's own country, matched through the business Facebook page or website domain. Charged only when a live advertiser is matched; a confirmed "not advertising" result is free.

## `enrichLinkedIn` (type: `boolean`):

Adds public follower count and industry data when the business website links to a LinkedIn company or school page. Charged only when a LinkedIn company page is enriched.

## `enrichRegistry` (type: `boolean`):

Adds an official registry match when the business name and available location or published registration identifiers agree. Charged only when an official registry record is matched.

## `enrichLegalEntity` (type: `boolean`):

Adds a decisively resolved legal entity from an official registry or explicit legal information published on the business website. Charged only when a legal entity is decisively resolved.

## `outputScrapedAt` (type: `boolean`):

Include the UTC timestamp of when the row was produced.

## `outputEntityType` (type: `boolean`):

Include the normalized place type column.

## `outputCategory` (type: `boolean`):

Include the primary category column.

## `outputSubcategory` (type: `boolean`):

Include the subcategory column.

## `outputDescription` (type: `boolean`):

Include the place description column.

## `outputWebUrl` (type: `boolean`):

Include the canonical Tripadvisor page URL column.

## `outputWebsite` (type: `boolean`):

Include the business website column.

## `outputEmail` (type: `boolean`):

Include the business email column.

## `outputPhone` (type: `boolean`):

Include the business phone column.

## `outputAddress` (type: `boolean`):

Include the formatted address column.

## `outputStreet` (type: `boolean`):

Include the street address column.

## `outputCity` (type: `boolean`):

Include the city column.

## `outputState` (type: `boolean`):

Include the state or region column.

## `outputPostalCode` (type: `boolean`):

Include the postal code column.

## `outputCountry` (type: `boolean`):

Include the country column.

## `outputLatitude` (type: `boolean`):

Include the latitude column.

## `outputLongitude` (type: `boolean`):

Include the longitude column.

## `outputTimezone` (type: `boolean`):

Include the timezone column.

## `outputRating` (type: `boolean`):

Include the Tripadvisor rating column.

## `outputReviewCount` (type: `boolean`):

Include the review count column.

## `outputRawRanking` (type: `boolean`):

Include Tripadvisor's raw ranking score column.

## `outputRankingPosition` (type: `boolean`):

Include the ranking position column.

## `outputRankingDenominator` (type: `boolean`):

Include the total places in the ranking category.

## `outputRankingCategory` (type: `boolean`):

Include the ranking category column.

## `outputRankingString` (type: `boolean`):

Include Tripadvisor's human-readable ranking column.

## `outputPriceLevel` (type: `boolean`):

Include the price level column.

## `outputPriceRange` (type: `boolean`):

Include the price range column.

## `outputIsClosed` (type: `boolean`):

Include whether the place is closed.

## `outputIsLongClosed` (type: `boolean`):

Include whether the place is marked long-term closed.

## `outputMainImage` (type: `boolean`):

Include the main image URL column.

## `outputPhotoCount` (type: `boolean`):

Include the photo count column.

## `outputTags` (type: `boolean`):

Include Tripadvisor tags.

## `outputNeighborhoods` (type: `boolean`):

Include neighborhood names.

## `outputNearestMetroStations` (type: `boolean`):

Include nearby metro station names.

## `outputAncestorLocations` (type: `boolean`):

Include the location hierarchy.

## `outputParentDisplayName` (type: `boolean`):

Include the parent location name.

## `outputAwards` (type: `boolean`):

Include Tripadvisor award labels.

## `outputWriteReviewUrl` (type: `boolean`):

Include the Tripadvisor write-review URL.

## `outputOwnerWebsite` (type: `boolean`):

Include Tripadvisor's owner website URL when available.

## `outputHotelClass` (type: `boolean`):

Include the hotel star-class column.

## `outputHotelClassAttribution` (type: `boolean`):

Include the hotel-class attribution column.

## `outputAmenities` (type: `boolean`):

Include hotel and B\&B amenities.

## `outputNumberOfRooms` (type: `boolean`):

Include the published room-count column.

## `outputOffers` (type: `boolean`):

Include hotel offer labels.

## `outputRoomTips` (type: `boolean`):

Include hotel room-tip labels.

## `outputCheckInDate` (type: `boolean`):

Include the check-in date column.

## `outputCheckOutDate` (type: `boolean`):

Include the check-out date column.

## `outputCuisines` (type: `boolean`):

Include restaurant cuisine labels.

## `outputMealTypes` (type: `boolean`):

Include restaurant meal types.

## `outputDishes` (type: `boolean`):

Include restaurant dish labels.

## `outputDietaryRestrictions` (type: `boolean`):

Include restaurant dietary labels.

## `outputEstablishmentTypes` (type: `boolean`):

Include restaurant establishment types.

## `outputFeatures` (type: `boolean`):

Include restaurant feature labels.

## `outputHours` (type: `boolean`):

Include formatted opening hours.

## `outputMenuWebUrl` (type: `boolean`):

Include the restaurant menu URL.

## `outputOrderOnlineUrl` (type: `boolean`):

Include the restaurant order-online URL.

## `outputSubtype` (type: `boolean`):

Include the attraction subtype column.

## `outputBooking` (type: `boolean`):

Include the attraction booking URL.

## `outputOfferGroup` (type: `boolean`):

Include attraction offer labels.

## `outputProductCode` (type: `boolean`):

Include the tour or activity product code.

## `outputDuration` (type: `boolean`):

Include the tour or activity duration.

## `outputPriceFrom` (type: `boolean`):

Include the tour or activity starting price.

## `outputBookingUrl` (type: `boolean`):

Include the tour or activity booking URL.

## Actor input object example

```json
{
  "searchQueries": [
    "sushi"
  ],
  "searchTerms": [],
  "location": "Paris, France",
  "maxResultsPerInput": 20,
  "startUrls": [],
  "locationIds": [],
  "cuisines": [],
  "dietaryRestrictions": [],
  "establishmentTypes": [],
  "mealTypes": [],
  "diningOptions": [],
  "michelinAwards": [],
  "styles": [],
  "priceLevel": [],
  "hotelClass": [],
  "sortBy": "native",
  "language": "en",
  "enrichWebsiteContacts": false,
  "validateEmail": false,
  "maxReviewsPerPlace": 0,
  "includeRatingHistogram": false,
  "includeReviewTags": false,
  "includeAiReviewSummary": false,
  "checkGoogleAdsActive": false,
  "checkMetaAdsActive": false,
  "enrichLinkedIn": false,
  "enrichRegistry": false,
  "enrichLegalEntity": false,
  "outputScrapedAt": true,
  "outputEntityType": true,
  "outputCategory": true,
  "outputSubcategory": true,
  "outputDescription": true,
  "outputWebUrl": true,
  "outputWebsite": true,
  "outputEmail": true,
  "outputPhone": true,
  "outputAddress": true,
  "outputStreet": true,
  "outputCity": true,
  "outputState": true,
  "outputPostalCode": true,
  "outputCountry": true,
  "outputLatitude": true,
  "outputLongitude": true,
  "outputTimezone": true,
  "outputRating": true,
  "outputReviewCount": true,
  "outputRawRanking": true,
  "outputRankingPosition": true,
  "outputRankingDenominator": true,
  "outputRankingCategory": true,
  "outputRankingString": true,
  "outputPriceLevel": true,
  "outputPriceRange": true,
  "outputIsClosed": true,
  "outputIsLongClosed": true,
  "outputMainImage": true,
  "outputPhotoCount": true,
  "outputTags": true,
  "outputNeighborhoods": true,
  "outputNearestMetroStations": true,
  "outputAncestorLocations": true,
  "outputParentDisplayName": true,
  "outputAwards": true,
  "outputWriteReviewUrl": true,
  "outputOwnerWebsite": true,
  "outputHotelClass": true,
  "outputHotelClassAttribution": true,
  "outputAmenities": true,
  "outputNumberOfRooms": true,
  "outputOffers": true,
  "outputRoomTips": true,
  "outputCheckInDate": true,
  "outputCheckOutDate": true,
  "outputCuisines": true,
  "outputMealTypes": true,
  "outputDishes": true,
  "outputDietaryRestrictions": true,
  "outputEstablishmentTypes": true,
  "outputFeatures": true,
  "outputHours": true,
  "outputMenuWebUrl": true,
  "outputOrderOnlineUrl": true,
  "outputSubtype": true,
  "outputBooking": true,
  "outputOfferGroup": true,
  "outputProductCode": true,
  "outputDuration": true,
  "outputPriceFrom": true,
  "outputBookingUrl": true
}
```

# Actor output Schema

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

One row per place, every enabled column.

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

Name, type, rating, city, and contact at a glance.

## `contacts` (type: `string`):

Email, phone, website, and social profiles for outreach.

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

Address, neighborhood, and coordinates.

## `quality` (type: `string`):

Ratings, review counts, Tripadvisor ranking, and price level.

## `details` (type: `string`):

Hotel, restaurant, attraction, and tour specific columns.

## `enrichments` (type: `string`):

Add-on columns: lead score, ad activity, LinkedIn, and registry.

## `reviews` (type: `string`):

Review tags, Tripadvisor AI summary, and the collected reviews.

# 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 = {
    "searchQueries": [
        "sushi"
    ],
    "location": "Paris, France",
    "startUrls": [],
    "locationIds": []
};

// Run the Actor and wait for it to finish
const run = await client.actor("lurkapi/tripadvisor-email-leads-scraper-api").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 = {
    "searchQueries": ["sushi"],
    "location": "Paris, France",
    "startUrls": [],
    "locationIds": [],
}

# Run the Actor and wait for it to finish
run = client.actor("lurkapi/tripadvisor-email-leads-scraper-api").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 '{
  "searchQueries": [
    "sushi"
  ],
  "location": "Paris, France",
  "startUrls": [],
  "locationIds": []
}' |
apify call lurkapi/tripadvisor-email-leads-scraper-api --silent --output-dataset

```

## MCP server setup

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

```

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/dBnkaMICmvZng20CB/builds/jdMsEiboUL3O4YTs8/openapi.json
