Email Enricher+ - High-Fidelity Email Validation & Spam Trap avatar

Email Enricher+ - High-Fidelity Email Validation & Spam Trap

Pricing

from $0.01 / 1,000 results

Go to Apify Store
Email Enricher+ - High-Fidelity Email Validation & Spam Trap

Email Enricher+ - High-Fidelity Email Validation & Spam Trap

Upload raw CSV/JSON contacts. This Actor cleans names and phones, verifies email syntax, checks DNS MX records, and performs SMTP handshake to confirm mailbox existence. GDPR-safe (no email stored after verification). Perfect for cold outreach, lead gen, and CRM import.

Pricing

from $0.01 / 1,000 results

Rating

4.7

(3)

Developer

Nguyễn Anh Duy

Nguyễn Anh Duy

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

0

Monthly active users

2 days ago

Last modified

Share

Email Enricher+ — High-Fidelity Validation & Spam Trap Detection

Run on Apify Apify Marketplace GitHub Repo

Upload raw CSV/JSON contacts. Clean names, phones, emails. Verify deliverability with DNS MX + SPF + SMTP handshake + Catch-All detection. Zero DOM, never breaks. Includes typoSuggestion (Levenshtein), spam trap detection, and 8-category qualityBreakdown.


Tired of scrapers breaking every time Google Maps or LinkedIn updates their HTML layout? This Actor does not scrape web pages. Instead, it cleans, standardizes, and verifies your existing cold leads using pure network logic and protocol-level verification.

Stop wasting your budget on high bounce rates that burn your cold email domains. Clean your data instantly with zero maintenance overhead.


Key Features

  • Layer 1: Intelligent Data Normalization - Standardizes first/last names, strips messy characters from phone numbers, and formats them into clean strings.
  • Layer 2: DNS MX & SPF Validation - Automatically resolves Domain MX records to ensure the target domain can actually receive mail, and checks SPF configurations.
  • Layer 3: SMTP Deep Handshake (Port 25) - Performs a real-time protocol-level handshake with the destination mail server to verify if the specific mailbox exists without ever sending an actual email.
  • Layer 3b: DNS-Verified Fallback - When SMTP is disabled or the mail server blocks the handshake (timeout/refused), returns DNS_VERIFIED status — still actionable data indicating the domain accepts mail, just without mailbox-level confirmation.
  • Layer 4: Catch-All Domain Detection - Automatically tests if a domain accepts all emails (catch-all config) by sending a random fake email first. Flags these as RISKY_CATCH_ALL. Toggle off via detectCatchAll: false for faster runs.
  • Layer 5: Pattern-Based Email Generation - When email is missing but firstName+lastName+domain are provided, generates and tests 8 common email patterns (firstname.lastname@, f.lastname@, etc.) via SMTP handshake. Finds the working pattern automatically.
  • Deliverability Scoring - Every record gets a 0-100 score combining syntax, MX, SMTP, role-based, disposable, and catch-all signals. Filter by score >= 80 for high-quality leads.
  • 100% Stable - Built on pure network protocols. Since it has 0% dependency on web DOM structures, this Actor never breaks and requires zero maintenance.

Input

FieldTypeDefaultDescription
recordsArrayrequiredArray of contact objects
performSmtpCheckBooleantrueEnable SMTP handshake + Catch-All detection
detectCatchAllBooleantrueSend fake email first to detect catch-all domains
generatePatternsBooleantrueGenerate & test email patterns when email is missing
smtpTimeoutInteger8Seconds per SMTP connection (max 20)
defaultCountryCodeString"+1"Country code prefix for phone numbers
maxConcurrencyInteger5Parallel SMTP connections (max 20)

Each record in records:

FieldTypeDescription
firstNameString(Optional) First name
lastNameString(Optional) Last name
emailString(Optional if firstName+lastName+domain provided) Email to verify
phoneString(Optional) Raw phone number
domainString(Optional) Company domain for pattern generation (e.g. company.com)

Input Example

{
"records": [
{
"firstName": " John ",
"lastName": "Doe",
"email": "JOHN.DOE@GMAIL.COM",
"phone": "+1 (555) 019-2834"
}
],
"performSmtpCheck": true,
"detectCatchAll": true,
"maxConcurrency": 5
}

Output

The Actor returns a structured and enriched dataset:

