# Expedia Email Scraper (`email_scraper/expedia-email-scraper`) Actor

Expedia Email Scraper extracts publicly available email addresses from Expedia-related search results using targeted keywords, custom email domains, and optional locations. Build structured Expedia contact leads with titles, descriptions, URLs, and emails for research and prospecting.

- **URL**: https://apify.com/email\_scraper/expedia-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

### 🔍 Expedia Email Scraper – Overview

**Expedia Email Scraper** is an Apify Actor designed to discover publicly available email addresses associated with Expedia-related search results based on the keywords you provide. It helps turn targeted search terms into a structured collection of potential contact leads, including the matching keyword, result title, description, URL, and discovered email address.

Instead of manually searching through many Expedia-related results, you can provide multiple targeted keywords such as `Hotel`, `Travel`, `Travel Agency`, `Hotel Manager`, or other relevant terms. The Actor searches for matching public results and extracts email addresses that correspond to the email domains you specify.

> 💡 **What this Actor does**
>
> - Searches for Expedia-related results using your keywords.
> - Extracts publicly available email addresses matching your selected domains.
> - Supports optional country, state, city, or regional targeting.
> - Removes duplicate email addresses during a run.
> - Provides structured lead data in an Apify Dataset.
> - Allows exclusion of unwanted words or phrases from result descriptions.
> - Lets you control the requested email collection target.

The Expedia Email Scraper is useful for lead generation, travel-industry research, business prospecting, contact discovery, market research, and building structured datasets from publicly available search information.

For better results, use specific keyword combinations instead of relying on one broad keyword. For example, `Hotel` can be combined with `Hotel Manager`, `Boutique Hotel`, `Luxury Hotel`, `Travel Agency`, or `Tour Operator` depending on your research objective.

***

### 🔹 Expedia Email Scraper – Key Features

The **Expedia Email Scraper** provides several user-facing options for controlling how contact discovery works.

> ⭐ **Key Features**
>
> - 🔎 Keyword-based Expedia search.
> - 📧 Email extraction using customizable email-domain suffixes.
> - 🌍 Optional location targeting.
> - 🎯 Multiple keywords in a single run.
> - 🚫 Exclude unwanted words or phrases.
> - 🔢 Configurable maximum email target.
> - ♻️ Duplicate email prevention.
> - 📊 Structured Apify Dataset output.
> - 🔗 Source URL for every extracted result.
> - 📝 Search-result title and description included with each email.
> - 💾 Results are pushed incrementally into the dataset.

#### 🔎 Targeted Keyword Search

The Actor accepts a list of keywords or search queries. This allows you to create focused searches around specific travel, accommodation, tourism, or business-related topics.

Examples include:

- `Hotel`
- `Travel`
- `Hotel Manager`
- `Travel Agency`
- `Tour Operator`
- `Vacation Rental`
- `Luxury Hotel`
- `Business Travel`

Using several related search terms can provide broader coverage than using only one generic keyword.

#### 📧 Custom Email Domains

You can specify which email domains the Actor should look for.

Examples include:

- `@gmail.com`
- `@yahoo.com`
- `@outlook.com`
- `@hotmail.com`
- `@icloud.com`
- Custom business domains such as `@example.com`

This makes the Expedia Email Scraper useful when your research requires a specific type of contact address.

***

### 🔹 Expedia Email Scraper – What Data Can You Extract

Each discovered email is stored together with contextual information from the matching search result. This allows you to understand where an email address was discovered instead of receiving an isolated email list.

> 📦 **Output Data**
>
> - `network` — identifies the source network as Expedia.com.
> - `keyword` — the keyword that produced the result.
> - `title` — title of the matching search result.
> - `description` — available result description or snippet.
> - `url` — source URL associated with the result.
> - `email` — extracted email address.

A typical dataset record looks like this:

```json
{
  "network": "Expedia.com",
  "keyword": "Hotel",
  "title": "Example Hotel",
  "description": "Hotel information and contact example@gmail.com ...",
  "url": "https://www.expedia.com/...",
  "email": "example@gmail.com"
}
```

The exact values depend on the publicly available results discovered for your selected keywords and email domains.

> 📌 **Important**
>
> The Actor can only return email addresses that are publicly discoverable in the searched result information. A requested number of emails is a target, not a guarantee. Results depend on keyword relevance, available public information, selected domains, location filters, and the amount of matching content available.

***

### 🔹 Expedia Email Scraper – How to Use It

Using the **Expedia Email Scraper** is straightforward.

#### 1. Enter Your Keywords

Add one or more search terms to the `Keywords or Queries` field.

For example:

```json
{
  "keywords": [
    "Hotel",
    "Travel",
    "Travel Agency",
    "Hotel Manager"
  ]
}
```

Specific and closely related keywords can help identify more relevant results.

#### 2. Add a Location

The optional `location` field can contain a country, state, city, or other geographic term.

For example:

```json
{
  "location": "New York"
}
```

You can also leave the field empty to avoid applying a geographic filter.

#### 3. Select Email Domains

Use `customDomains` to specify the email domains you want to search for.

