# TourRadar Email Scraper (`leads-scraper/tourradar-email-scraper`) Actor

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

- **URL**: https://apify.com/leads-scraper/tourradar-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

### TourRadar Email Scraper

The TourRadar Email Scraper collects publicly indexed contact emails, account names and operator profile URLs connected to TourRadar listings, and writes them to an Apify dataset you can export as CSV, JSON or Excel.

The TourRadar Email Scraper is built for travel-tech vendors, tour aggregators recruiting supply, destination marketing organisations, travel PR teams and partnership managers who need travel trade contacts they can actually email.

TourRadar is a marketplace for multi-day, small-group and adventure tours. The businesses listed on it are independent tour operators running real itineraries, not single-activity tickets, which makes the TourRadar Email Scraper a useful starting point for B2B travel prospecting.

The TourRadar Email Scraper never logs in, never opens TourRadar itself, and never touches private data. Every row comes from public Google search results, parsed and filtered.

### Why TourRadar is a strong audience for supplier recruitment

Most travel marketplaces index products. TourRadar indexes operators. Its `/o/` pages are literally operator pages, which is why the TourRadar Email Scraper returns a decent share of rows with a usable handle.

That matters if you are building a tour operator contact database. A row with an operator handle is a company you can research, qualify and route to a salesperson. A row with only an email is a guess.

The commercial profile is good too: multi-day trips carry higher ticket prices than day tours, the operators run staffed booking desks, and many of them publish partnership addresses because they actively want trade business.

If you sell a booking engine, channel manager, reservation system or CRM, or you run an OTA doing supplier recruitment, these are the group tour operators you want in the pipeline, and the TourRadar Email Scraper is a sensible first pass at finding them.

