# KAYAK Email Scraper (`email_scraper/kayak-email-scraper`) Actor

KAYAK Email Scraper extracts publicly listed KAYAK contact emails using targeted keywords, locations, and custom email domains. Build structured travel, hotel, accommodation, and car rental lead data with emails, titles, descriptions, and URLs.

- **URL**: https://apify.com/email\_scraper/kayak-email-scraper.md
- **Developed by:** [Email Scraper](https://apify.com/email_scraper) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.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

### KAYAK Email Scraper

The **KAYAK Email Scraper** extracts publicly displayed email addresses associated with KAYAK-related search results using targeted keywords and optional location filters. It is designed for users who need structured contact data for research, lead discovery, market analysis, travel-industry research, and dataset creation.

Provide one or more search keywords, optionally specify a country, state, or city, and choose the email domains you want to search for. The Actor processes each keyword and email-domain combination separately and returns matching email addresses together with the associated title, description, and URL.

Because results depend on publicly available information surfaced in search results, the number of emails collected can vary by keyword, domain, location, and the information available for the searched pages.

### What Is the KAYAK Email Scraper?

The KAYAK Email Scraper is an email extraction tool focused on discovering contact addresses associated with KAYAK pages that appear in search results.

Instead of manually searching many pages and copying contact details, you can provide a keyword such as `Hotel`, `Car Rental`, or another relevant travel-related term. The Actor searches for matching KAYAK content and identifies email addresses that correspond to the email-domain suffixes you selected.

The workflow is straightforward:

**Keywords + optional location + email domains → targeted search → email extraction → structured dataset**

The Actor also supports exclusion filters, allowing you to skip result snippets containing specific words or phrases.

### Key Features

| Feature                      | Description                                                                         | User Benefit                                                                 |
| ---------------------------- | ----------------------------------------------------------------------------------- | ---------------------------------------------------------------------------- |
| Keyword-based search         | Search KAYAK-related results using one or more keywords or queries.                 | Helps target specific topics, businesses, or travel-related segments.        |
| Location filtering           | Optionally narrow searches with a country, state, or city.                          | Useful for geographic research and regional targeting.                       |
| Custom email domains         | Search for selected email suffixes such as `@gmail.com` or `@yahoo.com`.            | Lets you focus collection on the address types that matter to your workflow. |
| Per-combination email target | `maxEmails` controls the target for each keyword + domain combination.              | Gives you predictable control over each search combination.                  |
| Exclude words                | Skip snippets containing selected words or phrases.                                 | Helps remove unwanted categories from the collected results.                 |
| Duplicate prevention         | Previously collected email addresses are tracked during the run.                    | Reduces duplicate email records in the dataset.                              |
| Incremental dataset output   | Records are pushed to the Apify dataset as they are collected.                      | Results become available progressively during processing.                    |
| Resume support               | Run progress is persisted so interrupted processing can resume from saved progress. | Helps reduce repeated work after an interruption.                            |

### What Data Can You Extract?

The Actor returns contact-oriented information associated with matching KAYAK search results. Each collected record can contain:

- **Network** — Identifies the source as `KAYAK.com`.
- **Keyword** — The search keyword responsible for the result.
- **Title** — The title associated with the matching search result.
- **Description** — The available result description or snippet.
- **URL** — The corresponding result URL.
- **Email** — The extracted email address matching one of your selected domain suffixes.

The primary value is the combination of an email address with its surrounding search-result context. This can help users review where a contact was discovered and what keyword produced the result.

### Why Use the KAYAK Email Scraper?

Manual collection can require repeated searching, opening pages, checking contact information, and recording data into a spreadsheet or database. The KAYAK Email Scraper turns that repetitive discovery process into a configurable Actor run.

Useful advantages include:

- Automated keyword-driven contact discovery.
- Structured records instead of manually copied information.
- Multiple keyword and domain combinations in one run.
- Optional geographic targeting.
- Filtering of unwanted result snippets.
- Incremental dataset collection for later analysis.

The Actor is particularly useful when your goal is to build a focused KAYAK-related contact dataset rather than manually inspect individual search results.

### KAYAK Email Scraper Input

The required input is `keywords`. The remaining settings are optional and can be used to refine collection.

| Field           | Type             | Required | Default                   | Description                                                                                     |
| --------------- | ---------------- | -------- | ------------------------- | ----------------------------------------------------------------------------------------------- |
| `keywords`      | Array of strings | Yes      | `["Hotel", "Car Rental"]` | Search keywords or queries to use for KAYAK-related email discovery.                            |
| `location`      | String           | No       | `""`                      | Optional country, state, city, or other geographic text used to narrow searches.                |
| `customDomains` | Array of strings | No       | `["@gmail.com"]`          | Email-domain suffixes to search for, such as `@gmail.com`, `@yahoo.com`, or `@outlook.com`.     |
| `maxEmails`     | Integer          | No       | `5`                       | Target number of emails for each keyword + domain combination. Accepted values are 1 to 10,000. |
| `excludeWords`  | Array of strings | No       | `[]`                      | Words or phrases that cause a matching result snippet to be skipped.                            |

For `keywords`, use specific search terms whenever possible. More focused phrases can make the search intent clearer than broad one-word queries.

For `customDomains`, include the suffix exactly as you want it searched, for example `@gmail.com`. Multiple domain suffixes can be supplied.

### Input Example

```json
{
  "keywords": [
    "Hotel",
    "Hotel Manager",
    "Boutique Hotel",
    "Travel Agency"
  ],
  "location": "United States",
  "customDomains": [
    "@gmail.com",
    "@yahoo.com",
    "@outlook.com"
  ],
  "maxEmails": 10,
  "excludeWords": [
    "crypto",
    "onlyfans"
  ]
}
```

### How to Use the KAYAK Email Scraper

1. Enter one or more KAYAK-relevant keywords in `keywords`.
2. Add a country, state, or city in `location` when geographic targeting is needed.
3. Select the email suffixes to search in `customDomains`.
4. Set `maxEmails` according to the desired target for each keyword + domain combination.
5. Add `excludeWords` when certain categories or phrases should be skipped.
6. Start the Actor and review the resulting dataset as records are collected.

A practical workflow is to begin with a small set of specific keywords and a modest email target. After reviewing the results, expand the keyword list, domains, or location filter when broader coverage is needed.

### Understanding Keyword and Domain Combinations

`maxEmails` is not a single shared target across all keyword and domain combinations.

For example, with three keywords and two email domains, the Actor processes six combinations:

- Keyword 1 + Domain 1
- Keyword 1 + Domain 2
- Keyword 2 + Domain 1
- Keyword 2 + Domain 2
- Keyword 3 + Domain 1
- Keyword 3 + Domain 2

With `maxEmails` set to `20`, the Actor targets up to 20 newly discovered emails for each combination, subject to the available search results and other stopping conditions.

This structure can be useful when you want broader coverage across several search intents and email-address types.

### Output

Collected records are added to the Apify dataset incrementally.

| Field         | Description                                                                                     |
| ------------- | ----------------------------------------------------------------------------------------------- |
| `network`     | Source network identifier, returned as `KAYAK.com`.                                             |
| `keyword`     | Keyword used to discover the result.                                                            |
| `title`       | Search-result title.                                                                            |
| `description` | Search-result description or snippet associated with the record.                                |
| `url`         | URL associated with the search result.                                                          |
| `email`       | Email address extracted from the available result text and matching the selected domain suffix. |

The default dataset view emphasizes `keyword`, `title`, `description`, `url`, and `email`. The `network` value is included in the Actor's output record as source metadata.

### Output Example

```json
{
  "network": "KAYAK.com",
  "keyword": "Hotel",
  "title": "Example Hotel",
  "description": "Example hotel information and contact email hello@example.com",
  "url": "https://www.kayak.com/example-page",
  "email": "hello@example.com"
}
```

The example uses fictional sample information to illustrate the record structure.

### Use Cases

The KAYAK Email Scraper can support several practical research and data-collection workflows.

**Travel market research:** Discover publicly available email contacts associated with hotel, car rental, and other travel-related searches.

**Lead research:** Build contact datasets around focused keywords and selected email domains.

**Geographic research:** Combine search terms with a country, state, or city to investigate region-specific results.

**Competitive research:** Collect structured contact and search-result information for selected travel-related categories.

**Dataset creation:** Build a reusable dataset containing keywords, result context, URLs, and discovered emails.

**Business intelligence:** Analyze the relationship between search themes, locations, domains, and discovered contact information.

**Research automation:** Repeat a configurable keyword-based data collection workflow without manually reviewing every search result.

### Advantages

The Actor is useful when the goal is targeted, configurable KAYAK email discovery rather than broad unstructured web collection.

Its main strengths are configurable keywords, location-based refinement, selectable email-domain suffixes, exclusion filters, structured dataset records, duplicate tracking, and incremental output.

The keyword-plus-domain approach also lets users test different search combinations independently. This can make it easier to refine a dataset after reviewing initial results.

### Limitations

Email availability depends on what is publicly visible in the information associated with matching search results. The Actor cannot guarantee that every KAYAK result contains an email address.

Results may also vary according to the specificity of the keyword, the selected email suffix, the chosen location, and the amount of relevant information available.

A narrow query can produce few or no results. Broad queries may discover more varied records but can also require more processing.

The documented maximum for `maxEmails` is 10,000 per keyword + domain combination. Free-user processing is subject to a code-enforced ceiling of 100 emails, while paid-user runs do not apply that specific ceiling.

The Actor may also stop a search combination when continued pagination is no longer producing useful new email results.

### Pros and Cons

| Pros                                  | Cons                                                           |
| ------------------------------------- | -------------------------------------------------------------- |
| Keyword and query-based targeting     | Results depend on publicly available search-result information |
| Optional geographic filtering         | Narrow keywords may return sparse results                      |
| Custom email-domain selection         | Requested targets are not guarantees                           |
| Exclude-word filtering                | Search coverage can vary between combinations                  |
| Structured Apify dataset records      | Free-user runs have a 100-email code-enforced ceiling          |
| Duplicate prevention                  | Not every matching page will expose an email address           |
| Incremental output and resume support | Large or broad searches can require longer processing          |

### Comparison With Alternative Approaches

| Capability                   | This Actor                   | Manual / Typical Alternative                 |
| ---------------------------- | ---------------------------- | -------------------------------------------- |
| Keyword-based discovery      | Supported                    | Requires repeated searches                   |
| Multiple search combinations | Supported                    | Usually handled one search at a time         |
| Geographic targeting         | Supported through `location` | Manually applied to searches                 |
| Email-domain filtering       | Supported                    | Manually added to search queries             |
| Exclusion filtering          | Supported                    | Requires manual screening                    |
| Structured output            | Apify dataset records        | Often requires manual spreadsheet formatting |
| Duplicate tracking           | Supported                    | Often requires manual deduplication          |
| Incremental collection       | Supported                    | Usually depends on the user's workflow       |

This comparison describes workflow differences rather than claiming universal superiority over other data-collection methods.

### Best Practices

Use specific search phrases that closely match the type of KAYAK-related contacts you are looking for. For example, `Hotel Manager`, `Boutique Hotel`, or `Car Rental` may provide a more focused search intent than a single broad keyword.

Start with a small test run before expanding the number of combinations.

When targeting a specific market, add a location such as a country or city. When broader coverage is required, leaving `location` empty allows the search to proceed without that geographic filter.

Use several relevant email suffixes when one domain does not provide enough coverage. You can also add business-specific domains when they are appropriate to your research.

Use `excludeWords` carefully because a matching word or phrase in a result description causes that entire snippet to be skipped.

For important datasets, review and validate collected contact information before using it in downstream workflows.

### Troubleshooting

**Invalid Input:** Check that `keywords`, `customDomains`, and `excludeWords` are supplied as arrays of strings and that `maxEmails` is a valid integer between 1 and 10,000.

**Empty Results:** Try broader or more relevant keywords, remove an overly restrictive location, or add additional email-domain suffixes.

**Partial Results:** A requested target is not a guarantee. The available search results may contain fewer matching email addresses than requested.

**Missing Email Addresses:** A search result may match your keyword while containing no publicly visible email address matching the selected domain suffix.

**Too Few Results:** Add related keyword variations or additional domains. Geographic filters can also be broadened or removed.

**Long Runs:** Broad searches and many keyword-domain combinations can require more processing. Use a smaller test first and increase the run timeout when appropriate.

### Frequently Asked Questions

**What does the KAYAK Email Scraper do?**

The KAYAK Email Scraper searches for KAYAK-related results using your keywords and extracts email addresses matching the domain suffixes you specify.

**What keywords can I use?**

You can use travel-related or business-oriented search terms relevant to the KAYAK information you want to discover. The Actor accepts an array of keyword strings.

**Can I search by country or city?**

Yes. The optional `location` field accepts geographic text such as a country, state, or city.

**Can I process multiple keywords in one run?**

Yes. `keywords` is an array, so multiple search terms can be processed within the same Actor run.

**Can I search for different email domains?**

Yes. Use `customDomains` to provide multiple email suffixes such as `@gmail.com`, `@yahoo.com`, and `@outlook.com`.

**What does `maxEmails` mean?**

It specifies the collection target for each keyword + email-domain combination. The accepted value is from 1 to 10,000.

**Does the Actor guarantee the requested number of emails?**

No. The target is subject to the availability of matching public information and the Actor's search stopping conditions.

**What happens when I use `excludeWords`?**

If a selected word or phrase appears in a result's description snippet, that entire snippet is skipped and no email is taken from it.

**Does the Actor remove duplicate emails?**

Yes. The Actor tracks discovered email addresses and avoids registering the same email more than once.

**What format is the output?**

Results are stored as structured Apify dataset records containing the network, keyword, title, description, URL, and email fields.

**Can I use the Actor for automation and research workflows?**

Yes. Its structured input and dataset output are suitable for repeatable data-collection, research, analysis, and dataset-building workflows.

### NLP Keywords

- KAYAK email extraction
- KAYAK contact data
- KAYAK profile data
- KAYAK search results
- travel email leads
- travel contact discovery
- hotel email extraction
- car rental contacts
- travel business contacts
- public email addresses
- email domain filtering
- location-based search
- keyword-based extraction
- structured contact data
- travel market research
- contact dataset creation
- KAYAK data collection
- search-result email extraction
- business lead research
- travel industry data

### Related Keywords

- KAYAK email finder
- KAYAK contact scraper
- KAYAK email extractor
- KAYAK lead scraper
- KAYAK data scraper
- KAYAK contact finder
- KAYAK business email search
- hotel email scraper
- travel agency email scraper
- car rental email finder
- travel business email extractor
- public travel contact data
- travel lead generation data
- KAYAK contact information
- KAYAK business research
- travel industry contact research
- keyword email scraper
- location email search
- domain-specific email extraction
- travel contact dataset

### Final Overview

The **KAYAK Email Scraper** provides a configurable way to discover publicly available email addresses associated with KAYAK-related search results. Users control the search through keywords, optional geographic targeting, selected email-domain suffixes, per-combination email targets, and exclusion terms.

The resulting dataset combines each discovered email with useful search context such as the keyword, title, description, URL, and source network. This makes the Actor suitable for travel research, contact discovery, market analysis, business intelligence, and structured dataset creation.

For reliable results, use focused keywords, test your configuration with a small run, and broaden the location or domain settings when the available public information is limited.

**Contact me:** <Alphascraper69@gmail.com>

# Actor input Schema

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

A list of keywords or queries to search for.

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

Optional country, state or city used to narrow the search. Leave it empty to search without a geographic filter.

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

List of custom email domains

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

How many addresses each search keyword + domain suffix combination may collect before the finder moves on to the next one. This is a per-combination target, not a run-wide total: with 3 keyword and 2 Domains and a limit of 20, the run works through all 6 combinations and aims for up to 20 addresses in each, so up to 120 overall. Lower values finish sooner and cost less; higher values dig deeper but never guarantee a fuller result, since the run can only find what is publicly listed.

## `excludeWords` (type: `array`):

Words or phrases you do not want to see.

## Actor input object example

```json
{
  "keywords": [
    "Hotel",
    "Car Rental"
  ],
  "location": "",
  "customDomains": [
    "@gmail.com"
  ],
  "maxEmails": 5,
  "excludeWords": []
}
```

# Actor output Schema

## `dataset` (type: `string`):

No description

# 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": [
        "Hotel",
        "Car Rental"
    ],
    "location": "",
    "customDomains": [
        "@gmail.com"
    ],
    "excludeWords": []
};

// Run the Actor and wait for it to finish
const run = await client.actor("email_scraper/kayak-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": [
        "Hotel",
        "Car Rental",
    ],
    "location": "",
    "customDomains": ["@gmail.com"],
    "excludeWords": [],
}

# Run the Actor and wait for it to finish
run = client.actor("email_scraper/kayak-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": [
    "Hotel",
    "Car Rental"
  ],
  "location": "",
  "customDomains": [
    "@gmail.com"
  ],
  "excludeWords": []
}' |
apify call email_scraper/kayak-email-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,email_scraper/kayak-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/85pPevqblendcEzaz/builds/BWpibgo5CHIZX4PnN/openapi.json