```json
{
  "customDomains": [
    "@gmail.com",
    "@yahoo.com",
    "@outlook.com"
  ]
}
```

#### 4. Set the Email Target

The `maxEmails` field controls the requested number of emails for each keyword and domain combination.

For example, with three keywords, two domains, and a target of 20, the Actor processes the six keyword-domain combinations independently.

```json
{
  "maxEmails": 20
}
```

#### 5. Add Exclusion Words

If certain words should cause matching descriptions to be skipped, provide them in `excludeWords`.

```json
{
  "excludeWords": [
    "crypto",
    "onlyfans"
  ]
}
```

Matching is case-insensitive. Single words are matched as whole words, while phrases are matched as phrases.

***

### 🔹 How to Scrape Expedia Emails by Keyword

The best approach is to start with keywords closely related to the type of contact information you need.

For travel lead generation, you might use:

- `Hotel`
- `Hotel Manager`
- `Travel Agency`
- `Travel Agent`
- `Tour Operator`
- `Vacation Rental`
- `Luxury Hotel`
- `Business Travel`
- `Resort`
- `Travel Business`

For a narrower campaign, combine a role or business category with a location.

Examples:

- `Hotel Manager New York`
- `Travel Agency London`
- `Luxury Hotel Miami`
- `Tour Operator California`

You can also use the Actor's `location` field separately rather than putting the geographic term into every keyword.

> 🎯 **Lead-generation tip**
>
> Start with several highly relevant keywords instead of one extremely broad term. If results are limited, broaden the keywords, add related terms, expand the location, or include additional email domains.

***

### 🔹 Can You Search Multiple Expedia Keywords at Once?

Yes. The `keywords` input accepts an array of strings, so you can process multiple search terms within the same Actor run.

For example:

```json
{
  "keywords": [
    "Hotel",
    "Travel Agency",
    "Hotel Manager",
    "Travel Agent"
  ]
}
```

Each keyword is processed as part of the Actor's search workflow. This is useful when your research covers multiple related categories.

Using multiple keywords also helps avoid depending on a single search phrase.

***

### 🔹 Can You Filter Expedia Email Results by Location?

Yes. The optional `location` input lets you narrow searches geographically.

You can enter:

- A country
- A state or region
- A city
- Another geographic search term

Example:

```json
{
  "location": "Los Angeles"
}
```

If the location field is empty, the Actor searches without an additional geographic filter.

Location targeting can be useful when building regional travel leads or researching businesses associated with a specific market.

***

### 🔹 Expedia Email Scraper – Use Cases

The **Expedia Email Scraper** can support several research and lead-generation workflows.

#### 🏨 Hotel and Accommodation Research

Travel businesses can search for terms such as `Hotel`, `Resort`, `Boutique Hotel`, or `Hotel Manager` to identify publicly available contact information connected with relevant Expedia results.

#### ✈️ Travel Industry Lead Generation

Travel agencies, tour operators, travel consultants, and related businesses can use targeted keywords to build structured prospecting datasets.

#### 🌍 Regional Market Research

Use the `location` field to investigate a specific city, state, country, or market.

#### 📧 Contact Discovery

The Actor extracts matching public email addresses and stores them with the associated title, description, keyword, and URL.

#### 🧑‍💼 Business Prospecting

Sales and business-development teams can search combinations of business categories and professional roles to identify relevant public contact information.

#### 🔬 Travel Market Research

Researchers can use keyword-based extraction to organize Expedia-related search results into structured datasets for analysis.

> 💼 **Why use structured results?**
>
> Instead of maintaining manually copied contact lists, the dataset connects each email with its search keyword and source context. This makes the resulting data easier to review, filter, export, and process.

***

### 🔹 Input

The Actor accepts the following user-facing inputs.

| Field           | Type    | Required | Description                                                      |
| --------------- | ------- | -------: | ---------------------------------------------------------------- |
| `keywords`      | Array   |      Yes | Keywords or queries used for the search.                         |
| `location`      | String  |       No | Optional country, state, city, or regional filter.               |
| `customDomains` | Array   |       No | Email-domain suffixes to search for.                             |
| `maxEmails`     | Integer |       No | Requested email target for each keyword + domain combination.    |
| `excludeWords`  | Array   |       No | Words or phrases that cause matching descriptions to be skipped. |

#### 📝 Example Input

```json
{
  "keywords": [
    "Hotel",
    "Travel Agency",
    "Hotel Manager"
  ],
  "location": "New York",
  "customDomains": [
    "@gmail.com",
    "@yahoo.com",
    "@outlook.com"
  ],
  "maxEmails": 20,
  "excludeWords": [
    "crypto"
  ]
}
```

The configured `maxEmails` value accepts numbers from **1 to 10,000**.

***

### 🔹 Output

The **Expedia Email Scraper** stores results in the **Expedia Emails Dataset**.

The main output fields are:

| Field         | Description                                |
| ------------- | ------------------------------------------ |
| `network`     | Expedia.com source identifier.             |
| `keyword`     | Search keyword responsible for the result. |
| `title`       | Title of the discovered result.            |
| `description` | Available result description or snippet.   |
| `url`         | URL associated with the result.            |
| `email`       | Extracted email address.                   |

