Skip to content
MailCull
Back to blog verify-email

How to Check if an Email Address Is Valid (Step by Step)

Three ways to check whether an email address is valid: single-address tool, bulk verifier, manual SMTP probe. When to use each, what each one tells you, what to do with the result.

Most people asking "how do I check if an email is valid" are in one of three situations. They have a single address from a business card or an Apollo export and want to know whether to email it. They have a CSV of a few thousand addresses and want a confidence-graded list before a campaign. Or they're integrating signup-form validation into a product and need an API call that runs in real time. Same underlying question, different right answers, different tools, different things to do with the result.

This is the practical step-by-step for all three. What to do, what each method actually proves, and how to read the verdict you get back.

01Method 1: single address, free, takes ten seconds

You have one address. You want one answer. The fastest path:

  1. Open MailCull's public checker. No signup. No credit card.
  2. Paste the address into the input.
  3. Hit check.

The response surfaces the full evidence chain: not just a yes/no verdict, but the underlying signals: syntax pass/fail, MX records resolved, SMTP probe response (the actual protocol reply from the receiving server), catch-all detection result, role-based flag, disposable flag if applicable, and a confidence score.

A representative response for a real corporate address:

[email protected]                 ✓ deliverable
─────────────────────────────────────────────────────────
syntax_valid              Email format passed RFC 5321 validation
mx_found                  MX record: example-corp-com.mail.protection.outlook.com
provider_microsoft        Microsoft 365 protected tenant
m365_http_enum            Microsoft confirmed mailbox via GetCredentialType
smtp_confirmed            Server returned 250 2.1.5 OK

Confidence: 0.94

This is the method to use when:

  • You're about to send a single important message (sales proposal, follow-up, hiring outreach)
  • You're verifying a business card from a meeting
  • You're spot-checking a single address from a larger list you don't trust

What you don't need an account for: this. The public checker is free, no rate limit on individual addresses, no email asked for. The reason it's free is the same reason the Free plan exists at 500 credits/month: we'd rather you see the evidence chain on one address and trust it than make you sign up to find out.

02Method 2: a CSV or list, bulk verification

You have 50 / 500 / 5,000 / 50,000 addresses and need to know which ones are safe to send to. The single-address checker doesn't scale; you need the bulk workflow.

  1. Create a free account. 500 credits per month. No credit card.
  2. Go to Verify List in the dashboard.
  3. Upload your CSV. Any column structure: the extractor finds the addresses wherever they live in the file. CRM exports, event registrations, partner lists, merged sources: they all work.
  4. Pick a scan mode:
  • Quick scan: syntax + DNS/MX + disposable detection. Sub-second per address. Catches the obviously broken stuff. Useful when you've already verified the list recently and just need a freshness check.
  • Deep scan: adds full SMTP probing (including the M365 cascade for B2B addresses) and catch-all detection. Slower (~1-2 seconds per corporate address) but materially more accurate. Free plan includes deep scan: same engine as Pro.
  1. Wait for the job. Progress updates every ~1.5 seconds. A 1,000-row list takes a few minutes; 10,000 rows take 15-30 minutes depending on the corporate/consumer mix.
  2. Review the four buckets:
  • deliverable: passed every check, SMTP probe returned 250 OK against a non-catch-all server. Safe to send.
  • risky: addresses worth segmenting. Catch-all server, role-based, M365 cascade and SMTP returned contradictory signals.
  • undeliverable: confirmed bad. SMTP 550 reject, missing MX records, syntax failure. Drop.
  • unknown: couldn't get an answer (DNS timeout, server refused). Not charged to your credit pool. Re-run individually if needed.
  1. Export. Your original CSV with new columns appended (email_status, reason_flags, confidence_score, smtp_reply if you toggle the "include evidence" option). Original columns and order preserved.

Use this method when:

  • You're preparing a campaign and the list is > 100 addresses
  • You're cleaning a CRM export before importing into a new ESP
  • You're auditing list quality after acquiring a list (always re-verify acquired lists)
  • You're running quarterly hygiene on your house list

03Method 3: programmatic validation at signup time

You're building a product and want to verify addresses in real time at form submission. Same engine, different surface: call the API:

curl -X POST https://api.mailcull.io/v1/email-validations \
  -H "Authorization: Bearer $MAILCULL_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"email": "[email protected]"}'

The response is the same evidence-chain structure the dashboard surfaces, in JSON:

{
  "email": "[email protected]",
  "finalStatus": "deliverable",
  "score": 94,
  "reasonFlags": ["syntax_valid", "mx_found", "provider_microsoft", "m365_http_enum", "smtp_confirmed"],
  "smtpStatus": "deliverable",
  "provisional": false
}

API access starts on the Pro plan ($19/month flat for 10,000 credits + the API + MCP), with Max at $49/month for 75,000 credits if you're verifying at higher volume. For programmatic batch verification there's a separate, asynchronous endpoint: POST /v1/jobs with the CSV body returns 202 Accepted with a job id, you poll GET /v1/jobs/{id} until its status is completed, then pull the paginated rows from GET /v1/jobs/{id}/results.

If you're integrating into an AI/agent workflow, the same checks are available via the MailCull MCP server at mailcull.io/mcp: Claude / Cursor / any MCP client can call verify_email directly. The MCP path returns the evidence chain in the same shape.

Use this method when:

  • You're validating addresses at signup form submission
  • You're enriching a CRM pipeline with verification at write time
  • You're building an AI agent workflow that needs to validate addresses inline
  • You need the verdict in your application's response, not in a dashboard

04What NOT to do: sending a test message

Don't send a test message to see if it bounces: it costs you sender reputation and the SMTP probe in any method above gets the same signal in seconds without delivering anything. See verify an email without sending for the full reasoning.

05What "valid" should mean

The four-word verdict vocabulary MailCull uses, with what each one actually means and what to do with it:

VerdictMeaningWhat to do
deliverableAll checks passed. SMTP probe returned 250 OK on a non-catch-all server.Send.
riskyThe address resolved, but something is ambiguous (catch-all server, role-based, contradictory M365 signals).Segment for review. Send carefully, separate from your highest-trust segment.
undeliverableConfirmed bad. SMTP rejected, no MX records, or syntax failure.Drop. Don't try again.
unknownCouldn't get an answer (network timeout, server refused connection).Re-verify later. Not charged.

"Valid" in casual conversation usually means deliverable: passed every check, no warning flags. "Valid" in a stricter sense means "we have a confident answer either way" (so deliverable, risky, or undeliverable, but not unknown).

The thing to internalize: the answer to "is this email valid" is rarely a single bit. It's a verdict + the reason flags underneath. The evidence chain is what lets you defend the send decision to a client or a deliverability team.

06The decision tree, in one paragraph

One address you need an answer on right now → public checker. CSV with more than 100 addresses → free account, Verify List, deep scan, review the four buckets, export. Real-time validation in your product or agent workflow → Pro API or MCP. Don't send test messages to verify; use the SMTP probe in pre-send mode.

Start free: 500 credits per month, deep scan included, no credit card. Pro at $19/month flat unlocks 10,000 credits, the API, and the MCP server, and Max at $49/month takes you to 75,000.

Try it

Start with 500 free validation credits. No card.

Both Free and Pro run the same scan engine, full SMTP probe, MX lookup, typo, disposable, domain checks, and the evidence chain on every verdict. The difference is the monthly credit pool (Free=500, Pro=10,000, Max=75,000) plus Pro's API and MCP access.

Found a mistake? Email [email protected]. verify-email · email-validation · deliverability · how-to · evidence-chain