# Work Email Finder & Guesser (Calibrated Confidence) (`leadgenguy/email-guesser`) Actor

Find the most likely work email for a person at a company. Learns the real email format from the company website, checks the mail server, and gives an honest confidence score. From $5 per 1,000.

- **URL**: https://apify.com/leadgenguy/email-guesser.md
- **Developed by:** [Mokssh jaiin](https://apify.com/leadgenguy) (community)
- **Categories:** Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## Work Email Finder & Guesser — honest confidence scores — $5 per 1,000

Give a person's name and their company website. You get the **most likely work email, ranked alternatives, and a confidence score you can trust**. The Actor reads the company's own website to learn which email format it really uses, checks that the domain can receive email, and scores every option.

### Why the score is believable

Most email tools show a high number no matter what. This one doesn't, because a score that is too high only means more bounced emails for you.

- **Confirmed on website (about 97%):** the exact address was found on the company's public pages.
- **Format seen on the website (usually 55-80%):** real addresses at that company use the same format, so the guess follows it.
- **No evidence (about 25-35%, labeled low):** the guess uses the most common corporate formats only. Treat it as a starting point.

### How it works

1. Cleans the name (accents, titles like Dr., suffixes like PhD, particles like "de la").
2. Checks the company's mail server (and whether it is Google Workspace, Microsoft 365 or another provider).
3. Reads the company's contact and team pages and extracts the addresses published there.
4. Builds 12 common formats (`first.last`, `flast`, `first`, `firstlast`, `f.last`, and more) and scores each using how common it is and what the company's real addresses show.

### What it does not do

It does **not** log in to anything, and it does **not** send emails or test mailboxes. So no address is verified. For campaigns, run the best guesses through an email verification service before sending.

### Pricing

| Event | Price |
|---|---|
| Email guess (one person) | $5 per 1,000 ($0.005 per person) |
| Actor start | $0.00005 |

People who can't be processed (free-mail domain, no mail server, unusable name) are returned with an `error` and are **not charged**. Free Apify accounts are limited to **25 people per run**.

### Input

```json
{
  "people": [
    { "fullName": "James Hill", "domain": "apify.com" },
    { "firstName": "Patrick", "lastName": "Collison", "website": "https://stripe.com" }
  ],
  "learnFromWebsite": true
}
```

### Output

```json
{
  "firstName": "james", "lastName": "hill", "domain": "apify.com",
  "mx": { "valid": true, "provider": "google", "records": ["aspmx.l.google.com"] },
  "bestGuess": { "email": "james.hill@apify.com", "pattern": "first.last", "confidence": 97, "confidenceLabel": "high" },
  "candidates": [ { "email": "james.hill@apify.com", "pattern": "first.last", "confidence": 97, "confidenceLabel": "high" }, { "email": "hill.james@apify.com", "pattern": "last.first", "confidence": 5, "confidenceLabel": "low" } ],
  "confirmedOnWebsite": true,
  "evidence": { "websiteReachable": true, "personalEmailsSeenOnWebsite": 1, "formatsUsedForScoring": 1, "pagesCrawled": 4 },
  "note": "This is a calibrated guess, not a verified address..."
}
```

### Feedback and reviews

Found a bug, or need a field or filter added? Open an issue on this Actor's **Issues** tab and it will be looked at quickly. If this Actor saved you time, a short and honest review helps other people find it. Thank you!

### Legal

Email addresses of named people are personal data. You are responsible for lawful use, including a legitimate reason to contact them and compliance with GDPR, CAN-SPAM, CASL and similar rules. The Actor only reads public web pages and DNS records.

# Actor input Schema

## `people` (type: `array`):

One item per person: <code>{"fullName":"Jane Doe","domain":"stripe.com"}</code>, or use <code>firstName</code> and <code>lastName</code>. Up to 10,000 per run (free Apify plans: 25 per run).

## `learnFromWebsite` (type: `boolean`):

Reads the company's contact and team pages to see which email format they really use. Makes guesses far more reliable.

## `maxPagesPerSite` (type: `integer`):

How many pages to read per company when learning the format.

## `maxCandidates` (type: `integer`):

How many ranked options to return.

## `useProxy` (type: `boolean`):

Only needed for websites that block direct access.

## `proxyConfiguration` (type: `object`):

Used only when the proxy option is on.

## Actor input object example

```json
{
  "people": [
    {
      "fullName": "James Hill",
      "domain": "apify.com"
    },
    {
      "firstName": "Patrick",
      "lastName": "Collison",
      "website": "https://stripe.com"
    }
  ],
  "learnFromWebsite": true,
  "maxPagesPerSite": 4,
  "maxCandidates": 5,
  "useProxy": false,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `jobs` (type: `string`):

All scraped jobs as a 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 = {
    "people": [
        {
            "fullName": "James Hill",
            "domain": "apify.com"
        },
        {
            "firstName": "Patrick",
            "lastName": "Collison",
            "website": "https://stripe.com"
        }
    ],
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("leadgenguy/email-guesser").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 = {
    "people": [
        {
            "fullName": "James Hill",
            "domain": "apify.com",
        },
        {
            "firstName": "Patrick",
            "lastName": "Collison",
            "website": "https://stripe.com",
        },
    ],
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("leadgenguy/email-guesser").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 '{
  "people": [
    {
      "fullName": "James Hill",
      "domain": "apify.com"
    },
    {
      "firstName": "Patrick",
      "lastName": "Collison",
      "website": "https://stripe.com"
    }
  ],
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call leadgenguy/email-guesser --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,leadgenguy/email-guesser"
        }
    }
}
```

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/EwJbVkil9sItodpOE/builds/giRfVOFgLBuyqz439/openapi.json