The dataset is presented as a structured table, making the information convenient to review.

> 📊 **Example Output**
>
> ```json
> {
>   "network": "Expedia.com",
>   "keyword": "Travel Agency",
>   "title": "Example Travel Company",
>   "description": "Contact us at travel@example.com ...",
>   "url": "https://www.expedia.com/...",
>   "email": "travel@example.com"
> }
> ```

***

### 🔹 Pricing and Result Limits

No fixed monetary price is specified in the provided Actor configuration, so this README does not claim a specific per-run or per-result price.

The Actor does, however, apply a **100-email maximum for free-tier runs** when the requested limit would otherwise exceed that threshold. Paid runs do not receive this particular result restriction from the Actor's logic.

The `maxEmails` setting should therefore be understood as a requested collection target rather than a guaranteed number of final records.

> 💰 **Pricing / Limit Note**
>
> - `maxEmails` can be configured from 1 to 10,000.
> - Free-tier execution is capped at 100 emails when the requested limit exceeds that amount.
> - Paid execution does not apply that free-tier 100-email restriction.
> - Actual results can be lower than the requested target because suitable public email addresses may not exist for every search combination.
> - Your final run cost can depend on your Apify plan and execution resources.

***

### 🔹 Tips and Best Practices

Good input quality is important when using the **Expedia Email Scraper**.

#### 🎯 Use Specific Search Terms

Instead of relying only on `Travel`, try related terms such as:

- `Travel Agency`
- `Travel Agent`
- `Tour Operator`
- `Hotel Manager`
- `Boutique Hotel`
- `Luxury Hotel`

#### 📧 Add Multiple Email Domains

If your search produces limited results, consider adding several relevant domains.

```json
{
  "customDomains": [
    "@gmail.com",
    "@yahoo.com",
    "@outlook.com",
    "@hotmail.com"
  ]
}
```

#### 🌍 Adjust Location Carefully

A highly restrictive location may reduce the available result pool. If you receive too few results, try removing the location or using a broader geographic term.

#### 🚫 Use Exclusions Selectively

Exclude words only when they are genuinely undesirable. Excessive exclusions can remove potentially useful results.

#### 📈 Broaden Low-Result Searches

If the Actor returns fewer emails than requested, try additional related keywords, more email domains, or a broader location.

> ⚠️ **Important limitation**
>
> A target of 100 or 1,000 emails does not mean that 100 or 1,000 matching addresses will always be available. The Actor works with publicly discoverable information, so search coverage and data availability determine the final number of records.

***

### 🔹 Frequently Asked Questions

#### ❓ What is the Expedia Email Scraper?

The Expedia Email Scraper is an Apify Actor that searches Expedia-related results using user-provided keywords and extracts publicly available email addresses matching selected email domains.

#### ❓ What data does the Expedia Email Scraper return?

The Actor returns the source network, keyword, result title, description, URL, and extracted email address.

#### ❓ Can I use multiple keywords?

Yes. The `keywords` field accepts multiple search terms in an array, allowing you to search several travel-related categories in one run.

#### ❓ Can I target a specific city or country?

Yes. Use the optional `location` field to narrow the search to a country, state, city, or other geographic term.

#### ❓ Can I search Gmail and Yahoo addresses?

Yes. Add the required email-domain suffixes to `customDomains`, such as `@gmail.com` or `@yahoo.com`.

#### ❓ Can I search custom business email domains?

Yes. The `customDomains` input accepts custom email-domain suffixes, allowing searches beyond common consumer email providers.

#### ❓ Why did I receive fewer emails than my maxEmails value?

`maxEmails` is a target, not a guarantee. There may not be enough publicly discoverable matching email addresses for the selected keyword, domain, or location.

#### ❓ What is the best way to increase Expedia email results?

Try adding closely related keywords, expanding your location, adding more email domains, or reducing overly restrictive exclusions.

#### ❓ Does the Actor remove duplicate emails?

Yes. The Actor tracks previously discovered email addresses and avoids adding the same email address repeatedly.

#### ❓ What happens if I use excludeWords?

If a result description contains an excluded word or phrase, that result is skipped and its email address is not collected.

#### ❓ Can I leave the location empty?

Yes. Leaving `location` empty allows the search to run without an additional geographic filter.

#### ❓ Can I export the resulting data?

The Actor stores its results in an Apify Dataset, where the structured records can be reviewed and handled using Apify's available dataset functionality.

***

### 🔹 Support

If you need help choosing effective keywords, configuring email domains, improving search coverage, or adapting the Actor for a specific Expedia-related research workflow, you can contact me.

For custom requirements, Actor improvements, or bespoke development requests, please get in touch:

**contact me by email : <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",
    "Travel"
  ],
  "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",
        "Travel"
    ],
    "location": "",
    "customDomains": [
        "@gmail.com"
    ],
    "excludeWords": []
};

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

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

```

## MCP server setup

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