# Klook Email Scraper (`neuro-scraper/klook-email-scraper`) Actor

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

- **URL**: https://apify.com/neuro-scraper/klook-email-scraper.md
- **Developed by:** [Neuro Scraper](https://apify.com/neuro-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

### Klook Email Scraper

The Klook Email Scraper collects publicly indexed contact emails connected to Klook activity and tour listings, together with the account name, handle and profile URL that Google shows next to them.

Klook is the Hong Kong-founded booking platform that dominates the Asia-Pacific tours and activities marketplace: attraction tickets, theme park passes, transfers, day tours and city passes across Japan, Korea, Taiwan, Singapore, Thailand, Hong Kong, Malaysia and Australia.

If you are doing APAC supplier recruitment, this is the Actor to reach for first. Think of the Klook Email Scraper as the Asia-Pacific counterpart to the [GetYourGuide Email Scraper](https://apify.com/leads-scraper/getyourguide-email-scraper), which covers the same ground in Europe.

It is built for travel-tech vendors, OTAs and aggregators recruiting supply, destination marketing organisations, destination management companies, travel PR teams and partnership managers who need a working tour operator email list rather than a scraped directory of names.

The Klook Email Scraper never logs in, never opens Klook itself and never touches private data. It builds Google `site:klook.com` queries, reads the public search results through the Apify GOOGLE\_SERP proxy and pulls out the emails that operators have deliberately published for bookings and partnership enquiries.

In our own measured run, the Klook Email Scraper was the strongest performer of the nine travel Actors in this family for account attribution. Details are in the FAQ, and nothing here is promised as a volume.

### Why the Klook Email Scraper suits APAC supplier recruitment

Klook listings expose an activity slug in the URL, and Google indexes it. That single detail is why the Klook Email Scraper returns near-complete account attribution where other travel platforms return a bare display name.

Practically, that means most rows arrive with a populated `username` and a matching `https://www.klook.com/en-US/activity/{username}/` profile URL, so your travel trade contacts land in the CRM already linked to the listing they came from.

For anyone building a pipeline of attraction ticket operators and day-tour suppliers across Asia, that link is the difference between a raw email and a qualified lead you can research in one click.

It also means the Klook Email Scraper output needs less manual cleanup before import than most Google-sourced travel lead generation data.

### Klook Email Scraper features

Every capability below is something the Klook Email Scraper actually does. Nothing is aspirational.

| Feature | What it does |
|---|---|
| Google SERP parsing | Reads Google result pages through the Apify GOOGLE\_SERP proxy, no browser and no JavaScript rendering |
| Structural block detection | Locates each `<h3>` title then the smallest surrounding block, instead of depending on Google's 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 or without the leading `@` |
| Global deduplication | One email is pushed once, 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 `＠` |
| 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 once `maxEmails` is reached |
| Retries and backoff | Up to 3 attempts per page with exponential backoff and a fresh proxy session per request |
| Block handling | CAPTCHA, "unusual traffic" and consent pages are detected and retried, not counted as empty |
| Re-queue pass | Blocked or failed queries are retried once at the end of the run |
| Resumable runs | State is kept in the key-value store keyed by an input hash, saved 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" rather than "no emails" |
| Immediate dataset writes | Each lead is pushed to the Apify dataset as it is found, ready for CSV, JSON or Excel export |
| Run summary | Logs pages fetched, blocked pages, retries and emails per page |

### How the Klook Email Scraper works

The pipeline is six steps, and it is the same on every run.

1. The Klook Email Scraper reads your input: keywords, location, email domains and limits.
2. It builds Google search queries with the `site:` operator against `klook.com`, for example `site:klook.com tour operator "@gmail.com" "Bangkok"`.
3. It fetches Google result pages asynchronously through the Apify GOOGLE\_SERP proxy using `aiohttp`.
4. It parses each result block structurally, finding the `<h3>` title and then the smallest block that surrounds it.
5. It extracts emails from the block text with a domain-filtered regex and normalises them.
6. It deduplicates globally and pushes each lead straight to the Apify dataset.

There is no login, no cookie jar, no headless browser and no Klook API call anywhere in that chain. Everything the Klook Email Scraper returns was already sitting in Google's public index.

### Klook Email Scraper input fields

| Field | Type | Default | Meaning |
|---|---|---|---|
| `keywords` | array (required) | `["tour operator", "activity"]` | Search terms (niche, job title, industry) |
| `location` | string | `""` | Optional location phrase added to every query |
| `customDomains` | array | `["@gmail.com","@yahoo.com"]` | Only emails on these domains are kept; `@` optional |
| `maxEmails` | integer 1-10000 | `20` | Stop after this many unique emails |
| `countryCode` | string | `""` | Two-letter country for the search proxy (US, GB, DE...) |
| `expandQueries` | boolean | `true` | Search each keyword x domain 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 |

Only `keywords` is required, so the Klook Email Scraper will run on defaults alone if you want a quick look at what the index holds.

The defaults for `keywords` and `queryModifiers` are tuned for Klook, which is why the modifiers read `bookings`, `group tours` and `partnerships` rather than generic sales words.

### JSON input example for the Klook Email Scraper

A realistic Singapore-focused Klook Email Scraper run for activity provider contacts:

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

Swap `location` for "Tokyo" and `countryCode` for `JP`, and the same Klook Email Scraper configuration becomes a Japanese day-tour prospecting run.

### Klook Email Scraper output fields

Every dataset item the Klook Email Scraper writes carries all fourteen fields below. There are no others.

| 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 (handle, display name, or similar) |
| `fullName` | Display name parsed from a profile-style title; empty for post captions |
| `username` | URL-safe handle when the platform exposes one; otherwise `null` |
| `profileUrl` | Canonical account URL when a handle is known; otherwise empty |
| `url` | Direct platform link when exposed, else the profile URL |
| `description` | Bio/caption snippet, cleaned of labels and engagement counters |
| `email` | Lower-cased email address |
| `emailDomain` | The matched domain (e.g. `@gmail.com`) |
| `possiblyTruncated` | `true` when Google's snippet ellipsis touched the email - verify before sending |
| `foundAt` | ISO 8601 UTC timestamp |

### JSON output example

Because Klook exposes an activity slug, rows from the Klook Email Scraper normally arrive with both `username` and `profileUrl` filled in.

```json
[
  {
    "network": "Klook",
    "keyword": "tour operator",
    "query": "site:klook.com tour operator \"@gmail.com\" \"Bangkok\"",
    "title": "Bangkok Grand Palace Guided Day Tour - Klook",
    "accountName": "bangkok-grand-palace-day-tour",
    "fullName": "Bangkok Grand Palace Guided Day Tour",
    "username": "bangkok-grand-palace-day-tour",
    "profileUrl": "https://www.klook.com/en-US/activity/bangkok-grand-palace-day-tour/",
    "url": "https://www.klook.com/en-US/activity/bangkok-grand-palace-day-tour/",
    "description": "Licensed Bangkok operator running daily guided temple tours. Group tours and reseller enquiries: bookings.bkkgrand@gmail.com",
    "email": "bookings.bkkgrand@gmail.com",
    "emailDomain": "@gmail.com",
    "possiblyTruncated": false,
    "foundAt": "2026-08-31T09:14:02Z"
  },
  {
    "network": "Klook",
    "keyword": "activity",
    "query": "site:klook.com activity partnerships \"@gmail.com\" \"Tokyo\"",
    "title": "Tokyo Bay Sunset Cruise Experience - Klook",
    "accountName": "tokyo-bay-sunset-cruise",
    "fullName": "Tokyo Bay Sunset Cruise Experience",
    "username": "tokyo-bay-sunset-cruise",
    "profileUrl": "https://www.klook.com/en-US/activity/tokyo-bay-sunset-cruise/",
    "url": "https://www.klook.com/en-US/activity/tokyo-bay-sunset-cruise/",
    "description": "Evening cruises departing Hinode Pier. Partnership and charter enquiries: partners.tokyobay@yahoo.com",
    "email": "partners.tokyobay@yahoo.com",
    "emailDomain": "@yahoo.com",
    "possiblyTruncated": true,
    "foundAt": "2026-08-31T09:16:41Z"
  },
  {
    "network": "Klook",
    "keyword": "tour operator",
    "query": "site:klook.com tour operator bookings \"@gmail.com\" \"Bali\"",
    "title": "Bali Ubud Waterfall and Rice Terrace Tour - Klook",
    "accountName": "bali-ubud-waterfall-tour",
    "fullName": "Bali Ubud Waterfall and Rice Terrace Tour",
    "username": "bali-ubud-waterfall-tour",
    "profileUrl": "https://www.klook.com/en-US/activity/bali-ubud-waterfall-tour/",
    "url": "https://www.klook.com/en-US/activity/bali-ubud-waterfall-tour/",
    "description": "Small-group Ubud day trips with private driver options. Booking desk: ubudwaterfall.trips@gmail.com",
    "email": "ubudwaterfall.trips@gmail.com",
    "emailDomain": "@gmail.com",
    "possiblyTruncated": false,
    "foundAt": "2026-08-31T09:21:18Z"
  }
]
```

### Use cases for the Klook Email Scraper

| Audience | What they do with the data |
|---|---|
| OTAs and aggregators recruiting supply | Build an APAC supplier recruitment shortlist of attraction ticket operators and day-tour providers to onboard |
| Travel-tech vendors | Travel-tech prospecting for booking engines, channel managers and reservation systems that lack Asia coverage |
| Destination marketing organisations | Assemble activity provider contacts by city before a campaign or trade mission |
| Destination management companies | Find ground operators in a new destination and open a rate conversation |
| Travel PR and media teams | Reach travel trade contacts directly for launches, press trips and product announcements |
| Affiliate and partnership managers | Travel lead generation for commission and reseller programmes across Asia-Pacific |
| Market researchers | Map the tours and activities marketplace in a country by keyword and location |

Whether the goal is travel-tech prospecting or straightforward supply onboarding, the workflow is the same: one destination per run, one clean export, one outreach list.

Pair the output with the [Viator Email Scraper](https://apify.com/leads-scraper/viator-email-scraper) or the [Tripadvisor Attractions Email Scraper](https://apify.com/leads-scraper/tripadvisor-attractions-email-scraper) when you want the same operator seen from a second marketplace.

### Targeting tips: location and countryCode are the real levers

Keywords get you into the right category. `location` and `countryCode` are what make a Klook Email Scraper run genuinely useful, because Klook supply is so heavily concentrated in Asia-Pacific.

Set `countryCode` to `SG`, `HK`, `JP`, `TW`, `TH`, `MY` or `AU` to bias Google's index toward that market. Set `location` to a city phrase such as "Tokyo", "Bangkok", "Bali" or "Seoul" and it is appended to every query.

Run one destination at a time. Ten focused city runs produce a cleaner tour operator email list than one broad regional sweep, and the resumable state means you can stop and restart each one.

Widen `customDomains` beyond `@gmail.com` and `@yahoo.com` if you want provider-owned domains, since many established operators publish a company address rather than a free mailbox.

Leave `expandQueries` on. Google caps a single query at roughly 300 results, and expansion is the mechanism that gets the Klook Email Scraper past that ceiling.

For neighbouring markets, run the [Traveloka Email Scraper](https://apify.com/leads-scraper/traveloka-email-scraper) for Southeast Asian travel supply and the **OpenRice Email Scraper** when your campaign also needs food and dining venues in Hong Kong and Taiwan.

### Limitations of the Klook Email Scraper

These are real constraints. Read them before you plan a campaign.

- The Klook Email Scraper only finds accounts whose email is publicly visible in Google's index. If nobody published it, no tool reading Google can retrieve it.
- Google caps a single query at roughly 300 results. That cap is exactly why query expansion exists and why it is on by default.
- `possiblyTruncated: true` means Google's snippet ellipsis may have cut the email short. Verify those rows before you send anything.
- The Actor requires the Apify GOOGLE\_SERP proxy. It 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. Klook attribution is near-complete in practice, but on any platform Google can show only a display name, and those rows carry `accountName` and `fullName` with an empty `username` and `profileUrl`. That is a Google limitation, not a bug.
- Results vary with keywords, domains and location. No volume is promised.

### Responsible use and GDPR

The addresses the Klook Email Scraper collects are business contacts that operators published deliberately so travellers, agents and partners can reach them about bookings and partnerships.

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 permanently, keep a lawful basis under GDPR and CAN-SPAM, and do not repurpose travel trade contacts for unrelated consumer marketing.

Used that way, the Klook Email Scraper is a research and outreach tool for the travel trade, not a bulk mailing list.

### Klook Email Scraper FAQ

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

In a measured live run, roughly every 10 parsed Google result blocks produced about 10 identities, 10 profile URLs and 5 unique emails. That was the strongest result of the nine travel Actors in this family - near-complete account attribution plus a solid email rate. Your own numbers will still move with keywords, domains and location.

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

No. It never logs in, never opens Klook's website and never uses a Klook API. It reads Google search results through the Apify GOOGLE\_SERP proxy.

#### Why does the Klook Email Scraper give better attribution than other travel Actors?

Klook activity URLs contain a slug that Google indexes, so the Actor can reconstruct a `https://www.klook.com/en-US/activity/{username}/` profile URL for most rows.

#### Which regions does the Klook Email Scraper cover best?

Asia-Pacific. Klook's supply is concentrated in Japan, Korea, Taiwan, Singapore, Thailand, Hong Kong, Malaysia and Australia. For European supply, use the [GetYourGuide Email Scraper](https://apify.com/leads-scraper/getyourguide-email-scraper) instead.

#### Can I restrict the Klook Email Scraper to my own company domains?

Yes. Put any domains you want into `customDomains`, with or without the leading `@`. Only matching emails are kept.

#### What does `possiblyTruncated` mean?

Google's snippet ended with an ellipsis that touched the email, so the address may be incomplete. Check those rows manually before adding them to a sequence.

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

Because Google did not expose a handle for that result. It happens across every platform in this family. Those rows still carry `accountName`, `fullName`, the snippet and the email.

#### Do I need Apify proxy credentials?

Yes. The Klook Email Scraper depends on the Apify GOOGLE\_SERP proxy and cannot run without it.

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

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

#### How do I export the leads the Klook Email Scraper finds?

Every lead is pushed to the Apify dataset as it is found, so you can export to CSV, JSON, Excel or pull it through the Apify API into your CRM.

#### Should I run the Klook Email Scraper alongside other travel Actors?

Yes, if you want coverage rather than depth in one marketplace. The [TourRadar Email Scraper](https://apify.com/leads-scraper/tourradar-email-scraper) covers multi-day tour operators, and the [Viator Email Scraper](https://apify.com/leads-scraper/viator-email-scraper) covers global day tours, so the three together give broad travel lead generation reach.

#### Will query expansion slow the Klook Email Scraper down?

It runs more queries, so a run takes longer, but base queries execute first and `maxConcurrency` controls parallelism. It is the single biggest factor in how many activity provider contacts a run finds.

### Related Actors

More email scrapers built on the same engine as the Klook Email Scraper:

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

### Leave a review

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

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

```

## MCP server setup

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