🎉 Limited time — 20% off all plans. View pricing →
← All posts 2026-05-16 12 min read

How to verify email addresses at scale in 2026

SMTP-handshake verification, catch-all and disposable detection, MX-record validation — how RevOps teams keep cold-outbound deliverability above 95% in 2026.

Email verificationRevOpsDeliverabilitySMTPAPI

The short answer to verifying emails at scale in 2026

Send each address through /v1/verify/email and read the response. Qcrawl checks syntax against RFC 5322, resolves MX records, performs a polite SMTP handshake without sending mail, flags catch-all and disposable providers, and returns a deliverability decision with a confidence score. Submit batches via webhook and consume the results.

The deeper question — the one RevOps leaders actually wrestle with — is why deliverability matters this much, where the verification taxonomy gets nuanced, how to handle catch-all domains without throwing away real leads, and how to keep bulk verification on the right side of GDPR. This recipe walks the full picture.

The problem with bad addresses in a cold-outbound pipeline

Cold outbound is unforgiving. A single percent of hard bounces tells mailbox providers your list is dirty, your sender reputation degrades, and suddenly the campaign that should have hit 30% open rates lands in the spam folder for everyone — even the clean addresses. The cost of a few bad addresses isn't the bounce itself. It's the downstream damage to every other email you send for the next thirty days.

Modern RevOps teams treat verification as table stakes. Lists from public sources, scraped contacts, conference attendee exports, even CRM data that hasn't been touched in six months — all of it gets run through a verifier before it hits the sending platform. The teams that skip this step learn the hard way.

Verification used to mean either a slow manual process or a brittle in-house SMTP script that nobody wanted to own. In 2026 it's an API call with a clear deliverability decision per address, scaled to the rate your campaign actually needs.

What the top alternatives offer

ZeroBounce set the standard for the verification-as-a-service category and continues to invest in the depth of its provider database. The accuracy guarantees and the breadth of supplementary scoring — abuse, complaint, toxic domain — have earned the trust of enterprise email marketing teams worldwide. For teams who want a verification-first product with deep reporting, it's a strong choice.

NeverBounce, Kickbox, and Emailable each bring excellent point solutions to the category. NeverBounce's per-address pricing model is famously transparent. Kickbox's deliverability reports are presentation-ready for the executive team. Emailable's UI is one of the cleanest in any RevOps tool. Teams running verification as a standalone workflow are well served by any of them.

Hunter.io, MillionVerifier, and Bouncer round out the field. Hunter.io's combination of finder and verifier is the natural starting point for many outbound teams, and the API surface area has matured impressively. MillionVerifier's volume pricing is hard to beat for very large lists. Bouncer's GDPR-first European positioning has resonated with EU buyers. The category is healthy, the tooling is good, and the bar keeps rising.

Where Qcrawl goes further

Qcrawl treats email verification as one signal in a larger data API rather than a standalone product. The same API key that runs /v1/verify/email also runs /v1/dns/lookup, /v1/dns/intelligence, the company-enrichment endpoints, and the full crawl and scrape surface. For RevOps teams already pulling firmographic data through Qcrawl, verification becomes a column on the same dataset rather than a separate vendor integration.

Where Qcrawl goes further is in the per-address signal richness. Beyond the headline SMTP verdict, the response carries the SMTP provider name, a catch-all flag, a disposable flag, and a calibrated 0.0–1.0 score that combines all signals. RevOps teams can build their own thresholds — send aggressively above 0.85, nurture between 0.60 and 0.85, drop below 0.60 — without having to glue together signals from multiple vendors.

The other practical edge is operational. Verification jobs over 10,000 addresses accept webhook callbacks. Per-domain pacing keeps a list heavy in one provider from blocking the rest of the batch. And the same billing meter covers verification, DNS lookups, and downstream enrichment, which makes the procurement story for a head of RevOps notably simpler.

The step-by-step

Step 1 — Start with the DNS layer

Before you verify any specific address at a domain, confirm the domain can actually receive mail. A missing MX record is an immediate signal — the address can't be valid because the domain isn't configured for email.

