# Apollo Lead Verifier — Email Deliverability & Bounce Score (`irreplaceable_chip/apollo-lead-verifier`) Actor

Drop in your Apollo, LinkedIn, or ZoomInfo CSV. Get back per-lead email verification, catch-all flagging, role-account detection, and a 0–100 deliverability score. $0.04/lead. Catches the 15–35% bounce rate Apollo leaves behind.

- **URL**: https://apify.com/irreplaceable\_chip/apollo-lead-verifier.md
- **Developed by:** [linxin](https://apify.com/irreplaceable_chip) (community)
- **Categories:** Business, Marketing
- **Stats:** 2 total users, 1 monthly users, 0.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-usage

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

## Apollo Lead Verifier

**Apollo says 91% email accuracy. Real users report 65-80%.** This Actor closes that gap.

Upload any Apollo/LinkedIn/ZoomInfo CSV export. Get back a clean CRM-ready CSV with per-lead email deliverability scoring, role-account detection, and bounce risk flags.

### Why this exists

Across 9,000+ G2 reviews of Apollo, "Inaccurate Data" is the #1 complaint (638 mentions). Real-world bounce rates sit at 15-35% per Apollo-sourced lists. Teams running cold outbound off Apollo end up:

- Burning sender reputation (bounces tank deliverability)
- Wasting rep time on dead emails
- Hitting credit limits on data they can't use

### What it does

1. **Parses** any Apollo/LinkedIn/ZoomInfo CSV (auto-detects email column)
2. **Normalizes** email addresses (strips whitespace, fixes common typos)
3. **Verifies** each email:
   - RFC format check
   - DNS MX record lookup
   - SMTP RCPT TO probe
   - Optional catch-all detection (strict mode)
4. **Detects** role-accounts (`info@`, `contact@`, `noreply@`...) that hit shared inboxes
5. **Detects** disposable email providers (Mailinator, Yopmail, ...)
6. **Flags** free providers (Gmail, Yahoo, ...) separately from business email
7. **Scores** each lead 0-100 for deliverability
8. **Sorts** output high-score first — what you want in your CRM is at the top
9. **Writes** a clean CSV back to the Key-Value Store, ready for direct download

### Input

| Field | Type | Required | Default | Description |
|---|---|---|---|---|
| `csvUrl` | string | one of | - | Public URL to a CSV (Google Sheets "Publish to web" CSV, Dropbox, S3) |
| `csvContent` | string | one of | - | Raw CSV text (max 5MB) |
| `emailColumn` | string | no | auto-detect | Header name of the email column |
| `firstNameColumn` | string | no | auto-detect | Header name of first name |
| `lastNameColumn` | string | no | auto-detect | Header name of last name |
| `verificationLevel` | enum | no | `standard` | `fast` (format+MX), `standard` (+SMTP), `strict` (+catch-all detection) |
| `maxLeads` | integer | no | 0 (unlimited) | Cap on rows processed |

### Output

For each row, the Actor adds:

| Column | Description |
|---|---|
| `verified_email` | The normalized email |
| `verification_status` | `valid` / `risky` / `invalid` / `role_account` / `disposable` |
| `deliverability_score` | 0-100 (higher = safer to send) |
| `verification_reason` | Human-readable reason for the status |
| `format_ok` | Boolean: RFC format check passed |
| `mx_found` | Boolean: domain has MX records |
| `smtp_check` | `ok` / `ok_likely` / `fail` / `catch_all` / `catch_all_likely` / `skipped` |
| `is_role_account` | Boolean: shared inbox (`info@`, `sales@`, ...) |
| `is_free_provider` | Boolean: Gmail/Yahoo/etc. |
| `is_disposable` | Boolean: Mailinator/Yopmail/etc. |
| `domain` | The email's domain |

A summary record is also pushed to the dataset with counts per status.

### Pricing

Pay-per-event:
- `actor-start`: $0.05 (once per run)
- `lead-verified`: $0.04 per lead verified

Example: verify 1,000 leads = $0.05 + (1,000 × $0.04) = **$40.05**

### How to deploy

1. Create a new Actor in [Apify Console](https://console.apify.com/actors)
2. Choose **"Import from GitHub"** (after pushing this repo)
3. Or push via CLI: `apify push` (requires APIFY_TOKEN)
4. Set base image to `Python 3.11`
5. Build command: `pip install -r requirements.txt`
6. Start command: `python src/main.py`

### Test locally

```bash
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
python3 test_e2e.py
````

The test runs against 10 simulated Apollo leads and prints a verification report.

### Limitations

- SMTP probes require outbound port 25. Some cloud providers (AWS, GCP) restrict this by default. Apify's Docker host allows it; if you self-host, you may need to allow port 25.
- Catch-all detection (strict mode) is heuristic and can produce false positives for permissive servers.
- This Actor does NOT enrich data — it only verifies what you upload.

### License

MIT

# Actor input Schema

## `csvUrl` (type: `string`):

URL to a CSV file (Google Sheets 'Publish to web' CSV, Dropbox, S3, etc.). Leave empty if uploading directly.

## `csvContent` (type: `string`):

Paste the raw CSV content here if you don't have a public URL. Max 5MB.

## `emailColumn` (type: `string`):

Name of the column containing the email address (e.g. 'email', 'Email', 'work\_email'). Auto-detected if empty.

## `firstNameColumn` (type: `string`):

Helps detect generic role-accounts vs real contacts.

## `lastNameColumn` (type: `string`):

Helps detect generic role-accounts vs real contacts.

## `verificationLevel` (type: `string`):

standard = MX + SMTP + format. strict = + catch-all detection (slower). fast = format + MX only (no SMTP).

## `maxLeads` (type: `integer`):

Cap on rows processed. Use 0 for unlimited.

## Actor input object example

```json
{
  "emailColumn": "",
  "firstNameColumn": "",
  "lastNameColumn": "",
  "verificationLevel": "standard",
  "maxLeads": 0
}
```

# 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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("irreplaceable_chip/apollo-lead-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 = {}

# Run the Actor and wait for it to finish
run = client.actor("irreplaceable_chip/apollo-lead-verifier").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 '{}' |
apify call irreplaceable_chip/apollo-lead-verifier --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=irreplaceable_chip/apollo-lead-verifier",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Apollo Lead Verifier — Email Deliverability & Bounce Score",
        "description": "Drop in your Apollo, LinkedIn, or ZoomInfo CSV. Get back per-lead email verification, catch-all flagging, role-account detection, and a 0–100 deliverability score. $0.04/lead. Catches the 15–35% bounce rate Apollo leaves behind.",
        "version": "0.1",
        "x-build-id": "Cuha84bs0SB9kJGao"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/irreplaceable_chip~apollo-lead-verifier/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-irreplaceable_chip-apollo-lead-verifier",
                "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/irreplaceable_chip~apollo-lead-verifier/runs": {
            "post": {
                "operationId": "runs-sync-irreplaceable_chip-apollo-lead-verifier",
                "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/irreplaceable_chip~apollo-lead-verifier/run-sync": {
            "post": {
                "operationId": "run-sync-irreplaceable_chip-apollo-lead-verifier",
                "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": {
                    "csvUrl": {
                        "title": "Public CSV URL",
                        "type": "string",
                        "description": "URL to a CSV file (Google Sheets 'Publish to web' CSV, Dropbox, S3, etc.). Leave empty if uploading directly."
                    },
                    "csvContent": {
                        "title": "Or paste CSV text directly",
                        "type": "string",
                        "description": "Paste the raw CSV content here if you don't have a public URL. Max 5MB."
                    },
                    "emailColumn": {
                        "title": "Email column name",
                        "type": "string",
                        "description": "Name of the column containing the email address (e.g. 'email', 'Email', 'work_email'). Auto-detected if empty.",
                        "default": ""
                    },
                    "firstNameColumn": {
                        "title": "First name column (optional)",
                        "type": "string",
                        "description": "Helps detect generic role-accounts vs real contacts.",
                        "default": ""
                    },
                    "lastNameColumn": {
                        "title": "Last name column (optional)",
                        "type": "string",
                        "description": "Helps detect generic role-accounts vs real contacts.",
                        "default": ""
                    },
                    "verificationLevel": {
                        "title": "Verification level",
                        "enum": [
                            "fast",
                            "standard",
                            "strict"
                        ],
                        "type": "string",
                        "description": "standard = MX + SMTP + format. strict = + catch-all detection (slower). fast = format + MX only (no SMTP).",
                        "default": "standard"
                    },
                    "maxLeads": {
                        "title": "Max leads to process",
                        "minimum": 0,
                        "maximum": 50000,
                        "type": "integer",
                        "description": "Cap on rows processed. Use 0 for unlimited.",
                        "default": 0
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
