Two different jobs
An email finder answers “what is this person’s address?”. Email verification answers “will mail to this address bounce?”. Teams blur them because one tool often does both, but the evidence behind each is completely different — and a sending domain’s reputation depends on not confusing a guess with a check.
| Email finding | Email verification | |
|---|---|---|
| Input | A name and a company domain | An address |
| Output | A candidate address, with how it was obtained | A verdict with reasons |
| Evidence | Published addresses, the company’s address pattern | Syntax, DNS, lists, optionally an SMTP conversation |
| Typical failure | Right pattern, wrong person (or no such person) | Catch-all domains that accept anything |
| Risk if skipped | You email the wrong address | You bounce, and bounces cost sender reputation |
The rule that follows: every found address goes through verification before it is sent to, and the confidence you attach to it should say which kind of evidence you actually have.
How email finding works
There are only two honest ways to produce an address for a named person:
- 1A published address. The person’s address appears on the company website, in a press release or in structured data. This is the strongest evidence a finder can have — somebody at the company wrote it down — but people leave, and pages go stale.
- 2A pattern applied to a name. Collect the addresses a company publishes, match them against known names, and infer the format — {first}.{last}, {f}{last}, {first} — then apply it. Most companies use one format, so the guess is often right; it says nothing about whether this particular person still works there.
Our email_pattern tool returns the second half of that for any company we hold: the format, a confidence, whether the pattern was confirmed by a live mailbox check in our own data pipeline (validated), whether the domain has MX records, and whether it is catch-all. It never returns a person’s address:
curl https://businessmcp.com/api/hub/v1/companies/acme.com/email-pattern \
-H "Authorization: Bearer $BUSINESSMCP_API_KEY"The person-level email_finder (15 credits per address returned, people data terms apply) returns a stored address with the status our pipeline recorded when we hold the person — otherwise it applies the pattern and labels the result email_status: "pattern": built, never checked, verify before sending.
The verification layers, and what each one proves
Verification is a stack of checks, cheapest first. Each removes a class of bounce; none of the DNS-level ones can prove a mailbox exists.
| Check | What it proves | What it cannot prove |
|---|---|---|
| Syntax | The address is well formed (RFC 5322) | That anything exists behind it |
| MX lookup | The domain publishes a mail server — or, with a null MX, explicitly accepts no mail | That this mailbox exists |
| Disposable list | The domain is a throwaway or placeholder service | Anything about real domains not on the list |
| Role inbox | The local part is a shared function (info@, sales@ — see RFC 2142) | Whether a human reads it |
| Free-mail | The domain is a consumer provider, not a company | Whether the person is a buyer |
| Catch-all | The domain accepts mail for any address | Which addresses on it are real — nothing can |
| SMTP mailbox probe | The server said it would accept this recipient | That it will not bounce later, on catch-alls or servers that accept and bounce |
The catch-all row is the one people miss. On a catch-all domain every address “exists” at the SMTP level, including typos, so no verifier — SMTP or not — can separate a real mailbox from a wrong guess. Treat catch-all as risky, not as valid.
SMTP probing: what it adds and what it costs
An SMTP probe connects to the domain’s mail server and walks through the start of a delivery — EHLO, MAIL FROM, RCPT TO:<address> — then hangs up before sending anything. The server’s reply to RCPT TO is the only mailbox-level evidence available without actually sending. (The older VRFY command, defined in RFC 5321, is disabled almost everywhere.)
On a server that answers honestly, that reply is genuinely useful: it catches the person who left, the misspelled name, the pattern that was right for the company but wrong for this employee. That is why dedicated verifiers run it. But it has real costs:
- Greylisting. Many servers temporarily reject unknown senders (RFC 6647) and only accept a retry minutes later, so a probe either waits or returns “unknown”.
- Catch-alls and accept-then-bounce servers. Some servers accept every recipient at RCPT TO and bounce afterwards, which makes the probe’s “yes” meaningless there.
- Rate limits and blocks. Mail providers treat bursts of abandoned SMTP sessions as directory harvesting. Probing from your own sending IPs risks exactly the reputation you are trying to protect.
- Time. A probe is a network conversation with a remote server. Hunter’s verifier, for example, allows up to 20 seconds and returns HTTP 202 to poll when it needs longer (Hunter API docs).
Why our API returns domain_ok, never “valid”
The Data API’s email_verify runs every check in the table except the SMTP probe: syntax, a live MX lookup, disposable and free-mail lists, role inboxes, our catch-all cache, and whether the local part fits the company’s known pattern. It never opens an SMTP session, so it never claims the mailbox exists. The best verdict it can give is domain_ok — the domain accepts mail — and the reason says so in words.
curl -X POST https://businessmcp.com/api/hub/v1/emails/verify \
-H "Authorization: Bearer $BUSINESSMCP_API_KEY" \
-H "Content-Type: application/json" \
-d '{"email":"jane.doe@acme.com"}'{
"email": "jane.doe@acme.com",
"verdict": "domain_ok",
"reasons": [
"The domain accepts mail. The mailbox itself was not contacted."
],
"checks": {
"syntax": true,
"mx": [
"aspmx.l.google.com"
],
"catch_all": false,
"disposable": false,
"free_mail": false,
"role": false,
"fits_company_pattern": true,
"company_pattern": "{first}.{last}"
}
}| Verdict | Meaning | Suggested action |
|---|---|---|
| undeliverable | Malformed, or the domain publishes no mail server | Drop it |
| risky | Disposable, catch-all, role inbox, or no MX record | Hold for review; never auto-send |
| domain_ok | The domain accepts mail; the mailbox was not contacted | Send if the address was published or validated; otherwise SMTP-verify first |
| unknown | DNS did not answer in time | Retry later — never read it as bad |
It costs 1 credit per call and is covered by the 1,000 free monthly credits. Used as a pre-send filter it removes the cheap bounces — dead domains, typos in the domain, disposable signups, shared inboxes — before you pay a mailbox-level verifier for the rest.
A find-then-verify workflow that protects your domain
Keep bounces under about 2% and complaints under 0.1%; the thresholds are in the [Google and Yahoo sender requirements guide](/guides/google-yahoo-sender-requirements).
Verification protects you from bounces, not from spam folders. Authentication decides whether mail that is delivered is trusted, so pair this with a correctly configured SPF, DKIM and DMARC setup — you can check a domain’s records with the free email deliverability checker.
Frequently asked questions
What is the difference between an email finder and an email verifier?
A finder produces a candidate address for a named person, either from a published address or by applying the company address pattern to the name. A verifier checks whether an address can receive mail, using syntax, DNS, list and sometimes SMTP checks. A found address still needs verifying before you send to it.
Can any tool guarantee an email address is valid?
No. Even an SMTP probe only records that the server said it would accept the recipient at that moment. Catch-all domains accept every address, and some servers accept at the protocol level and bounce afterwards, so no verifier can be certain there.
Why does the BusinessMCP email_verify API never return valid?
Because it never contacts the mailbox. It checks syntax, MX, disposable and free-mail lists, role inboxes, catch-all status and the company pattern, then returns domain_ok at best, meaning the domain accepts mail. Claiming a mailbox exists without asking the mail server would be a result we did not measure.
Is SMTP email verification safe to run myself?
It can hurt you. Mail providers treat many abandoned SMTP sessions as directory harvesting, so probing from your own sending IPs risks blocks and reputation damage. If you need mailbox-level checks, use a vendor that runs them from dedicated infrastructure.
What should I do with catch-all addresses?
Treat them as risky. A catch-all domain accepts mail for any address, so verification cannot separate a real mailbox from a wrong guess. Send only when the address was published or confirmed another way, and watch bounces closely.
Sources
- [1]RFC 5321 — Simple Mail Transfer Protocol
- [2]RFC 5322 — Internet Message Format
- [3]RFC 7505 — A “Null MX” No Service Resource Record
- [4]RFC 2142 — Mailbox Names for Common Services, Roles and Functions
- [5]RFC 6647 — Email Greylisting: An Applicability Statement for SMTP
- [6]Hunter — API documentation (Email Verifier)
- [7]Google — Email sender guidelines
BusinessMCP Team
Every guide is written from running BusinessMCP on its own platform — the match rates, reply rates, and deliverability lessons are from our own data, not recycled blog folklore. About BusinessMCP
Turn your business into one AI-ready MCP server
Connect your tools, install one tracking script, and expose your unified data to any AI agent through a single secure endpoint.
Get started free