curl -X POST https://api.qcrawl.com/v1/dns/lookup \
  -H "Authorization: Bearer osk_a1b2c3d4e5f6" \
  -H "Content-Type: application/json" \
  -d '{
    "domain": "example.com",
    "records": ["MX", "TXT"]
  }'
{
  "domain": "example.com",
  "mx": [
    { "priority": 10, "host": "mx1.example.com" },
    { "priority": 20, "host": "mx2.example.com" }
  ],
  "txt": ["v=spf1 include:_spf.google.com ~all"],
  "resolved_at": "2026-05-16T09:14:22Z"
}

This is the cheapest possible filter. Domains without MX records get dropped before any verification cost is incurred. For very large lists with a long tail of domains, MX pre-filtering routinely removes a meaningful share of the input.

Step 2 — Add provider intelligence

Knowing which provider hosts a domain's email lets you predict verification behavior. Some providers respond to SMTP probes cleanly; others grey-list. The intelligence endpoint surfaces the provider name and detected technologies so you can tune downstream handling.

curl -X POST https://api.qcrawl.com/v1/dns/intelligence \
  -H "Authorization: Bearer osk_a1b2c3d4e5f6" \
  -H "Content-Type: application/json" \
  -d '{
    "domain": "example.com"
  }'
{
  "domain": "example.com",
  "email_provider": "Google Workspace",
  "nameserver_provider": "Cloudflare",
  "detected_tech": ["Google Workspace", "Cloudflare", "HubSpot"],
  "confidence": 0.97
}

This signal flows back into the verification confidence score automatically. You rarely call this endpoint as a standalone step; it's documented because the data shows up in downstream verification responses and helps explain why two addresses at different domains might get different scores.

Step 3 — Verify the address

The main event. Submit one or many addresses to /v1/verify/email. For a single address, the call is synchronous and returns within a second or two.

curl -X POST https://api.qcrawl.com/v1/verify/email \
  -H "Authorization: Bearer osk_a1b2c3d4e5f6" \
  -H "Content-Type: application/json" \
  -d '{
    "email": "[email protected]"
  }'
{
  "status": "success",
  "email": "[email protected]",
  "is_valid_syntax": true,
  "mx_found": true,
  "is_disposable": false,
  "is_catch_all": false,
  "smtp_check": "deliverable",
  "smtp_provider": "Google Workspace",
  "score": 0.92,
  "time_ms": 612
}

Five signals plus a calibrated score and a single-string smtp_check verdict. That's the full picture a sending platform needs to make a routing call. Syntax follows RFC 5322; the SMTP probe follows the handshake semantics formalized in RFC 5321 without ever issuing a DATA command, so no actual mail leaves the wire.

Step 4 — Parallelize for large lists

For lists in the tens of thousands, fan out parallel calls from your own worker pool. A modest concurrency of 20 to 50 in-flight verifications is well within rate limits on the higher plans and clears 100,000 addresses in under an hour for a typical recipient-domain distribution.

{`# Pseudocode: fan-out from any client language with an async pool
for email in big_list:
    pool.submit(verify, email)
results = pool.collect()`}

The docs show language-specific patterns. For longer-running jobs the /v1/scrape/async primitive with a webhook callback is the right shape; see the webhooks guide for signature verification and retry semantics.

Step 5 — Apply confidence thresholds

The smtp_check verdict and the score together let you build a routing policy that fits your campaign tolerance. A typical setup looks like this:

  • Score above 0.85, smtp_check = "deliverable": safe to send through your primary outbound channel.
  • Score 0.60–0.85, or smtp_check = "catch_all": route to a nurture sequence or a warm-up IP. Avoid for cold blasts.
  • Score below 0.60, or smtp_check in {"undeliverable", "no_mx_records", "invalid_syntax"}: drop from the active sending list. Optionally re-verify in 60 days.
  • is_catch_all = true: handle by policy. Many teams send to catch-all domains where the recipient was previously engaged, and skip them for true cold outreach.
  • is_disposable = true: drop unconditionally. Disposable addresses are almost never valid leads.
  • Role-shaped address (info@, sales@, contact@): classify these on your side with a local-part check before sending. Role inboxes occasionally convert for SMB outreach but warrant different routing.

