# Email Finder & Verifier - B2B Email Lookup API (`clearpath/email-finder-api`) Actor

Find verified business emails using first name, last name, and company domain. Tests common patterns and validates with SMTP checks. Upload CSV or Excel files for bulk processing. Returns quality-ranked results with alternative emails and confidence scores. Export to JSON or CSV.

- **URL**: https://apify.com/clearpath/email-finder-api.md
- **Developed by:** [ClearPath](https://apify.com/clearpath) (community)
- **Categories:** Automation, Lead generation, Jobs
- **Stats:** 1,126 total users, 223 monthly users, 91.8% runs succeeded, 23 bookmarks
- **User rating**: 4.03 out of 5 stars

## 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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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

## Professional Email Finder API — Find B2B Emails with Names & Domains (2026)

<span style="background:#EDF6F9;color:#006D77;padding:2px 8px;border-radius:4px;font-size:12px;font-weight:700">RELATED ACTORS</span>

<table><tr>
<th style="border-bottom:2px solid #333;padding:12px 16px;text-align:left;font-weight:600">Email Tools ➤</th>
<td style="border-bottom:1px solid #ddd;padding:12px 16px"><a href="https://apify.com/clearpath/newsletter-list-cleaner" style="color:#006D77;text-decoration:none;font-weight:600">Newsletter List Cleaner</a></td>
<td style="border-bottom:1px solid #ddd;padding:12px 16px"><a href="https://apify.com/clearpath/email-account-checker" style="color:#006D77;text-decoration:none;font-weight:600">Email Account Checker</a></td>
<td style="border-bottom:1px solid #ddd;padding:12px 16px"><a href="https://apify.com/clearpath/email-validation-api" style="color:#006D77;text-decoration:none;font-weight:600">Email Validator</a></td>
</tr></table>

#### Copy to your AI assistant

Copy this block into ChatGPT, Claude, Cursor, or any LLM to start using this actor.

````

clearpath/email-finder-api on Apify. Call: ApifyClient("TOKEN").actor("clearpath/email-finder-api").call(run\_input={...}), then client.dataset(run\["defaultDatasetId"]).list\_items().items for results. Key inputs: people (array of {firstName, surname, domain}), csvFile (string, file upload), mode (string, "optimized" or "expanded"). Full actor spec (input schema with all params/enums/defaults, output dataset fields, README): GET https://api.apify.com/v2/acts/clearpath~email-finder-api/builds/default (Bearer TOKEN) → inputSchema, actorDefinition.storages.dataset, readme. Pricing: PPE, $0.005 actor start + $0.008/pattern tested; ~$0.016/person optimized, ~$0.048/person expanded. Get token: https://console.apify.com/account/integrations

````

### Changelog

<table>
<tr>
<td style="padding:14px 20px;border-left:3px solid #006D77;background:#EDF6F9;border-top:none;border-right:none;border-bottom:none">
<span style="color:#006D77;font-weight:700;font-size:13px">March 2026</span><br>
<span style="background:#FFDDD2;color:#1C1917;font-size:11px;font-weight:700;padding:2px 8px;border-radius:4px">NEW</span> <strong>Business Email Discovery</strong> — upload Google Maps, Yelp, or directory exports with business names and websites. Finds generic emails (info@, contact@, hello@, etc.) automatically<br>
<span style="background:#FFDDD2;color:#1C1917;font-size:11px;font-weight:700;padding:2px 8px;border-radius:4px">NEW</span> <strong>AI Column Detection</strong> — upload files in any language (German, Japanese, Spanish, etc.), columns detected automatically<br>
<span style="background:#FFDDD2;color:#1C1917;font-size:11px;font-weight:700;padding:2px 8px;border-radius:4px">NEW</span> <strong>Chain with Leads Scrapers</strong> — pass a dataset ID from any Apollo/LinkedIn leads actor, auto-detects names and domains<br>
<span style="background:#FFDDD2;color:#1C1917;font-size:11px;font-weight:700;padding:2px 8px;border-radius:4px">NEW</span> <strong>Company Name Resolution</strong> — pass "Goldman Sachs" instead of a domain, resolves automatically<br>
<span style="background:#FFDDD2;color:#1C1917;font-size:11px;font-weight:700;padding:2px 8px;border-radius:4px">NEW</span> <strong>Nickname Fallback</strong> — 6,800+ nickname mappings (Elizabeth→Liz, Robert→Bob) when standard patterns find nothing<br>
<strong>Google Sheets Support</strong> — paste a sharing URL directly as file input<br>
<strong>Flexible Input Fields</strong> — accepts <code>lastName</code>, <code>last_name</code>, <code>website</code>, <code>name</code>, <code>company</code> without renaming
</td>
</tr>
<tr>
<td style="padding:10px 20px;border-left:3px solid #E7E5E4;border-top:none;border-right:none;border-bottom:none;color:#78716C">
<span style="font-weight:600;color:#57534E">December 2025</span> &nbsp; Excel support (.xlsx) &nbsp;&bull;&nbsp; Smart fuzzy column detection for typos and unusual headers
</td>
</tr>
</table>

**Find valid business email addresses using only first name, last name, and company domain.**

Tests common email patterns, validates each via SMTP, and stops when it finds a match. Upload a CSV, paste a Google Sheets URL, or pass contacts via API. Works with Apollo, HubSpot, Salesforce exports and Google Maps/Yelp business directories out of the box.

### Demo

[![asciicast](https://asciinema.org/a/CF31WCkFpDV65zfnBGE2TvlXh.svg)](https://asciinema.org/a/CF31WCkFpDV65zfnBGE2TvlXh)

### The Challenge of B2B Outreach

You have a list of prospects with names and companies, but no email addresses. Manual searching wastes hours. Guessing email formats leads to bounces. Buying email lists is expensive and often outdated.

**This Email Finder solves that problem automatically.**

#### Common Email Finding Scenarios:
- **LinkedIn Prospecting**: Found the perfect lead but no email visible
- **Conference Attendees**: Have names and companies from attendee lists
- **Apollo/CRM Exports**: Incomplete contact data with missing emails
- **Target Account Lists**: Know the company and person but need the email

### Discovery Modes - Choose Your Approach

#### 📊 **Two Email Discovery Modes**

| Mode | Patterns Tested | Coverage | Use Case |
|------|----------------|---------|----------|
| **optimized** | 4 patterns | ~85% of business emails | Default - fast and cost-effective |
| **expanded** | 10 patterns | ~95% of business emails | When optimized mode fails or for high-value prospects |

**Optimized Mode (Default):**
- Tests the 4 most common business email patterns
- Covers approximately 85% of all business email formats
- Fastest and most cost-effective option
- Perfect for bulk processing and initial outreach

**Expanded Mode:**
- Tests 10 different email patterns
- Covers approximately 95% of all business email formats
- Use when optimized mode doesn't find an email
- Ideal for high-value prospects where you need maximum coverage

#### 🔄 **Nickname Fallback (Optional)**

| Setting | Behavior |
|---------|----------|
| `useNicknames: false` (default) | Standard patterns only |
| `useNicknames: true` | If no email found, retries with common nicknames (Elizabeth→Liz, Robert→Bob, etc.) |

When enabled, the actor tries alternate first names from a database of 6,800+ nickname mappings. Each nickname retry is charged separately. Only activates when standard patterns find nothing.

```json
{
    "people": [{"firstName": "Elizabeth", "surname": "Speight", "domain": "anthropic.com"}],
    "mode": "optimized",
    "useNicknames": true
}
````

If the standard patterns for "Elizabeth" fail but "Liz" works, the result includes `"nicknameUsed": "liz"`.

### Why Choose This Email Finder?

#### 🔍 **Smart Pattern Detection**

Tests the most common business email formats comprehensively in parallel for fast results.

#### 💰 **Maximum Value Discovery**

Tests all patterns in your chosen mode and returns the best email plus all validated alternatives.

#### 🎯 **Quality-Ranked Results**

Every email is verified with SMTP checks and ranked by quality - safe emails prioritized over catch-all domains.

#### 📁 **CSV Batch Processing**

Upload your CRM exports or prospect lists to find emails in bulk.

### Features

- ✅ **Pattern-Based Discovery**: Tests common business email formats (firstname.lastname@, f.lastname@, etc.)
- ✅ **Comprehensive Validation**: All patterns validated in parallel with SMTP checks for fast, reliable results
- ✅ **Quality-Ranked Results**: Returns best email plus all validated alternatives, ranked by quality (safe > catch-all > unknown)
- ✅ **Two Discovery Modes**: Optimized (4 patterns) or Expanded (10 patterns)
- ✅ **Multiple Emails Per Person**: Get 2-4 validated email options for backup and A/B testing
- ✅ **CSV Batch Processing**: Upload prospect lists with names and domains
- ✅ **Auto Column Detection**: Intelligently finds First Name, Last Name, and Domain columns in any language
- ✅ **Company Name Resolution**: Don't know the domain? Pass "Goldman Sachs" and it resolves to `gs.com`
- ✅ **Flexible Field Names**: Accepts `lastName`, `last_name`, `website`, `name`, `company`, and more
- ✅ **Domain Cleaning**: Handles URLs, removes protocols, extracts clean domains
- ✅ **Transparency Metrics**: See exactly how many patterns were tested and validated
- ✅ **Chain with Leads Scrapers**: Pass a dataset ID from any Apollo or LinkedIn leads actor
- ✅ **Google Sheets Support**: Paste a Google Sheets URL as file input
- ✅ **Business Email Discovery**: Upload Google Maps or Yelp exports with business names, finds generic emails (info@, contact@, etc.)
- ✅ **CRM Export Compatible**: Works with Apollo, HubSpot, Salesforce exports

### Input

#### Direct People Input

Provide a list of people with their names and company domains:

```json
{
    "people": [
        {
            "firstName": "John",
            "surname": "Doe",
            "domain": "company.com"
        },
        {
            "firstName": "Jane",
            "surname": "Smith",
            "domain": "business.org"
        }
    ],
    "mode": "optimized"
}
```

**With company name instead of domain:**

```json
{
    "people": [
        {
            "firstName": "John",
            "surname": "Doe",
            "domain": "Goldman Sachs"
        }
    ]
}
```

The actor resolves "Goldman Sachs" to `gs.com` automatically. The output includes `domainResolved: true` and `originalCompany: "Goldman Sachs"` so you can see what happened.

**Flexible field names** — the actor accepts common variants without manual renaming:

```json
{
    "people": [
        {
            "first_name": "John",
            "lastName": "Doe",
            "website": "company.com"
        }
    ]
}
```

Supported aliases: `first_name`, `firstname`, `givenName` for first name; `lastName`, `last_name`, `familyName` for surname; `website`, `companyDomain`, `url`, `site` for domain. A `name` field is auto-split into first/last. A `company` field is used as domain fallback.

**With expanded search mode:**

```json
{
    "people": [
        {
            "firstName": "Robert",
            "surname": "Johnson",
            "domain": "enterprise.com"
        }
    ],
    "mode": "expanded"  // Tests up to 10 patterns instead of 4
}
```

### File Upload Support (CSV & Excel)

#### 🎯 Automatic Column Detection

**The actor automatically detects First Name, Last Name, and Domain columns!** No configuration needed - just upload your prospect list and let the intelligent detection system find the right columns. Perfect for CRM exports where column names vary.

**Smart Fuzzy Matching**: Even handles typos and unusual column names like "Frist Name", "Contact Last Name", or "Company Domian".

#### 📤 Upload Your Prospect Lists

**Upload CSV or Excel files from Apollo, HubSpot, Salesforce, LinkedIn Sales Navigator, or any other source!** This finder works seamlessly with exports from popular sales and marketing platforms:

- **Apollo.io**: Direct support for contact export format
- **HubSpot**: Works with contact and company exports
- **Salesforce**: Compatible with lead and contact reports
- **LinkedIn Sales Navigator**: Process your saved lead lists
- **Conference Attendee Lists**: Find emails for event contacts
- **Any CSV or Excel format**: Supports CSV (comma, semicolon, tab, pipe delimiters) and Excel (.xlsx)

#### How to Provide Files

You have two options for providing files:

1. **File Upload**: Click the file upload button in the Apify Console to upload your CSV or Excel file directly
2. **URL**: Provide a public URL where your file is hosted

#### How File Processing Works

1. **Provide your file**: Either upload directly via the editor or provide a URL
2. **Auto-detection**: The actor scans your file and identifies columns for:
   - **First Names**: Detects variations like "First Name", "Given Name", "fname", etc.
   - **Last Names**: Finds "Last Name", "Surname", "Family Name", etc.
   - **Domains**: Identifies "Domain", "Company", "Website", "Company URL", etc.
   - **Business Names**: If no person names found, detects "Title", "Business Name", "Store Name", etc. and switches to generic email patterns (info@, contact@, hello@, ...)
3. **Domain Cleaning**: Automatically cleans URLs to extract pure domains
4. **Pattern Generation**: Creates email patterns for each person or business (4-6 optimized, 10-16 expanded)
5. **Parallel Validation**: Tests all patterns simultaneously for fast results
6. **Quality Ranking**: Selects best email and provides all validated alternatives
7. **Results**: Returns best email plus alternative options with full validation details

#### CSV Input Examples

**Option 1 - File Upload (via Apify Console):**

```json
{
    "csvFile": "Use the file upload button to select your CSV file",
    "mode": "optimized"
}
```

**Option 2 - URL (for hosted CSV files):**

```json
{
    "csvFile": "https://your-domain.com/prospects.csv",
    "mode": "expanded"  // Tests up to 10 patterns per person
}
```

**Example with Apollo.io export (upload or URL):**

```json
{
    "csvFile": "Upload your apollo-contacts-export.csv or provide its URL",
    "mode": "optimized"  // Usually sufficient for finding emails
}
```

**Combined input (direct people + CSV file):**

```json
{
    "people": [
        {"firstName": "John", "surname": "Doe", "domain": "company.com"}
    ],
    "csvFile": "Upload additional contacts via file or provide URL",
    "mode": "expanded"  // Will apply to both direct and CSV inputs
}
```

#### Supported File Formats

- **CSV Files**: `.csv` files with various encodings (UTF-8, ASCII, Latin-1)
- **Excel Files**: `.xlsx` files (modern Excel format)
- **Delimiters (CSV)**: Automatically detects comma (`,`), semicolon (`;`), tab (`\t`), or pipe (`|`)
- **Headers**: Works with or without headers - the actor adapts automatically
- **Quoted Fields**: Handles complex CSVs with quoted fields containing delimiters
- **Excel Sheets**: For Excel files, uses the first/active sheet

#### ⚠️ Important: Domain Column Requirements

**Your file needs a column with COMPANY DOMAINS or COMPANY NAMES (not social media profile URLs).**

✅ **What Works:**

- **Company domains:** `apple.com`, `microsoft.com`, `salesforce.com`
- **Company names:** `Apple`, `Goldman Sachs`, `Microsoft` — resolved to domains automatically
- Column names: `domain`, `company domain`, `website`, `company`, `company name`, `organization`

❌ **What Doesn't Work - Social Media URLs:**

- Column names: `linkedinUrl`, `linkedin profile`, `facebook url`
- Example values: `linkedin.com/in/john-doe`, `facebook.com/john.doe`

**Why?** Email patterns like `john.doe@company.com` need the actual company domain, not LinkedIn. If your CSV only has LinkedIn profile URLs, the actor will fail with a clear error message.

**Mixed columns work too:** If your domain column has a mix of real domains (`gs.com`) and company names (`Goldman Sachs`), the actor handles each row individually.

### Chain with Leads Scrapers (Apollo, LinkedIn, etc.)

**Already using a leads scraper on Apify? Pass its output directly to Email Finder.**

The actor auto-detects output fields from popular leads scrapers. No reformatting needed.

#### Tested with these actors

| Actor | Fields auto-detected |
|-------|---------------------|
| **Leads Finder** (code\_crafter) | `first_name`, `last_name`, `company_domain`, `company_website` |
| **Leads Scraper** (pipelinelabs) | `fullName`, `orgWebsite`, `orgName` |
| **B2B Leads Finder** (olympus) | `name`, `company` |
| **Leads Prospector Pro** (leadzen) | `first_name`, `last_name`, `job_company_website`, `job_company_name` |
| **Apollo People Leads Scraper** (coladeu) | `first_name`, `last_name`, `organization_name` |

Works with any actor that outputs standard contact fields.

#### How to chain actors

**Option 1: Dataset ID (easiest)**

Run your leads scraper, copy the dataset ID from the run results, and paste it:

```json
{
    "datasetId": "abc123XYZ",
    "mode": "optimized"
}
```

**Option 2: Dataset URL via file input**

Pass the dataset export URL in the file field:

```json
{
    "csvFile": "https://api.apify.com/v2/datasets/YOUR_DATASET_ID/items?format=csv",
    "mode": "optimized"
}
```

**Option 3: Download and upload**

Export the leads scraper dataset as CSV, then upload it via file upload. The actor detects columns automatically.

#### Google Sheets

Paste a Google Sheets URL directly as the file input. Make the sheet readable first:

1. Open the sheet and click **Share**.
2. Under **General access**, choose **Anyone with the link**.
3. Set the role to **Viewer**, then copy the link.

If the sheet stays private, the run stops with a clear message asking you to share it, and no email lookups are charged. If you also entered people directly, those are still processed.

```json
{
    "csvFile": "https://docs.google.com/spreadsheets/d/1cYOJX228.../edit?usp=sharing",
    "mode": "optimized"
}
```

### Output Examples

#### Individual Person Results

Each person gets a result showing whether their email was found:

```json
// ✅ Email Found (with alternatives)
{
    "firstName": "John",
    "surname": "Doe",
    "domain": "company.com",
    "email": "john.doe@company.com",
    "status": "found",
    "isDeliverable": true,
    "variationsTested": 4,
    "patternsValidated": 4,
    "validationStatus": "safe",
    "isSafeToSend": true,
    "isCatchAll": false,
    "isDisposable": false,
    "isRoleAccount": false,
    "overallScore": 95,
    "alternativeEmails": [
        {
            "email": "johndoe@company.com",
            "status": "safe",
            "isSafeToSend": true,
            "isCatchAll": false,
            "overallScore": 92
        },
        {
            "email": "j.doe@company.com",
            "status": "catch_all",
            "isSafeToSend": false,
            "isCatchAll": true,
            "overallScore": 75
        }
    ]
}

// ✅ Email Found (company name resolved)
{
    "firstName": "Jane",
    "surname": "Smith",
    "domain": "gs.com",
    "domainResolved": true,
    "originalCompany": "Goldman Sachs",
    "email": "jane.smith@gs.com",
    "status": "found",
    "isDeliverable": true,
    "variationsTested": 4,
    "validationStatus": "safe",
    "isSafeToSend": true
}

// ✅ Business Email Found (no person name needed)
{
    "firstName": "",
    "surname": "",
    "businessName": "Serenity Dental Spa",
    "domain": "serenitydentalspa.com",
    "email": "info@serenitydentalspa.com",
    "status": "found",
    "isDeliverable": true,
    "variationsTested": 6,
    "isRoleAccount": true
}

// ❌ Email Not Found
{
    "firstName": "Bob",
    "surname": "Wilson",
    "domain": "business.org",
    "email": null,
    "status": "not_found",
    "isDeliverable": false,
    "variationsTested": 4  // Tested all patterns in optimized mode
}

// 🎯 Multiple Validated Emails (Best Selected)
{
    "firstName": "Robert",
    "surname": "Johnson",
    "domain": "enterprise.com",
    "email": "rjohnson@enterprise.com",
    "status": "found",
    "isDeliverable": true,
    "variationsTested": 4,  // All 4 patterns tested in optimized mode
    "patternsValidated": 4,
    "validationStatus": "safe",
    "isSafeToSend": true,
    "isCatchAll": false,
    "isDisposable": false,
    "isRoleAccount": false,
    "overallScore": 98,
    "alternativeEmails": [
        {
            "email": "robert.johnson@enterprise.com",
            "status": "catch_all",
            "isSafeToSend": false,
            "isCatchAll": true,
            "overallScore": 75
        }
    ]
}

// ❓ Email Found with Unknown Status (Common for Corporate)
{
    "firstName": "Sarah",
    "surname": "Williams",
    "domain": "enterprise-corp.com",
    "email": "s.williams@enterprise-corp.com",
    "status": "found",
    "isDeliverable": true,
    "variationsTested": 4,
    "patternsValidated": 4,
    "validationStatus": "unknown",  // Can't verify due to corporate security
    "isSafeToSend": false,  // Unknown status means verification incomplete
    "isCatchAll": false,
    "isDisposable": false,
    "isRoleAccount": false,
    "overallScore": 50,
    "alternativeEmails": [
        {
            "email": "sarah.williams@enterprise-corp.com",
            "status": "unknown",  // Same reason - corporate firewall
            "isSafeToSend": false,
            "isCatchAll": false,
            "overallScore": 50
        }
    ],
    "note": "Unknown status is expected for enterprise domains with strict security policies"
}
```

#### 📊 Summary Report

After processing all people, you'll get a comprehensive summary:

```json
{
    "totalProcessed": 10,
    "emailsFound": 7,
    "totalVariationsTested": 40,
    "averageVariationsPerPerson": 4.0,
    "successRate": "70.0%",
    "mode": "optimized"
}
```

The summary shows:

- **Success Rate**: Percentage of people for whom valid emails were found
- **Comprehensive Testing**: All patterns in mode tested for thorough validation (4 or 10)
- **Total Variations**: Total API calls made across all searches
- **Mode Used**: Whether optimized (4 patterns) or expanded (10 patterns) mode was used

### Understanding Your Results

#### Discovery Status

| Status | Symbol | Meaning | Next Step |
|--------|--------|---------|-----------|
| **found** | ✅ | Valid email discovered | Add to outreach list |
| **not\_found** | ❌ | No valid email found after testing all patterns | Try expanded mode or manual search |

#### Validation Status Indicators

When an email is found, it includes a `validationStatus` field indicating deliverability quality:

| Status | Symbol | Meaning | Action for B2B Outreach |
|--------|--------|---------|-------------------------|
| **safe** | ✅ | Email verified as deliverable and safe | Highest priority - use immediately |
| **catch\_all** | 🎣 | Domain accepts all emails (can't verify specific mailbox) | Use with caution - monitor bounce rates |
| **unknown** | ❓ | Validation couldn't be completed | **Common for corporate emails** - see below |
| **risky** | ⚠️ | Email might have deliverability issues | Consider removing or testing carefully |
| **invalid** | ❌ | Email will bounce | Do not use |
| **disposable** | 🗑️ | Temporary email address | Do not use for B2B |

#### Understanding "Unknown" Status

**What does "unknown" mean?**
The validation service couldn't definitively verify this email address. This **does NOT mean the email is invalid** - it means verification couldn't be completed due to the recipient server's security measures.

**Common reasons for "unknown" status:**

- **Corporate firewalls** - Enterprise domains often block external validation attempts
- **Greylisting** - Servers temporarily reject validation checks to prevent spam
- **Anti-validation measures** - Large companies intentionally hide mailbox existence
- **Strict security policies** - Government, financial, healthcare, and Fortune 500 companies

**For B2B Email Discovery:**
Unknown status is **extremely common** when finding emails at enterprise companies. Many legitimate decision-makers at large corporations will return unknown status.

**How to handle unknown emails in B2B outreach:**

- ✅ **Sales prospecting**: Definitely use them - corporate contacts often return unknown
- ✅ **Executive outreach**: Expected for C-suite at large companies
- ✅ **Enterprise ABM**: Unknown is normal for target accounts with strong security
- ⚠️ **Consumer marketing**: Higher risk - evaluate based on your use case
- 💡 **Best practice**: Test with a small batch first to establish baseline delivery rates

**Example scenario:**
You discover `john.doe@microsoft.com` with status "unknown". This is typical because Microsoft (like most enterprises) blocks email verification attempts. The email pattern is likely correct and deliverable - the unknown status reflects Microsoft's security, not an invalid email.

#### Quality Score Interpretation

Each found email includes an `overallScore` (0-100) indicating reliability:

| Score Range | Quality | Interpretation | B2B Recommendation |
|-------------|---------|----------------|-------------------|
| **90-100** | Excellent | Verified safe email | Use immediately with confidence |
| **70-89** | Good | Deliverable with minor considerations | Safe to use for outreach |
| **50-69** | Moderate | Likely deliverable but unverified | **Use for corporate/enterprise contacts** |
| **30-49** | Low | Uncertain deliverability | Test cautiously or skip |
| **0-29** | Very Low | High risk of bounce | Do not use |

**Note for B2B Users:** Scores in the 50-69 range often indicate corporate emails with "unknown" status. These are frequently valid emails from large companies with strong security measures - don't automatically discard them for B2B prospecting.

#### Pattern Testing Strategy

**Optimized Mode:**

- Tests all 4 most statistically common patterns in parallel
- Fast validation (~5-7 seconds) with comprehensive results
- Returns best email plus all validated alternatives for maximum value

**Expanded Mode:**

- Tests all 10 patterns in parallel for maximum coverage
- Thorough validation (~10-12 seconds) with complete results
- Perfect for high-value prospects or when optimized mode finds no emails

#### Understanding Metrics

- **variationsTested**: Total patterns tested in your chosen mode (4 or 10)
- **patternsValidated**: Number of patterns that successfully validated
- **alternativeEmails**: Additional validated emails beyond the best match
- **overallScore**: Quality score (0-100) indicating email reliability
- **domainResolved**: `true` when a company name was resolved to a domain (only present when resolution occurred)
- **originalCompany**: The original company name before resolution (only present when resolution occurred)
- **businessName**: The business name from directory exports (only present for business-mode entries)
- **nicknameUsed**: The alternate first name that found the email (only present when a nickname matched)
- Higher scores mean more reliable emails (safe > catch-all > risky)

### Use Cases by Industry

#### 🎯 **B2B Sales Teams**

Find decision-maker emails from LinkedIn profiles and company websites for targeted outreach.

#### 🚀 **Recruiters & HR**

Discover candidate emails when you have names from resumes or LinkedIn but need direct contact.

#### 📧 **Email Marketing Agencies**

Build targeted email lists from conference attendee lists or industry directories.

#### 📊 **Lead Generation Agencies**

Convert incomplete lead data (name + company) into actionable email contacts.

#### 🏢 **Account-Based Marketing**

Find emails for specific personas at target accounts for personalized campaigns.

#### 💼 **Business Development**

Reach out to potential partners and vendors when you only have names and companies.

### Performance & Limits

- **Batch Size**: Process hundreds of people per run
- **Success Rate**: 70-85% typical email discovery rate
- **Response Time**: ~5-7 seconds per person in optimized mode (parallel validation)
- **Comprehensive Results**: 2-4 validated emails per person on average
- **Quality Ranking**: Best email automatically selected from all validated results

### Security & Compliance

- ✅ GDPR Compliant
- ✅ No data retention after processing
- ✅ Encrypted data transmission
- ✅ No cookies or tracking

### Pro Tips for Best Results

1. **Start with Optimized Mode**: Fast (5-7s) and covers 85% of cases - perfect for bulk processing
2. **Leverage Alternative Emails**: Use the 2-4 validated emails per person for A/B testing and backup
3. **Don't Fear "Unknown" Status**: Many legitimate corporate emails return unknown due to security measures - especially common at Fortune 500 companies
4. **Use All Deliverable Results**: For B2B prospecting, use emails with safe, catch\_all, AND unknown status - all are marked as deliverable
5. **Clean Domains First**: Ensure domains are valid (no URLs, paths, or protocols)
6. **Batch Similar Companies**: Companies often use consistent email patterns
7. **Use Expanded Mode for VIPs**: When optimized finds nothing or for critical prospects
8. **Trust the Quality Ranking**: Best email is automatically selected - safe emails prioritized over catch-all and unknown
9. **Test Corporate Unknowns**: Unknown status from enterprise domains (.com, .org from large companies) are usually valid

### When to Use This Email Finder

#### Sales Prospecting

- LinkedIn leads without contact info
- Conference attendee lists
- Target account penetration
- Industry directory mining

#### Recruitment

- Candidate sourcing from resumes
- Passive candidate outreach
- Industry talent mapping
- Alumni network building

#### Marketing Campaigns

- Event attendee follow-up
- Content promotion to prospects
- Account-based marketing
- Partnership development

### Programmatic Access (API)

#### Send all people in one run (recommended)

**Don't call the actor once per person.** Send your entire list in a single run. This saves you the $0.005 actor start fee per call and is much faster.

| Approach | 1000 People | Start Fees | Total Cost |
|----------|------------|------------|------------|
| 1 person per run (slow) | 1000 runs | $5.00 | ~$21 |
| **All in one run (fast)** | **1 run** | **$0.005** | **~$16** |

##### JavaScript/Node.js

```javascript
const { ApifyClient } = require('apify-client');
const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });

// Start ONE run with ALL your people
const run = await client.actor('clearpath/email-finder-api').call({
    mode: 'optimized',
    people: [
        { firstName: 'John', surname: 'Doe', domain: 'company.com' },
        { firstName: 'Jane', surname: 'Smith', domain: 'business.org' },
        // ... add hundreds or thousands of people here
    ]
});

// Get all results
const { items } = await client.dataset(run.defaultDatasetId).listItems();
const found = items.filter(item => item.status === 'found');
console.log(`Found ${found.length} emails out of ${items.length}`);
```

##### Python

```python
from apify_client import ApifyClient
client = ApifyClient('YOUR_APIFY_TOKEN')

## Start ONE run with ALL your people
run = client.actor('clearpath/email-finder-api').call(run_input={
    'mode': 'optimized',
    'people': [
        {'firstName': 'John', 'surname': 'Doe', 'domain': 'company.com'},
        {'firstName': 'Jane', 'surname': 'Smith', 'domain': 'business.org'},
        # ... add hundreds or thousands of people here
    ]
})

## Get all results
items = client.dataset(run['defaultDatasetId']).list_items().items
found = [i for i in items if i.get('status') == 'found']
print(f'Found {len(found)} emails out of {len(items)}')
```

##### Direct API (curl)

```bash
## Start a run with multiple people
curl -X POST "https://api.apify.com/v2/acts/clearpath~email-finder-api/runs?token=YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "mode": "optimized",
    "people": [
      {"firstName": "John", "surname": "Doe", "domain": "company.com"},
      {"firstName": "Jane", "surname": "Smith", "domain": "business.org"}
    ]
  }'

