Email Verifier & Validator - Bulk SMTP & Catch-All Checker
Pricing
from $1.00 / 1,000 email verifieds
Email Verifier & Validator - Bulk SMTP & Catch-All Checker
Bulk email verification with a real SMTP mailbox check: we verify each address by asking its mail server if that exact inbox exists. A catch-all checker flags domains that accept anything. Plus syntax and MX validation, disposable, role and free-provider flags and a valid/risky/invalid verdict.
Pricing
from $1.00 / 1,000 email verifieds
Rating
0.0
(0)
Developer
Muhamed Didovic
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
6 hours ago
Last modified
Categories
Share
Email Verifier & Validator ✅
Bulk email verification that checks the mailbox, not just the domain. Give it your list of email addresses; get back one row per address with a clear valid / risky / invalid verdict, plus the signals behind it: syntax, MX (does the domain accept mail), disposable / role-based / free-provider flags, and a real SMTP mailbox check with a catch-all checker that tells you whether the exact inbox exists. No proxy, no API key, no login. Export to JSON, CSV or Excel.

✨ Why use this verifier
- One clear verdict per email -
valid,risky, orinvalid- with every underlying signal kept on the row so you can set your own threshold. - Real mailbox checks. Apify blocks outbound SMTP (port 25), so a mailbox check dialed straight from the platform never reaches the mail server. This one asks the recipient's mail server from our own mail-check server, so
mailboxConfirmed: truemeans the server accepted that exact mailbox. - It never lies. When a mail server can't be reached or won't answer, the verdict falls back to the DNS/MX result. A genuinely valid address is never downgraded just because a check didn't get through.
- Catch-all checker. A random, certainly-nonexistent mailbox is probed alongside the real one, so "accepted" on a catch-all domain is flagged rather than trusted.
- Disposable, role-based and free-provider flags - spot
mailinator.com,info@/sales@, andgmail.com/outlook.comaddresses that skew outreach. - Bulk and fast. MX cached per domain, checked in parallel - thousands of addresses per run. Turn
smtpoff for a pure-DNS pass. - Paste or list. Feed a structured list, or paste a whole blob (comma / space / newline separated); duplicates are removed.
- No setup. No proxy, no third-party API key, no account.
🎯 Use cases
| You are… | Use it to… |
|---|---|
| Running cold outreach | Scrub a list before sending, so bounces don't wreck your sender reputation. |
| Cleaning a CRM | Flag dead, disposable and role-based addresses across your contact base. |
| Capturing sign-ups | Reject junk and typo domains at import time. |
| Buying/merging lists | Grade a purchased list before you trust it. |
| Pairing with an email finder | Verify addresses a finder returned before they reach a campaign. |
📥 Supported inputs
Provide addresses as a list (emails) and/or a pasted blob (emailsText, comma / space / newline separated). Both are merged and de-duplicated. To check a list that lives in a spreadsheet or CSV file, copy just the email column into the paste box. The SMTP mailbox check is on by default; set smtp: false to skip it.
🔄 How it works
- Normalise - the list and the blob are merged, split, lowercased and de-duplicated.
- Check - each address is run through syntax, MX (DNS), and disposable / role / free classification, then the domain's mail server is asked whether the mailbox exists, and a random address is tested to catch catch-all domains.
- Emit - one flat row per address with all signals and a single verdict.
🔍 What an SMTP mailbox check catches that an MX-only check misses
An MX-only check is a DNS lookup: it confirms the domain exists and has a mail server, but it never asks that server about the address itself, so any name at a working domain passes. SMTP email verification goes one step further: it asks the domain's mail server whether it would accept mail for that exact address (RCPT TO), then hangs up before anything is sent.
| Situation | MX-only check | MX + SMTP mailbox check (this actor) |
|---|---|---|
| Domain doesn't exist | invalid | invalid |
Typo in the name part (jonh@ instead of john@) | passes | invalid when the server answers "no such user" |
| Mailbox deleted after someone left the company | passes | invalid when the server answers "no such user" |
| Catch-all domain that accepts any address | passes | flagged catchAll, verdict risky |
| Proof that the exact mailbox exists | not possible | mailboxConfirmed: true |
The "no such user" addresses are the hard bounces that hurt sender reputation, and an MX-only pass lets them through. When a server won't give a straight answer (greylisting, rate limits, a block on our checking server), the row keeps accepted: null and the verdict falls back to the MX result, so the SMTP check never turns a good address bad by guessing.
⚙️ Input parameters
| Field | Type | Default | Description |
|---|---|---|---|
emails | array | - | Addresses to verify (entries may themselves be comma/space/newline separated). |
emailsText | string | - | Paste a blob of addresses; merged with emails. |
smtp | boolean | true | SMTP mailbox + catch-all check. Set false for a DNS-only pass. |
smtpTimeoutMs | integer | 7000 | SMTP dialog timeout per address (ms). |
maxItems | integer | 1000 | Max verified rows per run. Free-tier capped at 100. |
maxConcurrency | integer | 10 | Addresses verified in parallel. |
Example - quick list
{ "emails": ["jane@stripe.com", "info@acme.com", "test@mailinator.com"] }
Example - paste a blob, DNS-only
{ "emailsText": "a@x.com, b@y.com\nc@z.com", "smtp": false }
📊 Output overview
One row per input address. The verdict is valid when syntax and MX are good and the address isn't disposable; risky when it's role-based, a free provider, or on a catch-all domain (deliverable, but not individually confirmable); invalid when syntax fails, the domain has no mail server, the domain is disposable, or SMTP cleanly rejects that exact mailbox (even on a domain that also accepted a random address). A domain with no MX record, only an A record, is risky unless its server answers the SMTP check. The reason field says what decided each verdict. mailboxConfirmed is true only when the mail server accepted that exact mailbox and rejected a random one. The raw signals stay on the row so you can re-grade with your own rules.
📦 Output sample
{"email": "jane@stripe.com","syntaxValid": true,"domain": "stripe.com","mxFound": true,"isDisposable": false,"isRoleBased": false,"isFreeProvider": false,"smtp": { "checked": true, "reachable": true, "accepted": true, "catchAll": false, "code": 250, "detail": "accepted" },"mailboxConfirmed": true,"verdict": "valid","reason": "mailbox-confirmed"}
With smtp: false the smtp object is left out and mailboxConfirmed is always false.
🗂 Key output fields
| Field | Meaning |
|---|---|
verdict | valid / risky / invalid - the headline call. |
reason | What decided the verdict: mailbox-confirmed, mailbox-rejected, catch-all, smtp-inconclusive, no-mx-record, no-mail-server, role-based, free-provider, disposable-domain, invalid-syntax, dns-only. |
mailboxConfirmed | The mail server accepted this exact mailbox and the domain is not catch-all. The strongest signal on the row. |
syntaxValid | Passes RFC-ish address syntax. |
domain / mxFound | The domain, and whether it has an MX record. false for a domain with only an A record (reason no-mx-record). |
isDisposable | Throwaway domain (mailinator, guerrillamail, …). |
isRoleBased | Role mailbox (info@, sales@, support@, …), not a person. |
isFreeProvider | Free webmail (gmail, outlook, yahoo, …). |
smtp.accepted | (smtp mode) Mailbox accepted (true), cleanly rejected (false), or unclear (null). |
smtp.catchAll | (smtp mode) Domain accepts any mailbox, so acceptance is meaningless. |
smtp.detail | (smtp mode) Short reason: accepted, rejected 550, catch-all, or inconclusive: … when the server gave no answer about the mailbox (e.g. inconclusive: the mail server blocked the check (SMTP 550)). |
❓ FAQ
Is this an email validator or an email verifier? Both. Email validation usually means checking the syntax and the domain; email verification goes further and asks the mail server about the mailbox itself. This actor runs both in one pass and keeps each result on the row.
Does it send an email to the address?
No. The SMTP conversation stops after the recipient check (RCPT TO) and closes with QUIT before any message is sent, so nothing lands in anyone's inbox.
Do I need a proxy or API key? No. DNS checks need nothing, and the SMTP check runs on our own mail-check server, so you don't need port 25 or a third-party verifier key.
How reliable is the SMTP mailbox check?
Gmail, Google Workspace, Microsoft 365 and most company mail servers answer honestly, so a real mailbox comes back accepted and a made-up one rejected. Consumer outlook.com / hotmail.com sometimes accept made-up addresses, so they can come back invalid but never mailboxConfirmed. Two cases stay inconclusive: catch-all domains, which accept every address (flagged as catchAll), and servers that greylist, rate-limit or block the check (accepted: null, reason smtp-inconclusive; Yahoo and AOL mailboxes currently land here). In those cases the verdict falls back to the DNS/MX result rather than guessing, so it under-claims instead of over-claiming.
What's the difference between risky and invalid?
invalid addresses should not be mailed (bad syntax, no mail server, disposable, or a clean rejection). risky addresses are deliverable but not individually confirmable (role mailboxes, free providers, catch-all domains, domains with no MX record) - you decide whether to keep them.
Can it find emails, not just verify them? This actor verifies. To discover addresses, pair it with an email-finder and feed the results here.
How many can I verify at once?
Thousands per run. A DNS-only pass (smtp: false) is the fastest; the SMTP check adds roughly 0.2-3 seconds per address, run in parallel.
Can I check a CSV file or a spreadsheet?
Yes. Copy the email column into the paste box (emailsText), or send the addresses as an array through the API. Every word in the paste box is treated as an address, so paste only the email column: names or company columns would come back as invalid rows.
Can I verify a single email address?
Yes. Put one address in emails and the run returns one row for it.
💬 Support
Found a bug or need an extra signal? Open an issue on the actor's Issues tab and we'll take a look.
🔎 Explore more
See the full memo23 actor catalog →
⚠️ Disclaimer
This Actor performs standard email deliverability checks (DNS/MX lookups and an SMTP conversation that ends before any message is sent) against addresses you supply. It does not send email, does not store your lists, and accesses no private data. You are responsible for having a lawful basis to process the addresses you submit and for complying with applicable data-protection and anti-spam law (GDPR, CAN-SPAM, etc.).
SEO Keywords
email verifier, email verification, verify email address, bulk email verifier, email validation, email checker, mx record check, smtp verification, catch-all detection, disposable email detector, role-based email filter, email list cleaning, bounce reduction, email deliverability, verify email api, apify email verifier, email validator, clean email list, csv email verification, cold outreach list cleaning, smtp email verification, bulk email verification, catch-all email checker