The right thresholds depend on your sending infrastructure and risk tolerance. Conservative teams running on a single primary IP go tighter; teams with a dedicated warm-up pool can afford to send to lower confidence buckets.

Step 6 — Re-verify on a cadence

Email validity decays. People change jobs, domains get retired, mailboxes get archived. Best practice is to re-verify any address that hasn't been sent to or engaged with in the last 90 days, and to verify a fresh list within hours of acquisition.

For high-value lists — paying customers, recent webinar registrants, late-stage sales contacts — re-verify monthly. The cost is small and the deliverability protection is real.

A realistic scenario

Priya leads RevOps at a Series B B2B SaaS company. Her sales team runs cold outbound to roughly 8,000 new prospects per week across three sales pods, with a target reply rate that the board watches closely. A bad sending month doesn't just miss pipeline targets — it spooks the executive team about the whole motion.

Priya's team had been running an in-house verification script that one of the early engineers wrote and nobody had touched in a year. The script was slow, the accuracy was uncertain, and every time a campaign underperformed the first question was whether the verifier had silently regressed. She migrated to Qcrawl because she was already using the company-enrichment endpoints for firmographic scoring, and adding verification onto the same API key meant one fewer vendor to procure.

The shift was small operationally and large strategically. Verification became a column on her existing enrichment pipeline rather than a separate workflow. Hard-bounce rates dropped below 0.5% across all three pods. The board stopped asking about deliverability. Priya's team now spends its time on persona scoring and sequence A/B tests, which is exactly where a RevOps team should be spending its time.

Pricing math

Email verification pricing trends down with volume on every major vendor. The Qcrawl per-call rate and volume tiers live on the pricing page. For a typical mid-market RevOps team running 30,000 to 80,000 verifications a month, the line item sits comfortably inside a standard data-infrastructure budget.

The larger consideration is the cost of not verifying. A single damaged sending IP can take weeks of warm-up to recover. A few hundred dollars of verification spend per month is cheap insurance against the kind of deliverability incident that wrecks a quarter's pipeline targets. See the full pricing breakdown for the live tiers.

The verification taxonomy, in detail

Not every "invalid" address is invalid in the same way, and the right action depends on which failure mode you're looking at. Qcrawl surfaces each signal independently so you can build the policy that fits your campaign.

Syntax-invalid addresses fail RFC 5322 parsing. Typos, missing TLDs, unescaped special characters. These are almost always genuine errors and should be dropped unless you have a UI flow that can prompt the user to fix the input.

No MX record means the domain isn't configured to receive mail. The address can't be valid regardless of how the local part looks. Drop unconditionally.

SMTP-rejected addresses pass syntax and MX but get a hard rejection during the recipient handshake. The mailbox doesn't exist, or the server explicitly says it doesn't. High-confidence drops.

Catch-all domains accept every address at the domain, which means a positive SMTP signal carries no real information. Qcrawl flags catch-all status explicitly. Many teams treat catch-all addresses as valid only when paired with another confirming signal — a recent engagement, a LinkedIn match, a website form fill.

Disposable addresses resolve to known temp-mail providers. Almost always throwaways. Drop unconditionally.

Role-based addresses — info@, sales@, contact@, hello@ — are valid but rarely belong to a specific buyer. Treat as a separate routing class.

GDPR, CAN-SPAM, and the legal floor

Verification itself doesn't create new legal exposure — you're checking whether an address you already hold is valid, not sending mail to it. The exposure shows up earlier in the pipeline: how you obtained the addresses, whether you have a lawful basis to contact those individuals, and how you handle suppression for opt-outs.

For lists acquired through legitimate means — webinar signups, content downloads, sales conversations, partner referrals — verification is a deliverability hygiene step that virtually every regulator treats as normal business practice. For purchased lists of EU residents you have no prior relationship with, the calculus is different and a conversation with counsel is the right move before you scale. The Wikipedia overview of email marketing regulations is a reasonable backgrounder, and your legal team will have the local nuance.

How verification fits into a larger RevOps stack

Verification rarely lives alone. The teams getting the most out of Qcrawl pair it with company enrichment, contact discovery, and signal-based intent scoring — all on the same API. See the lead enrichment recipe for the upstream pattern that produces clean, verified contacts ready for outbound.

