Email Finder & Verifier
Pricing
Pay per event
Email Finder & Verifier
Find and verify business email addresses using SMTP verification, pattern matching, and catch-all detection. Three modes: verify emails, find by name+domain, discover domain emails. Includes confidence scoring, disposable/free detection, and provider identification.
Pricing
Pay per event
Rating
0.0
(0)
Developer

Stas Persiianenko
Actor stats
0
Bookmarked
10
Total users
9
Monthly active users
11 days ago
Last modified
Categories
Share
Find and verify business email addresses using SMTP-level verification, pattern matching, disposable/role detection, and provider identification. Provide a person's name and company domain to find their email, verify existing email lists, or discover all emails on a domain.
What does Email Finder & Verifier do?
Email Finder & Verifier is an Apify Actor that finds and validates email addresses through multi-layer verification powered by MillionVerifier. It supports three modes: find emails from a person's name + company domain, verify existing email addresses, and discover all emails on a domain. Every result includes a confidence score (0-100), catch-all detection, and provider identification.
The Actor performs up to 9 verification layers: syntax validation, disposable domain detection, free provider detection, role account detection, MX record verification, provider identification, catch-all detection, SMTP mailbox verification, and confidence scoring.
Use cases
- Sales prospecting - Find decision-maker emails by providing their name and company domain. The Actor tests 14 common corporate email patterns and verifies each one at the SMTP level.
- Email list cleaning - Verify existing email lists before sending campaigns. Remove invalid, disposable, and risky addresses to protect your sender reputation and reduce bounce rates.
- CRM enrichment - Enrich your CRM contacts with verified email data, confidence scores, provider detection, and deliverability signals.
- Lead generation - Find contact emails for target companies. Discover role-based addresses (info@, sales@, support@) across domains.
- Recruitment - Find candidate email addresses from company domains to reach potential hires directly.
Why use Email Finder & Verifier?
- Three modes in one tool - Find by name+domain, verify existing emails, or discover domain emails
- 9-layer verification - Syntax, disposable, free, role, MX, provider, catch-all, SMTP, confidence scoring
- Real SMTP verification - Verifies at the mailbox level to confirm the email actually exists
- Confidence scoring - Every result gets a 0-100 quality score based on verification depth
- Smart detection - Flags disposable, free, catch-all, and role-based email addresses
- 14 email patterns - Tests the most common corporate email formats, covering 95%+ of businesses
- Provider identification - Detects Google Workspace, Microsoft 365, Yahoo, Zoho, ProtonMail, and more
- Pay per result - Only charged for emails with confidence >= 50
What data can you extract?
| Field | Type | Description |
|---|---|---|
email | string | The email address (verified or best guess) |
firstName | string | First name (when finding emails for contacts) |
lastName | string | Last name (when finding emails for contacts) |
domain | string | Email domain |
isValidFormat | boolean | Whether the email passes RFC 5322 syntax validation |
hasMxRecords | boolean | Whether the domain has valid MX (mail server) records |
isVerified | boolean | Whether SMTP verification confirmed the mailbox exists |
isCatchAll | boolean | Whether the domain accepts all emails (catch-all) |
isDisposable | boolean | Whether the domain is a disposable/temporary email provider |
isFreeProvider | boolean | Whether the domain is a free email provider (Gmail, Yahoo, etc.) |
isRoleAccount | boolean | Whether the local part is a role account (admin, support, info, etc.) |
confidenceScore | number | Quality score from 0-100 based on verification results |
verificationMethod | string | Deepest verification performed: format, mx, or smtp |
mvResult | string | MillionVerifier result: ok, catch_all, invalid, disposable, unknown, or error |
mvQuality | string | MillionVerifier quality: good, risky, or bad |
mxHost | string | Mail server hostname used for verification |
provider | string | Detected provider (google_workspace, microsoft_365, yahoo, etc.) |
patternsTried | number | Number of email patterns tested (contact finder mode) |
verificationTimeMs | number | Time taken for verification in milliseconds |
How much does it cost?
Email Finder & Verifier uses pay-per-event pricing. You pay a small start fee per run plus a per-email fee for each result with confidence >= 50.
| Event | Price |
|---|---|
| Actor start | $0.001 |
| Email verified (confidence >= 50) | $0.008 |
Confidence score thresholds:
| Verification result | Typical confidence | Charged? |
|---|---|---|
| SMTP verified (non catch-all) | 95 | Yes |
| Catch-all domain | 60 | Yes |
| Catch-all + role account | 50 | Yes |
| MX verified (no API key) | 45 | No |
| Role account (MX only) | 35 | No |
| Format only | 30 | No |
| Disposable email | 0-10 | No |
| Invalid email | 0-5 | No |
Cost examples:
| Scenario | Emails | Cost |
|---|---|---|
| Verify 100 emails (80% valid) | 100 | $0.001 + (80 × $0.008) = $0.641 |
| Verify 1,000 emails (70% valid) | 1,000 | $0.001 + (700 × $0.008) = $5.601 |
| Find 50 contacts by name | 50 | $0.001 + (~40 × $0.008) = $0.321 |
| Discover emails on 10 domains | ~140 | $0.001 + (~80 × $0.008) = $0.641 |
How to find and verify emails
Mode 1: Verify existing emails
- Open Email Finder & Verifier on Apify Console
- Enter email addresses in the "Email addresses to verify" field
- Set verification level (default:
smtp) - Click "Start"
- Each email is checked for syntax, MX records, provider, disposable/role status, and SMTP mailbox verification
Mode 2: Find emails by name + domain
- Enter contacts as JSON in the "Contacts to find emails for" field:
[{ "firstName": "John", "lastName": "Smith", "domain": "example.com" },{ "firstName": "Jane", "lastName": "Doe", "domain": "company.io" }]
- The Actor generates up to 14 common email patterns per contact
- Each pattern is verified via SMTP until a valid one is found
- Results include the best-match email and confidence score
Mode 3: Discover domain emails
- Enter domains in the "Domains to discover emails for" field
- The Actor tests common role addresses (info@, contact@, support@, admin@, sales@, etc.)
- All verified addresses are returned with confidence scores
Input parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
emails | string[] | [] | List of email addresses to verify |
contacts | object[] | [] | List of contacts with firstName, lastName, and domain |
domains | string[] | [] | List of domains to discover emails for |
verificationLevel | string | "smtp" | Verification depth: format, mx, or smtp |
detectCatchAll | boolean | true | Whether to detect catch-all domains |
maxPatternsToTest | integer | 8 | Max email patterns to test per contact (1-14) |
Output examples
SMTP-verified email:
{"email": "hello@apify.com","domain": "apify.com","isValidFormat": true,"hasMxRecords": true,"isVerified": true,"isCatchAll": false,"isDisposable": false,"isFreeProvider": false,"isRoleAccount": true,"confidenceScore": 85,"verificationMethod": "smtp","mxHost": "aspmx.l.google.com","provider": "google_workspace","mvResult": "ok","mvQuality": "good","verificationTimeMs": 169}
Invalid email:
{"email": "nonexistent@gmail.com","domain": "gmail.com","isValidFormat": true,"hasMxRecords": true,"isVerified": false,"isCatchAll": false,"isDisposable": false,"isFreeProvider": true,"isRoleAccount": false,"confidenceScore": 5,"verificationMethod": "smtp","mxHost": "gmail-smtp-in.l.google.com","provider": "google_workspace","mvResult": "invalid","mvQuality": "bad","verificationTimeMs": 238}
Contact finder result:
{"email": "ondra@apify.com","firstName": "Ondra","lastName": "Urban","domain": "apify.com","isValidFormat": true,"hasMxRecords": true,"isVerified": true,"isCatchAll": false,"isDisposable": false,"isFreeProvider": false,"isRoleAccount": false,"confidenceScore": 95,"verificationMethod": "smtp","mxHost": "aspmx.l.google.com","provider": "google_workspace","patternsTried": 3,"mvResult": "ok","mvQuality": "good","verificationTimeMs": 1482}
Tips for best results
- Use SMTP level - The default
smtplevel gives the most accurate results with confidence scores up to 95. - Batch contacts by domain - The Actor caches MX records per domain, so grouping contacts by company domain is more efficient.
- Understand catch-all domains - Some domains accept all emails regardless of the local part. The
isCatchAllflag andmvResult: "catch_all"let you decide how to handle them. - Check
isDisposable- Disposable email addresses (Mailinator, Guerrilla Mail, etc.) are detected and scored near 0. Filter these out for sales and marketing use cases. - Use
maxPatternsToTest- For large batches, reduce patterns to test (default: 8) to speed up processing. For high-value targets, increase to 14 for maximum coverage. - Filter by confidence - Use
confidenceScore >= 50as a threshold for reliable emails. Scores below 50 indicate unverified or problematic addresses.
Integrations
Email Finder & Verifier works with all major automation platforms:
- Make (Integromat) - Trigger email verification from Make scenarios
- Zapier - Connect to 5,000+ apps
- n8n - Self-hosted workflow automation
- GitHub Actions - CI/CD email verification
- Slack - Get notifications when runs complete
Using the Apify API
You can start Email Finder & Verifier programmatically using the Apify API.
JavaScript:
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });// Verify emailsconst run = await client.actor('automation-lab/email-enrichment').call({emails: ['john@company.com', 'jane@startup.io'],verificationLevel: 'smtp',detectCatchAll: true,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
Python:
from apify_client import ApifyClientclient = ApifyClient("YOUR_API_TOKEN")# Find emails for contactsrun = client.actor("automation-lab/email-enrichment").call(run_input={"contacts": [{"firstName": "John", "lastName": "Smith", "domain": "company.com"},{"firstName": "Jane", "lastName": "Doe", "domain": "startup.io"},],"verificationLevel": "smtp","detectCatchAll": True,})items = client.dataset(run["defaultDatasetId"]).list_items().itemsfor item in items:print(f"{item['email']}: {item['confidenceScore']}/100")
FAQ
What verification levels are available?
The Actor supports three levels: format (syntax only), mx (MX record check), and smtp (full SMTP-level mailbox verification via MillionVerifier API). Default is smtp.
What does the confidence score mean? The score ranges from 0 to 100. Score 95 means SMTP-verified on a non-catch-all domain. Score 60 means catch-all domain. Score 45 means MX records verified but no SMTP check. Score 30 means only format was validated. Disposable emails score near 0, and role accounts get a 10-point penalty.
What is a catch-all domain? A catch-all domain is configured to accept emails sent to any address, even if the mailbox doesn't exist. MillionVerifier detects this automatically. Catch-all results get a confidence of 60 because the email might exist but can't be confirmed.
How many emails can I verify per run? There is no hard limit. The Actor processes emails sequentially with each verification taking 100-500ms via the MillionVerifier API.
What does mvResult mean?
The mvResult field shows the MillionVerifier verification result: ok (mailbox exists), catch_all (domain accepts everything), invalid (mailbox doesn't exist), disposable (temporary email service), unknown (couldn't determine), or error (verification failed).