# Email Verifier & Validator | Bulk Email Verification (`michael.g/email-verifier-validator`) Actor

Bulk email verifier and email validator for email list verification. Verify email addresses, detect invalid emails, check deliverability, and clean email lists to reduce bounce rates.

- **URL**: https://apify.com/michael.g/email-verifier-validator.md
- **Developed by:** [Michael G](https://apify.com/michael.g) (community)
- **Categories:** Lead generation, Automation, MCP servers
- **Stats:** 1,732 total users, 445 monthly users, 100.0% runs succeeded, 58 bookmarks
- **User rating**: 4.69 out of 5 stars

## Pricing

from $0.60 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
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

### What Does Email Verifier & Validator Do?

The Email Verifier actor analyzes email addresses and returns a clear deliverability decision together with detailed verification data.

For each email address, the actor:

1. Runs a verification flow inside the actor engine.
2. Normalizes verification signals into a stable schema.
3. Calculates a custom deliverability score between `0` and `100`.
4. Determines both business status (`good`, `risky`, `bad`) and technical status.
5. Stores full verification data in `verification_details`.
6. Saves results to the Apify dataset.

### What checks are performed?

| Check | Description |
|------|-------------|
| Syntax validation | Verifies that the email address format is valid |
| Domain & MX records | Checks that the domain exists and has mail servers |
| SMTP reachability | Tests if the mail server responds to mailbox verification |
| Catch-all detection | Detects domains that accept all email addresses |
| Disposable email detection | Identifies temporary email services |
| Role-based email detection | Flags addresses like `info@`, `support@`, `admin@` |
| Free email provider detection | Detects providers like Gmail, Yahoo, Outlook |
| Email tagging | Detects `+tag` addresses (for example `user+test@gmail.com`) |

### Status Fields

#### Business Status (`status`)

| Status | Meaning |
|------|------|
| good | Email appears safe to send |
| risky | Sending may work but involves uncertainty |
| bad | Sending likely results in bounce |

Status is derived from a deliverability score between 0 and 100.

#### Technical Status (`technical_status`)

| Status | Meaning |
|------|------|
| valid | Mailbox confirmed |
| invalid | Syntax or infrastructure invalid |
| unknown | Infrastructure exists but SMTP unreachable |
| catch\_all | Domain accepts any email address |
| disposable | Disposable email detected |
| error | Verification request failed |

#### Reason (`reason`)

| Reason | Meaning |
|------|------|
| request\_failed | Verification request failed |
| invalid\_syntax | Email format is invalid |
| no\_mail\_infrastructure | Domain has neither MX nor A fallback records |
| disposable\_email | Disposable mailbox was detected |
| catch\_all\_domain | Domain accepts all recipients |
| smtp\_unreachable | SMTP host did not provide a reachable mailbox signal |
| ok | No risk reason was triggered |

***

### Why Verify Emails?

Email verification is not just about filtering invalid addresses. It helps protect delivery performance and keeps your outbound workflows predictable.

- **Protect sender reputation**: High bounce rates can damage domain and mailbox reputation, which reduces inbox placement over time.
- **Reduce wasted volume**: Invalid and temporary addresses consume sending capacity without creating business value.
- **Improve campaign performance**: Cleaner lists improve the quality of opens, replies, and engagement metrics.
- **Prioritize outreach**: `status`, `technical_status`, `score`, and `reason` let you segment contacts by risk before sending.
- **Keep CRM data healthy**: Verification helps prevent stale, role-based, and disposable emails from polluting your pipeline.
- **Automate decision logic**: Structured output makes it easy to build no-code or API automations for accept/review/reject flows.

Common use cases:

- **B2B lead qualification**: Filter low-quality and high-risk contacts before they enter your sales pipeline.
- **Outbound campaign control**: Segment recipients by risk and send strategy before launching cold email sequences.
- **CRM cleanup and enrichment**: Remove invalid, disposable, and role-based addresses to keep CRM records actionable.
- **Signup and onboarding validation**: Block invalid or suspicious emails at signup to reduce fake accounts and bad data.
- **Pre-campaign list QA**: Verify old or purchased lists before marketing sends to reduce bounce spikes.

***

### Example Input

Provide a list of emails to verify.

```json
{
  "emails": [
    "jon@doe.com",
    "email@example.com"
  ]
}
```

### Example Output

Each email produces one dataset item.

#### Overview

```json
{
  "email": "jon@doe.com",
  "domain": "doe.com",
  "status": "bad",
  "technical_status": "invalid",
  "reason": "smtp_unreachable",
  "free": false,
  "role": false,
  "disposable": false,
  "error": "none"
}
```

#### Verification Details

```json
{
  "email": "jon@doe.com",
  "domain": "doe.com",
  "status": "bad",
  "technical_status": "invalid",
  "score": 24,
  "reason": "smtp_unreachable",
  "free": false,
  "role": false,
  "disposable": false,
  "catch_all": false,
  "has_tag": false,
  "error": "none",
  "verification_details": {
    "normalized_email": "jon@doe.com",
    "verdict": {
      "is_valid": false,
      "status": "unknown",
      "state": "Not Deliverable",
      "confidence_score": 24,
      "primary_reason": "INVALID MAIL",
      "reasons": ["syntax_ok", "mx_missing_or_unreachable", "a_ok"]
    },
    "classification": {
      "is_free_provider": false,
      "is_role_based": false,
      "is_disposable": false,
      "has_tag": false
    },
    "checks": {
      "syntax_valid": true,
      "mx_records_valid": false,
      "a_record_valid": true,
      "smtp_reachable": false,
      "catch_all_domain": false,
      "mx_hosts": []
    }
  }
}
```

### How Do I Use Email Verifier & Validator?

The Email Verifier actor is designed to help you verify email addresses quickly, even if you have no prior experience.

Follow these steps:

1. **Enter emails**: provide a list of email addresses in actor input.
2. **Run the actor**: click `Start` and wait for verification.
3. **Review results**: open dataset items with verification results.

### How much does Email Verifier & Validator cost?

This actor uses the Pay-per-result pricing model, so your costs can be easily calculated: it will cost you **$1 to verify 1,000 emails**, which is $0.001 per email. Apify provides you with $5 in free usage credits every month on the [Apify Free plan](https://apify.com/pricing?fpr=home), allowing you to **verify up to 50 emails** for free using those credits.

For regular verification, consider upgrading to the [$29/month Starter plan](https://apify.com/pricing?fpr=home), which can **get you up to 29,000 verified emails every month.**

### Integrations and Email Verifier & Validator

Email Verifier & Validator can be connected with almost any cloud service or web app thanks to integrations on the Apify platform. You can integrate with Make, n8n, Zapier, Apollo, Clay, Slack, Airbyte, GitHub, Google Sheets, Google Drive, and [more](https://docs.apify.com/platform/integrations).

### Your feedback

We're always working on improving the performance of our Actors. If you've got any technical feedback for Email Verifier & Validator or simply found a bug, please create an issue on the actor's [Issues tab](https://console.apify.com/actors/u0sG3Wiy5pdt9mIfU/issues) in Apify Console.

# Actor input Schema

## `emails` (type: `array`):

List of email addresses to verify.

## Actor input object example

```json
{
  "emails": [
    "hello@apify.com",
    "test@test.com",
    "bad.example@apify.com"
  ]
}
```

# 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 = {
    "emails": [
        "hello@apify.com",
        "test@test.com",
        "bad.example@apify.com"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("michael.g/email-verifier-validator").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 = { "emails": [
        "hello@apify.com",
        "test@test.com",
        "bad.example@apify.com",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("michael.g/email-verifier-validator").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 '{
  "emails": [
    "hello@apify.com",
    "test@test.com",
    "bad.example@apify.com"
  ]
}' |
apify call michael.g/email-verifier-validator --silent --output-dataset

```

## MCP server setup

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

```

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/u0sG3Wiy5pdt9mIfU/builds/VuWszhpxUGrowYvFt/openapi.json