## Then fetch results from the dataset
curl "https://api.apify.com/v2/datasets/DATASET_ID/items?token=YOUR_TOKEN"
```

#### Integration Examples

Once you have the found emails, you can:

- **Import to CRM**: Add new contacts with verified emails
- **Start Outreach**: Begin email sequences with confidence
- **Enrich Database**: Update existing records with discovered emails
- **Export for Teams**: Share results with sales/marketing teams

### ROI Calculator

**For every 100 prospects processed:**

- Find ~70-85 valid email addresses
- Save 5-10 hours of manual research
- Enable direct outreach vs. cold LinkedIn messages
- Increase response rates by 3-5x with email vs. social
- Generate 10-15 qualified leads (typical 15-20% response rate)

### Pricing - Pay Per Event (PPE)

**Transparent pay-per-event pricing - you only pay for email patterns actually tested!**

#### How PPE Works

This actor uses Apify's Pay-Per-Event model. You're charged for:

1. **Actor Start**: One-time charge when the actor begins ($0.005)
2. **Email Pattern Tested**: Charged for each validation attempt ($0.008 per pattern)

#### Cost Examples

| Mode | Patterns Tested | Charged For | Cost per Person\* | 100 People | 1000 People |
|------|----------------|-------------|------------------|------------|-------------|
| **Optimized** | 4 patterns | 2 events | $0.016 | $1.60 | $16.00 |
| **Expanded** | 10 patterns | 6 events | $0.048 | $4.80 | $48.00 |

*\*Per-person cost excludes the one-time $0.005 actor\_start fee per run. All patterns in your chosen mode are tested comprehensively. You receive the best email plus all validated alternatives. Special pricing: pay for 2 patterns in optimized mode (get 4), pay for 6 patterns in expanded mode (get 10) - maximum value!*

#### Event Breakdown

- **actor\_start**: $0.005 per run (flat fee)
- **email\_pattern\_tested**: $0.008 per validation
- **nickname\_retry**: $0.008 per validation (only when `useNicknames` is enabled and standard patterns found nothing)

#### Value Maximization

- **Special Pricing**: Pay for 2 patterns, get 4 tested (optimized) or pay for 6, get 10 tested (expanded)
- All patterns in your chosen mode tested comprehensively
- Parallel validation for fast results (5-7 seconds in optimized mode)
- Best email automatically selected using quality scoring
- Receive 2-4 validated email options per person on average
- **50% more value**: Test 2x as many patterns as you're charged for!
- Full transparency: See exactly how many patterns were tested and validated

#### Example Pricing Scenarios

**Small batch (10 contacts, optimized mode):**

- Actor start: $0.005
- 20 events charged (10 people × 2): $0.16
- **Total: ~$0.165**
- **Patterns tested: 40** (10 people × 4 patterns)
- **Value: ~30 validated emails (average 3 per person)** 🎁

**Medium batch (100 contacts, optimized mode):**

- Actor start: $0.005
- 200 events charged (100 people × 2): $1.60
- **Total: ~$1.605**
- **Patterns tested: 400** (100 people × 4 patterns)
- **Value: ~300 validated emails (average 3 per person)** 🎁

**Large batch (1000 contacts, expanded mode):**

- Actor start: $0.005
- 6,000 events charged (1000 people × 6): $48.00
- **Total: ~$48.005**
- **Patterns tested: 10,000** (1000 people × 10 patterns)
- **Value: ~3,500 validated emails (average 3.5 per person)** 🎁

**Nickname retry example (Elizabeth, optimized, `useNicknames: true`):**

- Standard patterns: 2 events ($0.016)
- If "liz" hits on first nickname try: +2 events ($0.016)
- **Total: 4 events ($0.032)**
- Nicknames are tested one at a time and stop on first hit

Contact us for custom enterprise pricing and volume discounts.

### Get Started

1. Add people (names + domains) or upload a CSV file
2. Choose mode: "optimized" (fast) or "expanded" (thorough)
3. Run the Email Finder
4. Export found emails with contact details
5. Start your outreach campaign!

***

### Support

- 📧 **Email**: max@mapa.slmail.me
- 🐛 **Issues**: Use the Issues tab for bug reports and feature requests
- 💬 **Response time**: Usually within 24 hours
- 🔧 **Custom features**: Available upon request

**Stop searching. Start finding.** Transform names and companies into actionable email contacts.

[🚀 **Start Finding Business Emails**](https://console.apify.com/actors/eWT8czb4kT3gH1OWt)

# Actor input Schema

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

Add people as JSON objects.<br><br><b>Required fields:</b> <code>firstName</code>, <code>surname</code>, <code>domain</code><br><br><b>Flexible input:</b> Also accepts <code>lastName</code>, <code>last\_name</code>, <code>first\_name</code>, <code>website</code>, <code>companyDomain</code>, <code>organization</code>, <code>fullName</code>, or a <code>name</code> field (auto-split into first/last).<br><br><b>Company names:</b> Pass a company name instead of a domain (e.g., <code>"Goldman Sachs"</code>) and it resolves automatically.<br><br><b>Chain actors:</b> Output from leads scrapers (Apollo, LinkedIn, etc.) can be passed directly as input. Fields like <code>orgName</code>, <code>company\_website</code>, <code>job\_company\_name</code> are auto-detected.

## `csvFile` (type: `string`):

Upload a CSV or Excel file (.xlsx), or paste a Google Sheets link or file URL.<br><br>The actor auto-detects columns for first name, last name, and domain. It also handles business-only files (Google Maps, Yelp exports) with a business name and website column.<br><br><b>Google Sheets:</b> open the sheet, click Share, and set <b>Anyone with the link</b> to Viewer before pasting the link.<br><br><b>Permissions:</b> files you upload here, and datasets on your own account, are read automatically. Any other link must be publicly accessible.

## `datasetId` (type: `string`):

Pass a dataset ID from another Apify actor (e.g., a leads scraper). The actor reads the dataset as CSV and auto-detects name and domain columns. Private datasets on your own account are read automatically.<br><br><b>How to use:</b> Run a leads scraper, copy the dataset ID from the run output, and paste it here.

## `mode` (type: `string`):

<b>Optimized:</b> 4 most common patterns, covers ~85% of cases.<br><b>Expanded:</b> 10 patterns, covers ~95% of cases.

## `useNicknames` (type: `boolean`):

When no email is found, retry with common nicknames (e.g., Elizabeth → Liz, Robert → Bob). Each nickname retry is charged as a separate event.

## Actor input object example

```json
{
  "people": [
    {
      "firstName": "John",
      "surname": "Doe",
      "domain": "company.com"
    },
    {
      "firstName": "Jane",
      "surname": "Smith",
      "domain": "Goldman Sachs"
    }
  ],
  "mode": "optimized",
  "useNicknames": false
}
```

# Actor output Schema

## `results` (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 = {
    "people": [
        {
            "firstName": "Dario",
            "surname": "Amodei",
            "domain": "anthropic.com"
        }
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("clearpath/email-finder-api").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": [{
            "firstName": "Dario",
            "surname": "Amodei",
            "domain": "anthropic.com",
        }] }

# Run the Actor and wait for it to finish
run = client.actor("clearpath/email-finder-api").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).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": [
    {
      "firstName": "Dario",
      "surname": "Amodei",
      "domain": "anthropic.com"
    }
  ]
}' |
apify call clearpath/email-finder-api --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=clearpath/email-finder-api",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Email Finder & Verifier - B2B Email Lookup API",
        "description": "Find verified business emails using first name, last name, and company domain. Tests common patterns and validates with SMTP checks. Upload CSV or Excel files for bulk processing. Returns quality-ranked results with alternative emails and confidence scores. Export to JSON or CSV.",
        "version": "0.0",
        "x-build-id": "NAgOMifcfvPQw9FBU"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/clearpath~email-finder-api/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-clearpath-email-finder-api",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/clearpath~email-finder-api/runs": {
            "post": {
                "operationId": "runs-sync-clearpath-email-finder-api",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/clearpath~email-finder-api/run-sync": {
            "post": {
                "operationId": "run-sync-clearpath-email-finder-api",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "people": {
                        "title": "People to find emails for",
                        "minItems": 0,
                        "maxItems": 1000,
                        "type": "array",
                        "description": "Add people as JSON objects.<br><br><b>Required fields:</b> <code>firstName</code>, <code>surname</code>, <code>domain</code><br><br><b>Flexible input:</b> Also accepts <code>lastName</code>, <code>last_name</code>, <code>first_name</code>, <code>website</code>, <code>companyDomain</code>, <code>organization</code>, <code>fullName</code>, or a <code>name</code> field (auto-split into first/last).<br><br><b>Company names:</b> Pass a company name instead of a domain (e.g., <code>\"Goldman Sachs\"</code>) and it resolves automatically.<br><br><b>Chain actors:</b> Output from leads scrapers (Apollo, LinkedIn, etc.) can be passed directly as input. Fields like <code>orgName</code>, <code>company_website</code>, <code>job_company_name</code> are auto-detected.",
                        "items": {
                            "type": "object",
                            "properties": {
                                "firstName": {
                                    "title": "First Name",
                                    "type": "string",
                                    "description": "First name of the person"
                                },
                                "surname": {
                                    "title": "Last Name",
                                    "type": "string",
                                    "description": "Last name/surname of the person"
                                },
                                "domain": {
                                    "title": "Domain",
                                    "type": "string",
                                    "description": "Company domain (e.g., <code>company.com</code>) or company name (e.g., <code>Goldman Sachs</code>). Company names are resolved to domains automatically."
                                }
                            },
                            "required": [
                                "firstName",
                                "surname",
                                "domain"
                            ]
                        }
                    },
                    "csvFile": {
                        "title": "CSV or Excel File",
                        "type": "string",
                        "description": "Upload a CSV or Excel file (.xlsx), or paste a Google Sheets link or file URL.<br><br>The actor auto-detects columns for first name, last name, and domain. It also handles business-only files (Google Maps, Yelp exports) with a business name and website column.<br><br><b>Google Sheets:</b> open the sheet, click Share, and set <b>Anyone with the link</b> to Viewer before pasting the link.<br><br><b>Permissions:</b> files you upload here, and datasets on your own account, are read automatically. Any other link must be publicly accessible."
                    },
                    "datasetId": {
                        "title": "Dataset ID (from another actor)",
                        "type": "string",
                        "description": "Pass a dataset ID from another Apify actor (e.g., a leads scraper). The actor reads the dataset as CSV and auto-detects name and domain columns. Private datasets on your own account are read automatically.<br><br><b>How to use:</b> Run a leads scraper, copy the dataset ID from the run output, and paste it here."
                    },
                    "mode": {
                        "title": "Search Mode",
                        "enum": [
                            "optimized",
                            "expanded"
                        ],
                        "type": "string",
                        "description": "<b>Optimized:</b> 4 most common patterns, covers ~85% of cases.<br><b>Expanded:</b> 10 patterns, covers ~95% of cases.",
                        "default": "optimized"
                    },
                    "useNicknames": {
                        "title": "Try Nicknames",
                        "type": "boolean",
                        "description": "When no email is found, retry with common nicknames (e.g., Elizabeth → Liz, Robert → Bob). Each nickname retry is charged as a separate event.",
                        "default": false
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
