SMTP Email Verifier avatar

SMTP Email Verifier

Pricing

$0.01 / 1,000 checked emails

Go to Apify Store
SMTP Email Verifier

SMTP Email Verifier

SMTP email verifier for bulk list cleaning. Check syntax, MX records, SMTP RCPT TO responses, catch-all domains, disposable and role flags, confidence, and recommended actions without sending email.

Pricing

$0.01 / 1,000 checked emails

Rating

0.0

(0)

Developer

Maxime Dupré

Maxime Dupré

Maintained by Community

Actor stats

0

Bookmarked

79

Total users

57

Monthly active users

21 days ago

Last modified

Share

📬 SMTP email verification for bulk email lists

For email marketers, sales teams, and developers, this SMTP email verifier checks bulk email lists before outreach, CRM import, or enrichment. It returns syntax, MX, SMTP, risk, and action data for each address, so you can sort addresses into send, review, retry, or suppress groups without sending an email.

✅ Email checks and risk signals

Each saved dataset row covers one normalized email address. It combines the verification decision with syntax, MX, SMTP method, optional domain-health, risk, and failure details.

Field groupWhat you get
Email resultemail, domain, status, verdict, sendable, confidence, qualityScore, and riskLevel
Action fieldsdecision, recommendedDisposition, and recommendedAction for send, review, retry, or suppress workflows
Syntax evidenceValidity, syntax errors, and typo suggestions when available
MX evidenceMX status, detected provider, and sorted MX records
SMTP evidenceVerification method and error text when available
Risk flagsCatch-all, disposable, role-based, and free-provider signals
Domain healthSPF, DMARC, and common DKIM selector checks when enabled

▶️ Check an email list

  1. Add addresses in Email addresses, paste copied text in Paste emails, or upload a CSV/TXT file. You can combine these sources.
  2. Every run checks syntax, MX, and SMTP signals and can include catch-all, disposable, role, free-provider, and typo signals. Turn on Domain health check for SPF, DMARC, and common DKIM selector signals.
  3. Set Run limit or Per-domain limit when you want to check only part of a list. Leave either limit empty to return all available results until the source is exhausted.
  4. Run the Actor, then open the dataset to review status, confidence, risk flags, and recommended action for each email.

⚙️ Input

You can provide emails in three ways and combine them in one run. The domain health check is optional and off by default.

Input fields

FieldTypeWhat it does
emailsarray of stringsAdd email addresses directly. Use one address per list entry.
emailsTextstringPaste raw CSV rows, copied CRM text, comma-separated values, or one email per line.
csvFilestringUpload a CSV or TXT file from a spreadsheet or text export.
checkDomainHealthbooleanCheck SPF, DMARC, and common DKIM selectors for each email domain.
maxEmailsoptional integerLimit the normalized addresses checked in this run. Leave it empty to return all available results until the source is exhausted.
maxEmailsPerDomainoptional integerLimit addresses checked for each email domain. Leave it empty to return all available results for each domain until the source is exhausted.

The Actor normalizes submitted addresses and removes duplicate addresses before checking them. Both limits accept positive integers when set.

Input example

This complete example is the public input from a successful current-beta default-input run.

{
"emails": [
"postmaster@gmail.com",
"abuse@yahoo.com",
"test@mailinator.com",
"contact@cloudflare.com",
"admin@apify.com"
],
"emailsText": "",
"csvFile": "",
"checkDomainHealth": false
}

🧾 Output

The default dataset contains one row for each checked email address. Status values include valid, invalid, invalid_syntax, no_mx, catch_all, temporary_failure, blocked, timeout, and unknown.

Email verification row

FieldTypeWhat it does
emailstringNormalized email address that was checked.
domainstring or nullDomain used for DNS and SMTP checks, or null when no usable domain is available.
statusstringMachine-readable verification outcome.
verdictstringHuman-readable verification result for filtering exports.
sendablebooleanWhether the result can be used for sending according to the verification decision.
confidencenumber from 0 to 1Verification confidence.
qualityScoreinteger from 0 to 100List-quality score for sorting and suppression workflows.
riskLevelstringOverall deliverability and list-quality risk.
decisionstringCompact action category for filtering and automation.
recommendedDispositionstringRecommended list-management bucket for the email.
recommendedActionstringPlain-English next step for this email.
riskFlagsarray of stringsSpecific risk signals found for this email.
flagsobjectBoolean verification and list-quality signals.
flags.isDisposablebooleanWhether the domain is a known temporary email provider.
flags.isRoleBasedbooleanWhether the local part is a shared role address.
flags.isFreeProviderbooleanWhether the domain belongs to a common free mailbox provider.
flags.isCatchAllbooleanWhether the domain appears to accept arbitrary recipients.
syntaxobjectEmail syntax validation details.
syntax.isValidbooleanWhether the email passed syntax validation.
syntax.errorsarray of stringsSyntax issues found in the email.
syntax.suggestionstring or nullSuggested correction for a common domain typo, or null when none is available.
mxobjectDNS mail-exchange evidence for the email domain.
mx.hasRecordsboolean or nullWhether the domain has usable MX records, or null when no domain was available.
mx.providerstring or nullDetected mail provider when recognized.
mx.recordsarray of objectsMX records sorted by priority.
mx.records[].priorityintegerMX record priority.
mx.records[].exchangestringMX record host.
smtpobjectMailbox-level SMTP recipient-check evidence.
smtp.methodstringDeepest verification method used for the row.
smtp.errorstring or nullConnection or verification error when the mailbox check is inconclusive.
domainHealthobject or nullEmail-domain authentication signals, or null when the check is not available.
domainHealth.spfbooleanWhether the domain publishes an SPF record.
domainHealth.dmarcbooleanWhether the domain publishes a DMARC record.
domainHealth.dkimbooleanWhether a common DKIM selector was found.
domainHealth.dkimSelectorsCheckedarray of stringsCommon DKIM selectors checked for the domain.
failureAnalysisobjectReasoning for suppress, retry, review, and cautious-send decisions.
failureAnalysis.primaryCausestring or nullMain reason for the decision, or null for clean deliverable emails.
failureAnalysis.categorystringHigh-level decision category.
failureAnalysis.severitystringImpact level for the cause.
failureAnalysis.recoverablebooleanWhether retrying, correcting, or replacing the email may resolve the issue.
failureAnalysis.explanationstringOperator-readable explanation of the decision.

