# Bulk Email Verifier & List Cleaner (`automation_studio/bulk-unlimited-email-verifier`) Actor

High-speed bulk email verifier & list cleaner ($0.0001/email). Validates RFC syntax, domain DNS A records, MX mail exchangers, SPF security, 3,000+ disposable domains, and role accounts. Exports valid, risky, and invalid lists to CSV, JSON, and TXT.

- **URL**: https://apify.com/automation\_studio/bulk-unlimited-email-verifier.md
- **Developed by:** [Asad Naeem](https://apify.com/automation_studio) (community)
- **Categories:** Developer tools, Automation, Lead generation
- **Stats:** 1 total users, 0 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

from $0.10 / 1,000 verified email results

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 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

## ✉️ Bulk Email Verifier & List Cleaner

**The most affordable, high-speed bulk email verification Actor on the Apify Store.**

Verify email lists, reduce bounce rates, remove disposable addresses, and protect your domain reputation—all for just **$0.0001 per email verified** ($1.00 per 10,000 emails).

***

### 🌟 Why Choose Bulk Email Verifier?

- 💰 **Ultra Affordable:** Pay-per-item pricing at $0.0001/email. Up to 90% cheaper than external verification APIs.
- ⚡ **High Concurrency:** Verify thousands of emails per minute with asynchronous DNS and multi-threaded resolution.
- 🛡️ **3,000+ Disposable Domain Shield:** Detect temporary and throwaway email services (`mailinator`, `yopmail`, `10minutemail`, `tempmail`, etc.).
- 🏢 **Role Account Filter:** Automatically tag business role addresses (`admin@`, `info@`, `support@`, `sales@`, `billing@`, etc.).
- 🔒 **SPF & DMARC DNS Authentication:** Inspect domain TXT records to confirm email security setups.
- 🌐 **SOCKS5 Proxy Support:** Optional SOCKS5 proxy support (`socks5_proxy`) for direct Port 25 SMTP mailbox pinging.
- 📁 **1-Click Export Files:** Automatically generates downloadable `valid.csv`, `valid.txt`, `risky.csv`, `invalid.csv`, and `all_results.json` in your Apify Key-Value Store.

***

### 📊 Output Data Format

For every verified email, you receive structured results:

```json
{
  "email": "alex.smith@example.com",
  "status": "good",
  "result": "valid",
  "score": 100,
  "is_valid": true,
  "is_disposable": false,
  "is_role": false,
  "is_free": false,
  "has_mx": true,
  "has_spf": true,
  "is_catch_all": false,
  "smtp_check": "DELIVERABLE",
  "did_you_mean": null,
  "reason": "Mailbox verified via SMTP",
  "verification_method": "smtp",
  "verified_at": "2026-08-09T22:00:00.000Z"
}
```

#### Result Status Categories:

- **`good` / `valid`**: High deliverability score, active MX records, clean mailbox syntax.
- **`risky` / `role` / `catch_all`**: Business role accounts or server accept-all behavior.
- **`bad` / `invalid`**: Non-existent domains, missing MX records, or rejected mailbox.
- **`disposable`**: Temporary / throwaway email provider.

***

### 🛠️ Input Parameters

| Parameter | Type | Description | Default |
|---|---|---|---|
| `emails` | String / Array | Paste emails (one per line or comma-separated) or array of items | Required |
| `inputDatasetId` | String | Optional Apify Dataset ID to import emails directly from a scraper run | `null` |
| `validate_mx` | Boolean | Validate DNS MX mail exchanger records | `true` |
| `check_smtp` | Boolean | Attempt direct SMTP mailbox verification | `true` |
| `socks5_proxy` | String | Optional SOCKS5 proxy URL (`socks5://user:pass@host:port`) for Port 25 SMTP routing | `""` |
| `check_disposable` | Boolean | Check 3,000+ disposable domain database | `true` |
| `check_role_accounts` | Boolean | Identify role-based addresses (`admin@`, `info@`, etc.) | `true` |
| `max_concurrency` | Integer | Parallel verification batch size (1 to 50) | `15` |

***

### 📥 Downloadable Key-Value Store Files

After every run, the following downloadable files are generated in the Key-Value Store:

- **`VALID_EMAILS_CSV`** (CSV list of clean, valid emails ready for outreach)
- **`VALID_EMAILS_TXT`** (Line-by-line text list of valid emails)
- **`RISKY_EMAILS_CSV`** (CSV list of role and catch-all addresses)
- **`INVALID_EMAILS_CSV`** (CSV list of invalid / bad emails)
- **`ALL_RESULTS_JSON`** (Complete JSON report of all verified records)

***

### 💡 How to Publish to Apify Store

1. Log in to your Apify account at [console.apify.com](https://console.apify.com).
2. Go to your Actor: **Bulk Email Verifier & List Cleaner** (`bulk-email-verifier`).
3. Click the **Publication** tab in the top navigation.
4. Fill in the requested Store details:
   - **Title:** Bulk Email Verifier & List Cleaner
   - **Category:** Marketing, Lead Generation, Developer Tools
   - **Pricing:** Set Pay-per-item at `$0.0001` per item.
5. Upload the unique 3D logo located in `.actor/logo.jpg`.
6. Click **Submit for Publication**!

# Actor input Schema

## `emails` (type: `string`):

Paste one email per line, or separate emails by commas.

## `inputDatasetId` (type: `string`):

ID of an existing Apify Dataset containing emails (e.g. from a scraper run).

## `validate_mx` (type: `boolean`):

Check if the email domain has valid DNS MX mail exchange records.

## `check_smtp` (type: `boolean`):

Attempt direct SMTP connection on port 25/587 to verify mailbox existence.

## `socks5_proxy` (type: `string`):

Optional SOCKS5 proxy URL (e.g., socks5://user:pass@host:port) to route Port 25 SMTP checks when running on firewalled cloud hosts.

## `check_catch_all` (type: `boolean`):

Verify whether the domain mail server accepts all email addresses.

## `check_disposable` (type: `boolean`):

Detect temporary and throwaway email addresses (3,000+ domain database).

## `check_role_accounts` (type: `boolean`):

Detect role-based emails (e.g. admin@, info@, support@, sales@).

## `export_format` (type: `string`):

Format for downloadable key-value store output files.

## `max_concurrency` (type: `integer`):

Number of emails to verify concurrently.

## Actor input object example

```json
{
  "emails": "alex.smith@gmail.com\nsupport@company.com\ntest@mailinator.com\ninvalid-user@nonexistentdomainxyz12345.com",
  "validate_mx": true,
  "check_smtp": true,
  "check_catch_all": true,
  "check_disposable": true,
  "check_role_accounts": true,
  "export_format": "all",
  "max_concurrency": 15
}
```

# Actor output Schema

## `dataset` (type: `string`):

Dataset containing all verified email addresses, deliverability scores, and cleaning status

# 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": `alex.smith@gmail.com
support@company.com
test@mailinator.com
invalid-user@nonexistentdomainxyz12345.com`
};

// Run the Actor and wait for it to finish
const run = await client.actor("automation_studio/bulk-unlimited-email-verifier").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": """alex.smith@gmail.com
support@company.com
test@mailinator.com
invalid-user@nonexistentdomainxyz12345.com""" }

# Run the Actor and wait for it to finish
run = client.actor("automation_studio/bulk-unlimited-email-verifier").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": "alex.smith@gmail.com\\nsupport@company.com\\ntest@mailinator.com\\ninvalid-user@nonexistentdomainxyz12345.com"
}' |
apify call automation_studio/bulk-unlimited-email-verifier --silent --output-dataset

```

## MCP server setup

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

```

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/QgtEbTu3xxjchi9Oh/builds/7SVGXEh2pgTA3YXNB/openapi.json