Compare that with the [Viator Email Scraper](https://apify.com/leads-scraper/viator-email-scraper), which indexes single tour **products**. Viator tends to surface more emails per run but far less operator identity, because a product page rarely names the company behind it in a handle-shaped way.

Run both if you want coverage: use TourRadar for identity-rich adventure travel contacts and Viator for raw volume. The [GetYourGuide Email Scraper](https://apify.com/leads-scraper/getyourguide-email-scraper) and [Klook Email Scraper](https://apify.com/neuro-scraper/klook-email-scraper) cover the same day-tour territory in Europe and Asia-Pacific respectively.

### TourRadar Email Scraper features

Everything below is a real behaviour of the Actor, not a roadmap item.

| Feature | What it does |
|---|---|
| Google SERP parsing | Builds `site:tourradar.com` queries and parses each result block structurally, not by CSS class names |
| Query expansion | Runs base, quoted and `intitle:` variants plus one variant per query modifier; base queries run first |
| Domain filter | Keeps only emails ending in the domains you list, with boundary-correct matching |
| Global deduplication | One row per unique email across every query and every page of 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 |
| Soft-wrap repair | Drops a hit that is only the tail of another email found in the same block |
| Concurrency | An `asyncio` worker pool with a shared stop signal once `maxEmails` is reached |
| Retries and block detection | Up to 3 attempts per page with exponential backoff and a fresh proxy session; CAPTCHA, "unusual traffic" and consent pages are detected and retried |
| Re-queueing | 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, and saved on `PERSIST_STATE`, `MIGRATING` and `ABORTING` |
| Fallback parser | If Google's markup changes, the run degrades to "emails without account details" rather than "no emails" |
| Run summary | Logs pages fetched, blocked pages, retries and emails per page |

### How the TourRadar Email Scraper works

The pipeline is deliberately simple, and understanding it explains both the strengths and the limits of the TourRadar Email Scraper.

1. It reads your input: keywords, optional location, email domains and run limits.
2. It builds Google search queries with the `site:` operator against `tourradar.com`, for example `site:tourradar.com "tour operator" "@gmail.com" "Peru"`.
3. It fetches Google result pages through the Apify GOOGLE\_SERP proxy using async `aiohttp` requests.
4. It parses each result block structurally by locating the `<h3>` title and then the smallest surrounding block.
5. It extracts emails from that block text with a domain-filtered regex.
6. It deduplicates globally and pushes each lead to the dataset immediately, so partial results survive an abort.

There is no browser, no JavaScript rendering, no authentication and no cookies. The TourRadar Email Scraper is a Google reader with a very specific filter, and everything it returns was already public.

### TourRadar Email Scraper input fields

These are the only inputs the Actor accepts, with the defaults it ships with.

| Field | Type | Default | Meaning |
|---|---|---|---|
| `keywords` | array (required) | `["tour operator", "adventure tours"]` | Search terms describing the accounts 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 TourRadar Email Scraper

This is a realistic starting configuration for travel lead generation using the platform defaults.

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

The `partnerships` and `bookings` modifiers are the ones that matter most for supplier recruitment, because those are the words operators put next to the address they actually want the trade to use.

### Output fields from the TourRadar Email Scraper

Every dataset item written by the TourRadar Email Scraper has 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 snippet-only rows |
| `username` | URL-safe handle when the platform exposes one; otherwise `null` |
| `profileUrl` | Canonical `https://www.tourradar.com/o/{username}` 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, for example `@gmail.com` |
| `possiblyTruncated` | `true` when Google's snippet ellipsis touched the email |
| `foundAt` | ISO 8601 UTC timestamp |

### JSON output example from the TourRadar Email Scraper

Two of these rows carry an operator handle and a real `/o/` profile URL. The third shows what a snippet-only row from the TourRadar Email Scraper honestly looks like.

```json
[
  {
    "network": "TourRadar",
    "keyword": "tour operator",
    "query": "site:tourradar.com \"tour operator\" \"@gmail.com\" \"Cusco\"",
    "title": "Andes Trail Expeditions - Tour Operator on TourRadar",
    "accountName": "Andes Trail Expeditions",
    "fullName": "Andes Trail Expeditions",
    "username": "andes-trail-expeditions",
    "profileUrl": "https://www.tourradar.com/o/andes-trail-expeditions",
    "url": "https://www.tourradar.com/o/andes-trail-expeditions",
    "description": "Small-group trekking and multi-day adventures in Peru. Bookings: andestrail.bookings@gmail.com",
    "email": "andestrail.bookings@gmail.com",
    "emailDomain": "@gmail.com",
    "possiblyTruncated": false,
    "foundAt": "2026-02-11T09:24:51Z"
  },
  {
    "network": "TourRadar",
    "keyword": "adventure tours",
    "query": "site:tourradar.com intitle:\"adventure tours\" \"@yahoo.com\" partnerships",
    "title": "Sierra Wild Adventures | Adventure Tours",
    "accountName": "Sierra Wild Adventures",
    "fullName": "Sierra Wild Adventures",
    "username": "sierra-wild-adventures",
    "profileUrl": "https://www.tourradar.com/o/sierra-wild-adventures",
    "url": "https://www.tourradar.com/o/sierra-wild-adventures",
    "description": "Group tours and guided hiking itineraries. Trade partnerships: sierrawild.partners@yahoo.com",
    "email": "sierrawild.partners@yahoo.com",
    "emailDomain": "@yahoo.com",
    "possiblyTruncated": false,
    "foundAt": "2026-02-11T09:26:02Z"
  },
  {
    "network": "TourRadar",
    "keyword": "adventure tours",
    "query": "site:tourradar.com \"adventure tours\" \"@gmail.com\" contact",
    "title": "Adventure Tours in Nepal - 12 Day Itinerary",
    "accountName": "Adventure Tours in Nepal",
    "fullName": "",
    "username": null,
    "profileUrl": "",
    "url": "https://www.tourradar.com/",
    "description": "12 day trekking itinerary. Contact for group departures: himalaya.trips@gmail.com ...",
    "email": "himalaya.trips@gmail.com",
    "emailDomain": "@gmail.com",
    "possiblyTruncated": true,
    "foundAt": "2026-02-11T09:27:44Z"
  }
]
```

The third row is not a failure. Google simply did not expose a handle in that result, so the Actor reports `null` rather than guessing a URL.

### Use cases for the TourRadar Email Scraper

This Actor suits any team whose customer is an independent multi-day operator.

| Audience | What they do with the data |
|---|---|
| Booking engine and reservation system vendors | Build a tour operator contact database of multi-day operators and pitch software that fits itinerary-based inventory |
| Channel managers and connectivity providers | Reach group tour operators who need distribution across several marketplaces at once |
| OTAs and tour aggregators | Supplier recruitment: find independent operators who are not yet listed on your platform |
| Destination marketing organisations | Assemble adventure travel contacts operating in a specific region for campaigns and famil trips |
| Destination management companies | Identify inbound partners already selling multi-day product in your destination |
| Travel PR and media teams | Build travel trade contacts lists for press releases, award nominations and product launches |
| Affiliate and partnership managers | Find operators publishing a partnerships address, which signals appetite for B2B travel prospecting |
| Insurance, payments and gear suppliers | Target higher-ticket adventure operators whose customers travel for a week or more |

### Targeting tips for the TourRadar Email Scraper

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

`location` is a phrase appended to every query. Destination-led prospecting works well here: try `Patagonia`, `Kilimanjaro`, `Vietnam` or `Iceland` rather than a head office city, because operator pages describe where the trips go.

`countryCode` steers the search proxy, which changes which results Google considers locally relevant. Set `GB` or `DE` for European inbound operators, `US` for North American outbound sellers.

Keep keywords narrow. `adventure tours` plus a destination beats a broad sweep, and narrow keywords give you a multi-day tour operator email list you can actually segment.

Add your own modifiers if you have a niche. Words like `trekking`, `expedition`, `cycling` or `safari` combine cleanly with the defaults.

Widen `customDomains` beyond the two defaults if you want business addresses too. Many operators publish a role address on their own domain, and the TourRadar Email Scraper will keep it if you list that domain.

For adjacent supply, the [Tripadvisor Attractions Email Scraper](https://apify.com/leads-scraper/tripadvisor-attractions-email-scraper) covers attraction operators. If you only need one specific brand, the [G Adventures Email Scraper](https://apify.com/neuro-scraper/g-adventures-email-scraper) and [Intrepid Travel Email Scraper](https://apify.com/neuro-scraper/intrepid-travel-email-scraper) are single-operator tools rather than marketplace tools.

### Limitations of the TourRadar Email Scraper

Read these before you plan a campaign. They are structural, not bugs.

- The TourRadar Email Scraper only finds accounts whose email is publicly visible in Google's index. If nobody published it, it is not there.
- Google caps a single query at roughly 300 results. That is exactly why query expansion exists in the TourRadar Email Scraper and why leaving `expandQueries` on is recommended.
- `possiblyTruncated: true` means Google's snippet ellipsis may have cut the email short. Verify those rows before sending.
- The TourRadar Email Scraper 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. Rows without one still carry `accountName` and often `fullName`. This is a Google limitation, not a bug.
- Results vary with keywords, domains and location. No volume is guaranteed.

### Responsible use and GDPR

The addresses the TourRadar Email Scraper collects are business contacts that operators published deliberately so that travellers and trade partners can reach their booking desk.

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

Honour opt-outs immediately and keep a record of them. Keep a lawful basis for your outreach under GDPR, CAN-SPAM and any local rules that apply, and do not use these contacts for consumer marketing.

Data collected with the TourRadar Email Scraper is for legitimate B2B travel prospecting, not for resale as a bulk consumer list.

### TourRadar Email Scraper FAQ

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

In a measured live run, roughly every 10 parsed Google result blocks produced about 5 identities, 5 profile URLs and 6 unique emails. That is a moderate but well balanced return: roughly half of rows carry an operator handle, and the email rate is among the better ones in this family of Actors. It is not a volume promise, and your numbers will move with keywords, domains and location.

#### Why does the TourRadar Email Scraper get better operator identity than the Viator one?

Because TourRadar's `/o/` pages are operator pages. The [Viator Email Scraper](https://apify.com/leads-scraper/viator-email-scraper) indexes individual tour products, so it tends to return more emails but much less company identity.

#### Does the TourRadar Email Scraper log into TourRadar?

No. It builds Google `site:` queries, reads the public result pages through the Apify GOOGLE\_SERP proxy and parses them. There is no login, no cookies, no browser and no platform API.

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

It is a marketplace. The listings belong to many independent tour operators, which is what makes it useful for supplier recruitment rather than research into one brand.

#### Why is `username` null on some rows?

Google did not expose a handle in that result block. The TourRadar Email Scraper reports `null` and an empty `profileUrl` rather than fabricating a URL that may not resolve.

#### Can the TourRadar Email Scraper collect business-domain emails instead of Gmail and Yahoo?

Yes. Put any domains you want into `customDomains`, with or without the leading `@`. The domain filter is boundary-correct, so `@gmail.com` will not match `@gmail.company`.

#### What is the best keyword set for a multi-day tour operator email list?

Start with the defaults, `tour operator` and `adventure tours`, then add an activity word such as `trekking`, `safari` or `expedition`. Narrow keywords give the TourRadar Email Scraper cleaner blocks to parse and give you a segment you can write to properly.

#### How do I get more travel trade contacts out of one TourRadar Email Scraper run?

Leave `expandQueries` on, raise `maxEmails`, add destination phrases in `location`, and add niche words to `queryModifiers`. Each expansion is a separate query, so it sidesteps Google's per-query ceiling.

#### What happens if a TourRadar Email Scraper run is interrupted?

State is saved in the key-value store keyed by a hash of your input, and rows are pushed to the dataset as they are found. A migrated or resumed run picks up rather than starting over.

#### Does the TourRadar Email Scraper deduplicate?

Yes, globally. One row per unique email address across every query and page in the run.

#### Can I export the results?

Yes. The TourRadar Email Scraper writes to a standard Apify dataset, which exports to CSV, JSON, XML or Excel from the console, or streams through the API into your CRM for travel lead generation.

#### Which other Actors pair well with the TourRadar Email Scraper?

For day tours and activities, the [Klook Email Scraper](https://apify.com/neuro-scraper/klook-email-scraper) covers Asia-Pacific and the [GetYourGuide Email Scraper](https://apify.com/leads-scraper/getyourguide-email-scraper) covers Europe. Running them alongside the TourRadar Email Scraper gives you both multi-day and single-activity supply.

#### Is the TourRadar Email Scraper affiliated with TourRadar?

No. It is an independent tool that reads public Google search results and is not connected to, endorsed by or supported by the platform.

### Related Actors

Actors built on the same engine as the TourRadar Email Scraper, for travel and hospitality lead generation.

| Actor | What it collects |
|---|---|
| [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 |
| [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 |
| [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 |
| [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 |
| [Grubhub Email and Phone Number Scraper](https://apify.com/neuro-scraper/grubhub-email-and-phone-number-scraper) | Emails and phone numbers from Grubhub |
| [Hostelworld Email and Phone Number Scraper](https://apify.com/neuro-scraper/hostelbookers-email-and-phone-number-scraper) | Emails and phone numbers from Hostelworld |

### Leave a review

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

## `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",
    "adventure 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 TourRadar 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",
        "adventure 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/tourradar-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",
        "adventure 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/tourradar-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",
    "adventure tours"
  ],
  "location": "",
  "customDomains": [
    "@gmail.com",
    "@yahoo.com"
  ],
  "countryCode": "",
  "queryModifiers": [
    "email",
    "contact",
    "bookings",
    "group tours",
    "partnerships"
  ]
}' |
apify call leads-scraper/tourradar-email-scraper --silent --output-dataset

```

## MCP server setup

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