# Viator Email Scraper (`leads-scraper/viator-email-scraper`) Actor

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

- **URL**: https://apify.com/leads-scraper/viator-email-scraper.md
- **Developed by:** [Leads Scraper](https://apify.com/leads-scraper) (community)
- **Stats:** 2 total users, 1 monthly users, 100.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

### Viator Email Scraper

The Viator Email Scraper collects publicly indexed contact emails connected to Viator tour pages and turns them into a clean, deduplicated dataset you can export as CSV, JSON or Excel.

It is built for travel-tech vendors, channel managers, destination marketing teams and partnership managers who need to reach the tours-and-activities long tail at scale.

Viator is the largest tours and activities marketplace on the web, and Google indexes an enormous number of its pages. That indexed surface is what the Viator Email Scraper reads.

One thing to be clear about up front: Viator indexes tour product pages rather than operator profiles, so most rows carry an operator email without a supplier handle. You get the email, but often not a tidy account identity next to it.

The Viator Email Scraper never logs in, never opens viator.com, and never touches private data. Every field it returns comes from public Google search results - titles, snippets and site labels - fetched through the Apify GOOGLE\_SERP proxy.

If your priority is a handle-keyed supplier list rather than raw email volume, read the limitations section before you run this Actor. It says so plainly.

### Why use the Viator Email Scraper for tours and activities

Viator sits at the top of the tours and activities marketplace funnel, which means its indexed pages cover thousands of small operators who never appear in curated travel trade directories.

That makes the Viator Email Scraper the strongest tool in this family for raw email volume when you are building a tour operator email list for travel lead generation.

The trade-off is identity. Because indexed pages are products, not supplier profiles, this Actor is a weak choice for assembling a clean tour operator contact database keyed by handle.

If you need cleaner operator attribution, the [TourRadar Email Scraper](https://apify.com/leads-scraper/tourradar-email-scraper) and the [Klook Email Scraper](https://apify.com/neuro-scraper/klook-email-scraper) expose operator identity more consistently.

Many teams run the Viator Email Scraper for reach and one of those two for structure, then merge the results on the email address.

Used that way, the Viator Email Scraper is the volume engine of a travel lead generation stack rather than the system of record.

A second reason teams reach for Viator specifically is coverage breadth. A single destination page set can span walking guides, cooking classes, boat charters and airport transfers, which is far wider than any curated travel trade contacts directory covers.

That breadth is what makes it useful for OTA supplier outreach in destinations where you have no existing supply relationships and no local sales presence.

### Viator Email Scraper features

Only real, implemented behaviour is listed here. Everything in this table is something the Viator Email Scraper genuinely does on every run.

| Feature | What it does |
|---|---|
| Google SERP parsing | Locates the `<h3>` title in each result block, then the smallest surrounding block - no dependency on Google CSS class names |
| Domain filter | Keeps only emails ending in the domains you list in `customDomains` |
| Query expansion | Runs base, quoted and `intitle:` variants, plus one variant per query modifier; base queries run first |
| Global deduplication | Every email is deduplicated across all queries and all pages in the run |
| Email normalisation | Understands `name [at] domain [dot] com`, `name (at) domain`, `name @ domain.com`, `domain .com`, zero-width characters and the full-width at sign |
| 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 |
| Concurrency | An `asyncio` worker pool with a shared stop signal on `maxEmails` |
| Retries | Up to 3 attempts per page with exponential backoff and a fresh proxy session per request |
| Block detection | CAPTCHA, "unusual traffic" and consent pages are detected and retried, not counted as empty |
| Re-queue | Blocked or failed queries are retried once at the end of the run |
| Resumable runs | State is stored in the key-value store keyed by an input hash, saving on `PERSIST_STATE`, `MIGRATING` and `ABORTING` |
| Fallback parser | If Google's markup changes, a whole-page parser degrades the run to "emails without account details" instead of "no emails" |
| Streaming output | Each lead is pushed to the dataset immediately as it is found |
| Run summary | Logs pages fetched, blocked pages, retries and emails per page |

### How the Viator Email Scraper works

The pipeline is short and entirely search-based. There is no browser, no JavaScript rendering, no authentication and no cookies.

1. The Viator Email Scraper reads your input: keywords, location, email domains and run limits.
2. It builds Google queries with the `site:` operator against `viator.com`, for example `site:viator.com tour operator "@gmail.com" "Rome"`.
3. It fetches Google result pages through the Apify GOOGLE\_SERP proxy using async `aiohttp` requests.
4. It parses each result block structurally by finding the `<h3>` title and the smallest surrounding block.
5. It extracts emails from the block text with a domain-filtered regex.
6. It deduplicates globally and pushes each lead straight to the Apify dataset.

Because step 2 is the whole targeting mechanism, your keywords, modifiers and location phrase do far more for Viator Email Scraper results than any other setting.

Nothing else happens. The Viator Email Scraper is a Google SERP reader with a strict domain filter, not a crawler of viator.com itself.

### Viator Email Scraper input fields

The Viator Email Scraper takes nine inputs. Only `keywords` is required; every other field has a working default tuned for Viator.

| Field | Type | Default | Meaning |
|---|---|---|---|
| `keywords` | array (required) | `["tour operator", "day tours"]` | Search terms describing the operators you want |
| `location` | string | `""` | Optional location phrase added to every query |
| `customDomains` | array | `["@gmail.com","@yahoo.com"]` | Only emails on these domains are kept; the `@` is optional |
| `maxEmails` | integer 1-10000 | `20` | Stop after this many unique emails |
| `countryCode` | string | `""` | Two-letter country for the search proxy (US, GB, DE...) |
| `expandQueries` | boolean | `true` | Search each keyword x domain pair in several phrasings |
| `queryModifiers` | array | `["email","contact","bookings","group tours","partnerships"]` | 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 |

### JSON input example for the Viator Email Scraper

A destination-led Viator Email Scraper run aimed at day tour suppliers in Portugal:

```json
{
  "keywords": ["tour operator", "day tours"],
  "location": "Lisbon",
  "customDomains": ["@gmail.com", "@yahoo.com"],
  "maxEmails": 200,
  "countryCode": "PT",
  "expandQueries": true,
  "queryModifiers": ["email", "contact", "bookings", "group tours", "partnerships"],
  "maxPagesPerQuery": 30,
  "maxConcurrency": 5
}
```

### Viator Email Scraper output fields

Every dataset item produced by the Viator Email Scraper carries all fourteen fields below.

| 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 product-style titles |
| `username` | URL-safe handle when Viator 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 counters |
| `email` | Lower-cased email address |
| `emailDomain` | The matched domain, such as `@gmail.com` |
| `possiblyTruncated` | `true` when Google's snippet ellipsis touched the email |
| `foundAt` | ISO 8601 UTC timestamp |

### JSON output example from the Viator Email Scraper

These rows are shaped the way real Viator Email Scraper output actually looks - two with no handle at all, one where Google exposed a supplier path.

```json
[
  {
    "network": "Viator",
    "keyword": "tour operator",
    "query": "site:viator.com tour operator \"@gmail.com\" \"Lisbon\"",
    "title": "Lisbon Full-Day Sintra and Cascais Small-Group Tour",
    "accountName": "Lisbon Full-Day Sintra and Cascais Small-Group Tour",
    "fullName": "",
    "username": null,
    "profileUrl": "",
    "url": "",
    "description": "Small-group day tours from Lisbon. Group bookings: sintratours.lx@gmail.com",
    "email": "sintratours.lx@gmail.com",
    "emailDomain": "@gmail.com",
    "possiblyTruncated": false,
    "foundAt": "2025-05-14T09:12:44Z"
  },
  {
    "network": "Viator",
    "keyword": "day tours",
    "query": "site:viator.com intitle:\"day tours\" \"@yahoo.com\"",
    "title": "Douro Valley Wine Day Tour with Lunch",
    "accountName": "Douro Valley Wine Day Tour with Lunch",
    "fullName": "",
    "username": null,
    "profileUrl": "",
    "url": "",
    "description": "Private and group tours in the Douro. Partnerships enquiries: dourotrips@yahoo.com",
    "email": "dourotrips@yahoo.com",
    "emailDomain": "@yahoo.com",
    "possiblyTruncated": true,
    "foundAt": "2025-05-14T09:13:07Z"
  },
  {
    "network": "Viator",
    "keyword": "tour operator",
    "query": "site:viator.com tour operator contact \"@gmail.com\" \"Lisbon\"",
    "title": "Oporto Walkers - Tours & Activities",
    "accountName": "Oporto Walkers",
    "fullName": "Oporto Walkers",
    "username": "oporto-walkers",
    "profileUrl": "https://www.viator.com/tours/oporto-walkers",
    "url": "https://www.viator.com/tours/oporto-walkers",
    "description": "Walking day tours and city experiences. Bookings: oportowalkers@gmail.com",
    "email": "oportowalkers@gmail.com",
    "emailDomain": "@gmail.com",
    "possiblyTruncated": false,
    "foundAt": "2025-05-14T09:14:22Z"
  }
]
```

### Viator Email Scraper use cases

These are the teams that get the most out of a Viator Email Scraper run, and what they typically do with the dataset.

| Audience | What they do with the data |
|---|---|
| Travel-tech vendors | Pitch booking engines, ticketing and reservation systems into the tours and activities marketplace long tail |
| Channel managers | Recruit small suppliers who are already distributing on an OTA but not connected to a channel manager |
| OTA and aggregator supply teams | Run OTA supplier outreach in destinations where inventory is thin |
| Destination marketing organisations | Build a travel agency email list of operators active in their region for destination marketing campaigns |
| Destination management companies | Find local ground operators for group tours and bespoke itineraries |
| Travel PR and media teams | Assemble travel trade contacts for launches, press trips and campaign invitations |
| Affiliate and partnership managers | Prospect operators for commission and co-marketing deals |
| Market researchers | Sample how many operators in a destination publish a direct booking email |

For neighbouring supply pools, teams often pair this Actor with the [GetYourGuide Email Scraper](https://apify.com/leads-scraper/getyourguide-email-scraper) for Europe and the [Tripadvisor Attractions Email Scraper](https://apify.com/leads-scraper/tripadvisor-attractions-email-scraper) for attraction operators.

Accommodation-side prospecting is better served by the [Booking.com Email Scraper](https://apify.com/leads-scraper/booking-com-email-scraper) or the [Airbnb Email Scraper](https://apify.com/leads-scraper/airbnb-email-scraper).

### Targeting tips for the Viator Email Scraper

`location` and `countryCode` are the two levers that change Viator Email Scraper results most, and they do different jobs.

`location` is a phrase appended to every query, so it filters what Google matches. `countryCode` steers the search proxy, so it changes which regional index you are reading.

Destination-led prospecting works best: run the Viator Email Scraper once per city rather than once per country. "Kyoto" and "Cusco" outperform "Japan" and "Peru".

Pair the two when the destination is ambiguous - `location: "Valencia"` with `countryCode: "ES"` keeps you out of Venezuelan results.

Keep `expandQueries` on. Google caps a single query at roughly 300 results, and the modifiers `bookings`, `partnerships` and `group tours` reach snippets that a bare keyword query never surfaces.

Narrow keywords beat broad ones. "private guide", "shore excursion", "food tour" and "airport transfer" each pull a distinct slice of the tour operator email list.

Add local-language domains to `customDomains` when you work outside the anglosphere. Many operators publish on regional free mail providers rather than Gmail.

Raise `maxEmails` before raising `maxConcurrency`. The stop signal is shared, so a higher cap simply lets more queries contribute.

If you are assembling a travel agency email list alongside operator contacts, add reseller-flavoured keywords such as "incoming agency" and "DMC" to the same run.

Finally, keep destination runs separate in the dataset. Merging later is easy; splitting a mixed tour operator email list by market afterwards is not.

### Viator Email Scraper limitations

Read these before you plan a campaign around this Actor.

- Viator indexes tour product pages rather than operator profiles, so most rows carry an operator email without a supplier handle. Expect a strong email column and a sparse identity column.
- The Viator Email Scraper only finds accounts whose email is publicly visible in Google's index. Emails hidden behind Viator's contact forms are not reachable.
- Google caps a single query at roughly 300 results. That cap is exactly why query expansion exists and why turning it off shrinks a run sharply.
- `possiblyTruncated: true` means Google's snippet ellipsis may have cut the email. Verify those rows before you send anything.
- The Actor requires the Apify GOOGLE\_SERP proxy and cannot run without Apify proxy credentials.
- Free Apify plans are capped at 100 emails per run. Paid plans are uncapped.
- `username` and `profileUrl` are only populated when Google exposes a handle in the result. That is a Google limitation, not a bug in the Viator Email Scraper.
- Results vary with keywords, domains and location. No volume is promised.

### Responsible use and GDPR

The emails the Viator Email Scraper surfaces are business contacts that operators published deliberately so travellers and trade partners can reach them about bookings and partnerships.

Treat them that way. Identify yourself and your company, say plainly why you are writing, and make the relevance to their business obvious in the first two lines.

Honour every opt-out immediately and permanently, and keep an unsubscribe path in every message.

Maintain a lawful basis for your processing under GDPR, and comply with CAN-SPAM, PECR or whichever regime covers your recipients. Legitimate interest is a defensible basis for relevant B2B travel trade contacts, but you must document it.

### Viator Email Scraper FAQ

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

In a measured live run, roughly every 10 parsed Google result blocks produced about 1 identity, 1 profile URL and 6 unique emails. Email yield is solid; account identity is thin. Most rows arrive with an email and little supplier attribution.

#### Why do so many rows have `username: null` and an empty `profileUrl`?

Because Viator indexes tour product pages rather than operator profiles. Google's result exposes the product title, not a supplier handle, so there is nothing for the Actor to key on.

#### Can the Viator Email Scraper build a handle-keyed supplier list?

Not reliably. For cleaner operator identity use the [TourRadar Email Scraper](https://apify.com/leads-scraper/tourradar-email-scraper) or the [Klook Email Scraper](https://apify.com/neuro-scraper/klook-email-scraper), then join their rows to these on the email address.

#### Does the Viator Email Scraper log into Viator or use its API?

No. It reads publicly indexed Google search results through the Apify GOOGLE\_SERP proxy. There is no login, no browser, no cookies and no platform API.

#### Which email domains should I give the Viator Email Scraper?

Start with the defaults `@gmail.com` and `@yahoo.com`, which catch a large share of independent operators, then add regional providers and any operator-owned domains you already know.

#### Why does the Viator Email Scraper need the Apify proxy?

All queries are fetched through the GOOGLE\_SERP proxy. Without Apify proxy credentials the Actor cannot fetch a single result page.

#### What does `possiblyTruncated` mean?

Google's snippet was cut by an ellipsis at or near the email, so the address may be incomplete. Filter those rows into a separate verification list.

#### Can I resume an interrupted Viator Email Scraper run?

Yes. State is saved in the key-value store keyed by a hash of your input, and it persists on Apify's `PERSIST_STATE`, `MIGRATING` and `ABORTING` events.

#### Will a Google layout change break the Viator Email Scraper?

Parsing is structural rather than class-name based, and a whole-page fallback parser exists. A layout change degrades output to emails without account details rather than to nothing.

#### How do I export Viator Email Scraper results?

The Apify dataset exports to CSV, JSON, Excel and XML, or you can pull rows through the Apify API into your CRM.

#### Is the Viator Email Scraper affiliated with Viator or Tripadvisor?

No. It is an independent Actor that reads public Google search results and has no connection to either company.

#### Is Viator a marketplace or a single operator?

It is a marketplace, and one of the largest in the tours and activities category, which is why the Viator Email Scraper reaches many independent suppliers rather than one brand.

#### Can I use this for destination marketing rather than sales?

Yes. Destination marketing organisations use the Viator Email Scraper to map which operators are actively selling a region before inviting them into campaigns or co-op programmes.

#### What is the best keyword strategy for a broad tour operator contact database?

Run several narrow keyword sets across many destinations instead of one broad set globally, then deduplicate. Broad keywords hit Google's per-query cap early and waste pages.

#### How should I scale a large travel lead generation project?

Run the Viator Email Scraper once per destination with a focused keyword set, raise `maxEmails`, then merge the destination datasets and deduplicate on `email` before importing to your tour operator contact database.

### Related Actors

Actors built on the same engine as the Viator Email Scraper, covering travel marketplaces, accommodation and hospitality platforms.

| Actor | What it collects |
|---|---|
| [Viator Email and Phone Number Scraper](https://apify.com/leads-scraper/viator-email-and-phone-number-scraper) | Emails and phone numbers from Viator |
| [Viator Phone Number Scraper](https://apify.com/leads-scraper/viator-phone-number-scraper) | Public phone numbers from Viator |
| [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 |
| [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 Restaurants Email Scraper](https://apify.com/leads-scraper/tripadvisor-restaurants-email-scraper) | Public contact emails from Tripadvisor |
| [Uber Eats Email Scraper](https://apify.com/leads-scraper/uber-eats-email-scraper) | Public contact emails from Uber Eats |
| [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 |
| [Delivery.com Email and Phone Number Scraper](https://apify.com/neuro-scraper/delivery-com-email-and-phone-number-scraper) | Emails and phone numbers from Delivery.com |
| [DoorDash Email and Phone Number Scraper](https://apify.com/leads-scraper/doordash-email-and-phone-number-scraper) | Emails and phone numbers from DoorDash |
| [EatStreet Email and Phone Number Scraper](https://apify.com/neuro-scraper/eatstreet-email-and-phone-number-scraper) | Emails and phone numbers from EatStreet |
| [G Adventures Email and Phone Number Scraper](https://apify.com/neuro-scraper/g-adventures-email-and-phone-number-scraper) | Emails and phone numbers from G Adventures |

### Leave a review

If the Viator 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.

# Actor input Schema

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

Search terms describing the Viator 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 Viator.

## `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": [
    "tour operator",
    "day tours"
  ],
  "location": "",
  "customDomains": [
    "@gmail.com",
    "@yahoo.com"
  ],
  "maxEmails": 20,
  "countryCode": "",
  "expandQueries": true,
  "queryModifiers": [
    "email",
    "contact",
    "bookings",
    "group tours",
    "partnerships"
  ],
  "maxPagesPerQuery": 30,
  "maxConcurrency": 5
}
```

# Actor output Schema

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

Records produced by Viator 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": [
        "tour operator",
        "day tours"
    ],
    "location": "",
    "customDomains": [
        "@gmail.com",
        "@yahoo.com"
    ],
    "countryCode": "",
    "queryModifiers": [
        "email",
        "contact",
        "bookings",
        "group tours",
        "partnerships"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("leads-scraper/viator-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": [
        "tour operator",
        "day tours",
    ],
    "location": "",
    "customDomains": [
        "@gmail.com",
        "@yahoo.com",
    ],
    "countryCode": "",
    "queryModifiers": [
        "email",
        "contact",
        "bookings",
        "group tours",
        "partnerships",
    ],
}

# Run the Actor and wait for it to finish
run = client.actor("leads-scraper/viator-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": [
    "tour operator",
    "day tours"
  ],
  "location": "",
  "customDomains": [
    "@gmail.com",
    "@yahoo.com"
  ],
  "countryCode": "",
  "queryModifiers": [
    "email",
    "contact",
    "bookings",
    "group tours",
    "partnerships"
  ]
}' |
apify call leads-scraper/viator-email-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,leads-scraper/viator-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/Bq1RFZKdeoRXT8fVt/builds/Go9tcvswNAgFoKZ4c/openapi.json