Downstream, verification results flow into your CRM, your sequencing tool, and your reporting layer. The confidence score is the right pivot for outbound reporting — campaigns segmented by confidence bucket give you a much clearer read on sequence quality than raw reply rates do. The docs cover the full integration surface.

The cadence question

How often should you re-verify? The honest answer is "it depends on how fast your addresses decay." For B2B contacts in high-churn industries — tech, media, consulting — quarterly re-verification is the floor. For more stable industries, semiannual works. For freshly acquired lists, verify within hours.

A useful heuristic: any address that hasn't engaged with a sent email in 90 days should be re-verified before the next major campaign. The cost is small; the protection against a bad sending month is real. Teams that internalize this cadence stop having deliverability emergencies.

Closing the loop

Email verification in 2026 is no longer a tool you bolt onto a sending platform — it's a signal that flows through your entire RevOps pipeline, calibrated to your campaign tolerance and integrated with the enrichment data that gives every address its context. The hard parts are the taxonomy, the catch-all problem, the legal floor, and the cadence. The easy part is the API call.

If you're keeping cold-outbound deliverability above 95%, protecting a hard-won sender reputation, or just cleaning a CRM that hasn't been touched in a year, the recipe above is the production pattern. Start with DNS, layer in provider intelligence, verify with confidence thresholds, and re-verify on a sensible cadence. The docs have the full parameter surface, and our team is happy to walk through the right thresholds for your specific sending profile. We'd love to see what your reply rates look like a month from now.

Common questions

How accurate is SMTP email verification?
On addresses that pass syntax, MX, and SMTP checks together, deliverability accuracy lands above 95% for most consumer and business domains. Catch-all servers and aggressive grey-listing cap that ceiling, which is why Qcrawl returns a confidence score per address rather than a simple yes-or-no flag.
Can email verification damage sender reputation?
Done politely, no. Qcrawl uses connection pooling, paces handshakes per recipient domain, and never sends actual mail during verification. The risk shows up when teams blast SMTP probes from their primary sending IP. Use a managed verifier so verification traffic stays separated from production sending.
Is bulk email verification legal under GDPR?
Verifying addresses you have a lawful basis to contact is generally fine. Verifying purchased lists of EU residents you have no prior relationship with sits in a gray zone and warrants a conversation with counsel. CAN-SPAM in the US is more permissive, and yet sender-reputation hygiene applies everywhere.
What's a catch-all server?
A mail server configured to accept any address at a domain, then bounce or filter internally. Catch-alls return positive SMTP signals for addresses that don't actually exist. Qcrawl flags catch-all domains explicitly so you can decide whether to send, quarantine, or pattern-match against known good addresses.
How do you detect disposable email addresses?
Qcrawl maintains a continuously updated registry of disposable and temporary-mail providers, cross-checked against DNS patterns and known service signatures. The verify endpoint flags any address resolving to a disposable provider, which lets RevOps teams strip throwaways before they hit the CRM.
Should I remove role-based emails from a sales list?
Usually yes, with exceptions. Addresses like info@, sales@, and contact@ rarely belong to a buying decision-maker and tend to have lower engagement rates. Qcrawl flags role-based addresses as a separate signal so you can choose to exclude, deprioritize, or route them differently.
How fast can Qcrawl verify large lists?
A list of 100,000 addresses typically completes in 30 to 90 minutes depending on the recipient-domain distribution. Submit through /v1/verify/email with a webhook callback for long jobs. Verification respects per-domain pacing so a list heavy in a single provider doesn't slow the rest of the batch.
What does the score mean?
A 0.0-to-1.0 number combining syntax validity, MX presence, SMTP response, catch-all status, and provider reputation. Above 0.85 is safe to send. Between 0.60 and 0.85 is conditional — fine for nurture, riskier for cold outbound. Below 0.60 means strip from the list.
Does verification work for every provider?
Verification is most accurate against providers that respond to SMTP probes honestly. Some providers — notably a handful of large consumer mail services — grey-list probes or accept all addresses for privacy. Qcrawl normalizes confidence scores per provider so the output stays comparable across domains.

Start pulling clean data in minutes.

1,000 requests free every month. No credit card required.