# Indeed Email Scraper (`email_scraper/indeed-email-scraper`) Actor

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

- **URL**: https://apify.com/email\_scraper/indeed-email-scraper.md
- **Developed by:** [Email Scraper](https://apify.com/email_scraper) (community)
- **Categories:**
- **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?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

### 🔍 Indeed Email Scraper – Overview

**Indeed Email Scraper** helps you discover publicly listed email addresses associated with Indeed search results by entering targeted keywords, optional locations, and the email domains you want to find.

It is designed for lead research, contact discovery, recruitment research, business intelligence, and other workflows where structured contact data from Indeed-related search results is useful.

The Actor searches using each **keyword + email domain** combination separately. This gives you more control over your search coverage instead of treating every keyword and domain as one shared search.

> 💡 **Indeed Email Scraper at a Glance**
>
> - Search Indeed-related results using custom keywords
> - Extract matching publicly visible email addresses
> - Filter searches by country, state, city, or another region
> - Target specific email domains such as `@gmail.com` or `@yahoo.com`
> - Exclude results containing unwanted words or phrases
> - Set a maximum email target for each keyword + domain combination
> - Automatically avoid duplicate email addresses
> - Receive structured dataset records for every collected result

The easiest workflow is simple: enter specific keywords, optionally add a location, choose one or more email domains, set your desired result limit, and start the Actor.

***

### 🔍 Indeed Email Scraper – Key Features

**Indeed Email Scraper** is built around targeted contact discovery rather than broad, unstructured extraction. You can create multiple search combinations to improve coverage and refine the type of contacts you want.

> ⭐ **Key Features**
>
> - **Keyword-based search:** Enter job titles, roles, professions, skills, or other search terms.
> - **Location filtering:** Narrow searches to a country, state, city, or other geographic phrase.
> - **Custom email domains:** Search for specific domains such as `@gmail.com`, `@outlook.com`, `@yahoo.com`, or company domains.
> - **Per-combination limits:** Set how many emails each keyword + domain combination should target.
> - **Exclude words:** Skip result descriptions containing unwanted words or phrases.
> - **Duplicate protection:** Previously collected email addresses are not added again.
> - **Structured output:** Results are stored with keyword, title, description, URL, email, and network information.
> - **Incremental dataset storage:** Results are pushed as they are collected.
> - **Resume support:** Progress and already-seen emails are retained so interrupted runs can continue.

For higher-quality lead research, use specific search phrases instead of very broad terms. For example, `General Manager` is usually more targeted than a broad term such as `Manager`.

***

### 🔍 Indeed Email Scraper – What Data Can You Extract?

With **Indeed Email Scraper**, each collected lead is returned as structured data. This makes the results easier to review, filter, export, and use in downstream workflows.

> 📦 **Output / Data Fields**
>
> | Field         | Description                                          |
> | ------------- | ---------------------------------------------------- |
> | `network`     | Identifies the source network as `Indeed.com`.       |
> | `keyword`     | The keyword used to discover the result.             |
> | `title`       | Title associated with the search result.             |
> | `description` | Description or snippet associated with the result.   |
> | `url`         | URL of the discovered result.                        |
> | `email`       | Email address extracted from the result description. |

The `email` field contains addresses matching the email-domain filters you provide. The `keyword` field makes it easier to understand which search term produced a particular lead.

The dataset view is organized around the primary lead fields: keyword, title, description, URL, and email. This provides a practical table for reviewing results before using them elsewhere.

#### 🔹 Example Output

```json
{
  "network": "Indeed.com",
  "keyword": "General Manager",
  "title": "Example Result",
  "description": "Example public result description containing contact@example.com",
  "url": "https://example.com/example-result",
  "email": "contact@example.com"
}
```

The example above illustrates the structure only. Actual titles, descriptions, URLs, and email addresses depend on what is publicly available for your selected searches.

***

### 🔍 Indeed Email Scraper – How to Use It

Using **Indeed Email Scraper** requires only a few input settings.

#### 🔹 1. Add specific keywords

Enter one or more search terms in the `keywords` field.

Useful examples include:

- `Managing Director`
- `General Manager`
- `Operations Manager`
- `Sales Director`
- `Hotel Manager`
- `Marketing Manager`

Multiple related keywords can increase the range of results because each keyword is processed separately.

#### 🔹 2. Add a location when needed

The optional `location` field lets you narrow searches geographically.

Examples include:

- `New York`
- `United States`
- `London`
- `California`
- `Toronto`

Leave the location empty when you want a broader search.

#### 🔹 3. Select email domains

Use `customDomains` to define which email suffixes should be collected.

Examples:

- `@gmail.com`
- `@yahoo.com`
- `@outlook.com`
- `@hotmail.com`
- `@icloud.com`

You can also provide other domain suffixes when they are relevant to your research.

#### 🔹 4. Set the email target

The `maxEmails` value controls the maximum target for each **keyword + domain combination**.

For example, with:

- 3 keywords
- 2 email domains
- `maxEmails = 20`

the Actor works through 6 separate combinations, with a target of up to 20 collected emails for each combination.

Actual totals can be lower because duplicate addresses, missing public emails, exclusion filters, and limited search results can reduce the number of unique contacts found.

***

### 🔹 How to Get Better Indeed Email Scraper Results

The quality of your search terms has a major effect on the usefulness of the returned contacts.

Start with specific search intent instead of relying on a single broad keyword. A group of related role-based keywords often gives you more useful coverage.

For example:

- `Managing Director`
- `General Manager`
- `Business Development Manager`
- `Operations Director`
- `Sales Manager`

You can then combine those terms with several email domains.

> 💡 **Better Search Strategy**
>
> - Use several closely related keywords.
> - Use specific job titles when prospecting for professionals.
> - Add a location when geographic targeting matters.
> - Test multiple relevant email domains.
> - Increase `maxEmails` only when more coverage is needed.
> - Use `excludeWords` to remove unwanted result categories.
> - Start with focused searches and broaden them when results are sparse.

Remember that the Actor can only return information available in the searched result content. A higher target does not guarantee that more public email addresses exist.

***

### 🔹 How to Scrape Indeed Email Addresses by Keyword and Domain

A useful approach is to combine a role or profession with the email suffix you want to discover.

For example, one combination could target:

```text
Keyword: General Manager
Domain: @gmail.com
Location: New York
Max Emails: 20
```

You can then add another domain such as `@yahoo.com` to create a separate search combination.

This approach is useful when you want to compare different contact sources or focus on a particular type of publicly available email address.

Because duplicate emails are removed globally during the run, the final dataset is designed to avoid repeatedly returning the same address.

***

### 🔹 Can You Filter Indeed Email Scraper Results?

Yes. **Indeed Email Scraper** supports an `excludeWords` filter.

The filter checks the result description before an email is collected. When a matching word or phrase is present, that entire result description is skipped.

Single words are matched as complete words, while phrases are matched as phrases. Matching is not case-sensitive.

For example:

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

This can help remove result types that are not relevant to your project.

Use exclusions carefully because an overly restrictive filter can remove potentially useful contacts.

***

### 🔹 Indeed Email Scraper – Input

> 📝 **Input Configuration**
>
> | Input           | Type    | Required | Default                                      | Range / Behavior                |
> | --------------- | ------- | -------- | -------------------------------------------- | ------------------------------- |
> | `keywords`      | Array   | Yes      | Managing Director, General Manager, Director | Multiple search terms supported |
> | `location`      | String  | No       | Empty                                        | Optional geographic filter      |
> | `customDomains` | Array   | No       | `@gmail.com`                                 | One or more email suffixes      |
> | `maxEmails`     | Integer | No       | `10`                                         | `1–10,000`                      |
> | `excludeWords`  | Array   | No       | Empty                                        | Words or phrases to skip        |

#### 🔹 `keywords`

This is the primary search input. Add one or more keywords or queries that describe the people, roles, or subjects you want to find.

#### 🔹 `location`

This optional field narrows the search to a geographic term. It can contain a city, state, country, or another location phrase.

#### 🔹 `customDomains`

Provide the email suffixes you want the Actor to search for. The default is `@gmail.com`.

#### 🔹 `maxEmails`

This integer sets the maximum target for each keyword + domain combination. The configured range is **1 to 10,000**.

#### 🔹 `excludeWords`

Add words or phrases that should cause matching result descriptions to be skipped.

***

### 🔹 Indeed Email Scraper – Sample Input

Here is a practical example using several targeted search terms:

```json
{
  "keywords": [
    "Managing Director",
    "General Manager",
    "Operations Manager"
  ],
  "location": "New York",
  "customDomains": [
    "@gmail.com",
    "@yahoo.com",
    "@outlook.com"
  ],
  "maxEmails": 20,
  "excludeWords": [
    "crypto",
    "onlyfans"
  ]
}
```

This configuration creates separate searches for each keyword and email-domain combination.

***

### 🔹 Indeed Email Scraper – Use Cases

**Indeed Email Scraper** can be useful in several research and lead-generation scenarios.

> 🎯 **Use Cases**
>
> - **B2B lead research:** Discover publicly available email contacts associated with targeted professional searches.
> - **Recruitment research:** Search around specific job titles, management roles, or professional categories.
> - **Sales prospecting:** Build targeted contact datasets using job titles and geographic terms.
> - **Business intelligence:** Collect structured search-result information for analysis.
> - **Market research:** Explore publicly discoverable contacts across different regions and professional roles.
> - **Industry research:** Compare results across multiple job titles and email domains.
> - **Local prospecting:** Combine professional keywords with cities or regions.
> - **Contact discovery:** Search for publicly visible email addresses connected with relevant result descriptions.

Use cases should remain within applicable laws, platform rules, and appropriate privacy and outreach practices.

***

### 🔹 What Makes Targeted Keywords Important?

Broad searches can produce many irrelevant results. Targeted keywords help make your **Indeed Email Scraper** runs more focused.

Instead of using only `Manager`, consider combinations such as:

- `Hotel General Manager`
- `Restaurant Manager`
- `Sales Director`
- `Marketing Director`
- `Property Manager`

Role-specific searches are often easier to analyze because the resulting `keyword` field tells you exactly which search term generated each record.

Location can provide another layer of targeting. For example, combining `Hotel Manager` with `Miami` can create a more geographically focused dataset than using the role alone.

***

### 🔹 Pricing and Usage

The provided Actor configuration does **not specify a fixed monetary price**, so no exact dollar amount should be assumed from this documentation.

The Actor does implement result-based event tracking: each successfully pushed result uses a `result` charge event.

The Actor also applies different result-limit behavior depending on the user's plan:

- Free users are capped at **100 emails per keyword + domain combination**.
- Paid users are not subject to that forced 100-result free-tier ceiling.
- The user-configured `maxEmails` value still controls the collection target, with a schema maximum of **10,000 per combination**.
- Actual results may be lower than the target when suitable public results are unavailable or duplicates/exclusions reduce the number of new emails.

> 💰 **Pricing Note**
>
> - No fixed subscription or per-run price is declared in the supplied Actor configuration.
> - Result charging is associated with successfully pushed records.
> - Higher targets can require broader searches and more search coverage.

***

### 🔹 Tips and Best Practices

> ✅ **Important Notes**
>
> - Use precise keywords for more relevant contacts.
> - Use multiple related keywords when broader coverage is needed.
> - Add a location when geographic targeting is important.
> - Test several email domains when searching for different contact types.
> - Keep `excludeWords` focused so useful results are not filtered out unintentionally.
> - Increase the Actor run timeout for especially broad searches.
> - A high `maxEmails` value is a target, not a guarantee.
> - Sparse results may indicate that your keyword, domain, or location combination is too narrow.

The Actor's search process also has built-in stopping conditions when additional pages stop producing useful new email results. This helps prevent spending unnecessary effort on searches that have become unproductive.

***

### 🔹 Frequently Asked Questions

#### 🔹 What is Indeed Email Scraper?

**Indeed Email Scraper** is an Apify Actor that searches for relevant Indeed-related results using your keywords and extracts matching publicly visible email addresses into a structured dataset.

#### 🔹 How does Indeed Email Scraper find email addresses?

It searches result content associated with your selected keywords and email-domain suffixes, then extracts matching email addresses from the returned descriptions.

#### 🔹 Can I search Indeed emails by location?

Yes. The optional `location` input can be used with a country, state, city, or other geographic phrase.

#### 🔹 Can I search for Gmail addresses only?

Yes. Set `customDomains` to `["@gmail.com"]` to target Gmail addresses.

#### 🔹 Can I search multiple email domains?

Yes. You can provide multiple domain suffixes, and each keyword + domain combination is processed separately.

#### 🔹 What is the maximum `maxEmails` value?

The configured maximum is **10,000** per keyword + domain combination.

#### 🔹 Is `maxEmails` a total run limit?

No. It is a target applied separately to each keyword + domain combination.

#### 🔹 Why did I receive fewer emails than my target?

The Actor cannot guarantee a specific number of results. Public email availability, duplicate addresses, exclusions, and the number of relevant search results can all reduce the final count.

#### 🔹 Does Indeed Email Scraper remove duplicate emails?

Yes. The Actor tracks previously collected email addresses and does not add the same email again.

#### 🔹 Can I exclude unwanted profiles or result descriptions?

Yes. Use `excludeWords` to skip result descriptions containing specified words or phrases.

#### 🔹 Can I use company email domains?

Yes. You can provide custom domain suffixes beyond common providers, provided they are relevant to your search.

#### 🔹 What data does Indeed Email Scraper return?

Each collected record includes the network, keyword, title, description, URL, and email fields.

#### 🔹 Can I reuse the output for lead research?

The structured dataset can be reviewed and processed for research, prospecting, analysis, and other legitimate workflows appropriate to the collected data.

#### 🔹 Does a higher email limit guarantee more results?

No. `maxEmails` controls the target, while the available public search results determine how many matching unique emails can actually be collected.

#### 🔹 What should I do when results are sparse?

Try more specific related keywords, additional email domains, or a broader location. Removing an overly restrictive location filter can also increase search coverage.

***

### 🔹 Support

For questions, improvements, customizations, or bespoke Actor development related to **Indeed Email Scraper**, use the contact below.

- 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": [
    "skinManaging Directorcare",
    "General Manager",
    "Director"
  ],
  "location": "New york",
  "customDomains": [
    "@gmail.com"
  ],
  "maxEmails": 10,
  "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": [
        "skinManaging Directorcare",
        "General Manager",
        "Director"
    ],
    "location": "New york",
    "customDomains": [
        "@gmail.com"
    ],
    "excludeWords": []
};

// Run the Actor and wait for it to finish
const run = await client.actor("email_scraper/indeed-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": [
        "skinManaging Directorcare",
        "General Manager",
        "Director",
    ],
    "location": "New york",
    "customDomains": ["@gmail.com"],
    "excludeWords": [],
}

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

```

## MCP server setup

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