[
{
"firstName": "John",
"lastName": "Doe",
"fullName": "John Doe",
"email": "john.doe@gmail.com",
"domain": "gmail.com",
"phone": "+15550192834",
"emailSyntaxValid": true,
"mxFound": true,
"mxServer": "gmail-smtp-in.l.google.com",
"spfRecord": "v=spf1 redirect=_spf.google.com",
"smtpValid": true,
"smtpReason": "accepted",
"catchAll": false,
"patternGenerated": false,
"score": 95,
"status": "DELIVERABLE"
},
{
"firstName": "Jane",
"lastName": "Smith",
"email": "jane@catchall-domain.com",
"emailSyntaxValid": true,
"mxFound": true,
"mxServer": "mail.catchall-domain.com",
"smtpValid": true,
"smtpReason": "catch-all accepted",
"catchAll": true,
"status": "RISKY_CATCH_ALL"
},
{
"firstName": "Bob",
"lastName": "Johnson",
"email": "bob@tight-firewall.com",
"emailSyntaxValid": true,
"mxFound": true,
"mxServer": "mx.tight-firewall.com",
"spfRecord": "v=spf1 include:_spf.google.com ~all",
"smtpValid": false,
"smtpReason": "",
"catchAll": false,
"status": "DNS_VERIFIED"
}
]
---
### Complete Output Fields
| Field | Type | Description |
|-------|------|-------------|
| `firstName` | string | Normalized first name |
| `lastName` | string | Normalized last name |
| `fullName` | string | Combined full name |
| `email` | string | Lowercased, trimmed email |
| `domain` | string | Email domain extracted |
| `phone` | string | Formatted E.164 phone |
| `emailSyntaxValid` | boolean | RFC 5322 syntax check |
| `mxFound` | boolean | Domain has MX records |
| `mxServer` | string | Resolved mail server |
| `spfRecord` | string | SPF policy (if found) |
| `smtpValid` | boolean | Mailbox verified via SMTP |
| `smtpReason` | string | SMTP response or error |
| `catchAll` | boolean | Domain accepts all emails |
| `isRoleBased` | boolean | Role-based email (info@, support@, etc.) |
| `isDisposable` | boolean | Known disposable email domain |
| `isFreeProvider` | boolean | Free provider (Gmail, Yahoo, etc.) |
| `provider` | string | Email provider name |
| `aliasType` | string | Plus-tag or dot alias detected |
| `patternGenerated` | boolean | Email was generated via pattern testing |
| `score` | integer | Deliverability score 0100 |
| `qualityBreakdown` | object | Per-category quality sub-scores |
| `status` | string | `DELIVERABLE`, `RISKY_CATCH_ALL`, `DNS_VERIFIED`, or `INVALID` |
---
## Output Schema (API Endpoints)
This Actor exposes the following outputs in the run API response:
| Endpoint | Description |
|----------|-------------|
| `enrichedContacts` | Full dataset as JSON |
| `deliverableOnly` | Filtered: only `DELIVERABLE` contacts |
| `highQualityOnly` | Filtered: only score ≥ 80 contacts |
| `summary` | Run statistics (last item with `_summary` key) |
| `csvExport` | CSV file for Excel/CRM import |
| `jsonExport` | Formatted JSON file for pipelines |
### API Usage (Python)
```python
import requests
resp = requests.get(
"https://api.apify.com/v2/datasets/{dataset_id}/items",
headers={"Authorization": "Bearer YOUR_API_TOKEN"}
)
data = resp.json()
for row in data:
print(row["email"], row["status"])

Pricing

  • Pay per event: $0.01 / 1,000 results. Average cost: ~$0.10 per 10,000 contacts
  • No subscription: Pay only for what you use. Runs within your Apify platform limits
  • Enterprise: Need custom CRM integration, dedicated proxy, or bulk discounts? Contact the developer.

MCP / AI Agent Integration

This Actor supports MCP (Model Context Protocol) for AI agent use. Configure in your MCP client:

{
"mcpServers": {
"apify": {
"command": "npx",
"args": ["-y", "@apify/mcp-server"],
"env": {
"APIFY_TOKEN": "YOUR_API_TOKEN"
}
}
}
}

The dataset schema includes rich field descriptions so AI agents can understand and chain this Actor's output with other tools automatically.