Output example

This complete row is from a successful current-beta mixed-input run with domain health enabled.

{
"email": "abuse@yahoo.com",
"domain": "yahoo.com",
"status": "catch_all",
"verdict": "Valid - Catch-all domain",
"sendable": true,
"confidence": 0.84,
"qualityScore": 84,
"riskLevel": "medium",
"decision": "send_monitor",
"recommendedDisposition": "send_with_caution",
"recommendedAction": "Review according to source signals: free_provider, role_address, mailbox_accepts_mail, catch_all_domain.",
"riskFlags": [
"free_provider",
"role_address",
"mailbox_accepts_mail",
"catch_all_domain"
],
"flags": {
"isDisposable": false,
"isRoleBased": true,
"isFreeProvider": true,
"isCatchAll": true
},
"syntax": {
"isValid": true,
"errors": [],
"suggestion": null
},
"mx": {
"hasRecords": true,
"provider": "Yahoo Mail",
"records": [
{
"priority": 1,
"exchange": "mta5.am0.yahoodns.net"
},
{
"priority": 1,
"exchange": "mta6.am0.yahoodns.net"
},
{
"priority": 1,
"exchange": "mta7.am0.yahoodns.net"
}
]
},
"smtp": {
"method": "smtp",
"error": null
},
"domainHealth": {
"spf": true,
"dmarc": true,
"dkim": true,
"dkimSelectorsChecked": [
"default",
"selector1",
"selector2",
"google",
"k1",
"mail"
]
},
"failureAnalysis": {
"primaryCause": "free_provider",
"category": "deliverability_risk",
"severity": "medium",
"recoverable": true,
"explanation": "Source reported a catch-all domain, so the specific mailbox needs cautious review."
}
}

💳 Pricing

This Actor charges one email-verified event for each checked email row that is saved to the dataset.

UnitPrice
1 checked email$0.00001
1,000 checked emails$0.01

There is no actor-start charge. If no email row is saved, no checked-email event is charged.

🔌 Integrations

  • Export checked emails to JSON, CSV, Excel, XML, RSS, or HTML from the Apify dataset.
  • Use the Apify API to run SMTP email verification from your app or enrichment pipeline.
  • Schedule repeat list checks and send finished datasets to webhooks or downstream Apify integrations.
  • Combine results with website email discovery, CRM cleanup, cold outreach QA, or signup review workflows.

❓ FAQ

Does this do a real SMTP check?

Yes. After syntax and MX checks, the Actor connects to the target mail server and performs an SMTP recipient probe with RCPT TO. It then closes the connection without sending a message.

Why does it check MX records first?

MX records tell the Actor which mail servers receive email for a domain. If a domain has no usable MX records, the Actor can return no_mx without wasting SMTP attempts.

Why are some results marked unknown, blocked, or catch_all?

Some mail servers hide mailbox validity, block probing, rate-limit connections, or accept all recipients. The Actor keeps those outcomes separate and gives a recommended action instead of pretending they are confirmed valid mailboxes.

Do I need Gmail, Outlook, SMTP, or verifier API credentials?

No. You only provide the email addresses you want to check. The Actor does not need inbox credentials, an email provider login, or a third-party verifier API key.

Can I use this for email list cleaning?

Yes. The output includes suppress, retry, review, send, and send-with-caution decisions so you can clean a list before importing it into a CRM, outreach tool, newsletter tool, or data pipeline.

Why not use an SMTP API?

SMTP is a protocol, not a single public API for checking every mailbox. This Actor wraps syntax, DNS, SMTP, catch-all, and list-quality checks into one Apify run so you can export the results or call them through the Apify API.

What are SMTP email verifier alternatives?

Alternatives include MX-only email checkers, paid email verification APIs, CRM validation tools, and lead-enrichment platforms. Use this Actor when you already have the email addresses and want credential-free SMTP evidence plus action-ready output.

📝 Changelog

v1.0 (13-09-2026)

  • Check email lists from direct entries, pasted text, or CSV/TXT files with run and per-domain limits.
  • Get structured verification results with action recommendations and optional domain health checks.
  • See honest running progress for open-ended lists instead of treating a run cap as the total.

v0.1

  • Initial release.

🆘 Support

For issues, questions, or feature requests, file a ticket and I'll fix or implement it in less than 24h 🫡

Made with ❤️ by Maxime Dupré