BillionVerify LogoBillionVerify

Verification Types

Email checker result types: valid, invalid, disposable, role-based, catch-all, risky, and unknown emails explained.

Understanding verification results is crucial for making informed decisions about your email data. This guide explains each result type and provides recommendations for handling them.

Status Types

Every verification returns one of seven primary statuses:

StatusScoreMeaningRecommended Action
valid0.9+Email exists and can receive messagesSafe to send
invalid0.1Email doesn't exist or can't receiveRemove from list
unknown0.5Could not determine validityRetry later or use caution
risky0.4Email presents potential delivery concernsUse caution, monitor bounces
disposable0.3From disposable/temporary email serviceConsider removing
catchall0.7Domain accepts all emailsMonitor for bounces
role0.6Role-based email (info@, support@)Usually deliverable, lower engagement

Valid

{
  "status": "valid",
  "is_deliverable": true,
  "smtp_check": true,
  "score": 0.95
}

Meaning: The email address exists and can receive messages.

Recommended Action: Safe to send. Add to your active mailing list.

Confidence Level: High (score typically > 0.8)

Invalid

{
  "status": "invalid",
  "is_deliverable": false,
  "reason": "mailbox_not_found",
  "score": 0.10
}

Meaning: The email address cannot receive messages.

Common Reasons:

  • Mailbox doesn't exist
  • Domain doesn't exist
  • Invalid email format
  • Domain has no mail server

Recommended Action: Remove from your list immediately. Sending to invalid addresses damages your sender reputation.

Unknown

{
  "status": "unknown",
  "is_deliverable": null,
  "score": 0.50
}

Meaning: We couldn't determine the email's validity with certainty.

Common Causes:

  • Mail server timeout
  • Temporary server issues
  • Greylisting in effect
  • Server blocking verification attempts

Recommended Action: Try verifying again later. If persistently unknown, use caution or remove from high-priority campaigns.

Risky

{
  "status": "risky",
  "is_deliverable": null,
  "score": 0.40
}

Meaning: The email presents potential delivery concerns but may still be deliverable.

Common Causes:

  • Domain has poor reputation
  • Email pattern suggests potential issues
  • Mixed signals from verification checks

Recommended Action: Use caution. Consider excluding from important campaigns or test with a small batch first.

Disposable

{
  "status": "disposable",
  "is_disposable": true,
  "score": 0.30
}

Meaning: The email is from a temporary/disposable email service.

Examples of disposable domains:

  • mailinator.com
  • 10minutemail.com
  • guerrillamail.com
  • tempmail.com

Why it matters:

  • Users with disposable emails rarely engage
  • Often used for spam or abuse
  • Low lifetime value
  • May indicate fraudulent intent

Recommended Action: Consider removing from your list, especially for registration flows.

Catchall

{
  "status": "catchall",
  "is_catchall": true,
  "is_deliverable": null,
  "score": 0.70
}

Meaning: The domain accepts all emails, so we can't confirm if this specific mailbox exists.

Impact:

  • Cannot verify specific mailbox existence
  • Higher risk of bounces
  • May indicate smaller organization

Recommended Action: Keep in your list but monitor for bounces. Consider A/B testing before large sends.

Role

{
  "status": "role",
  "is_role": true,
  "score": 0.60
}

Meaning: The email is a role-based address (not tied to a specific person).

Common role-based patterns:

PatternTypeRisk Level
info@GeneralMedium
support@SupportMedium
sales@SalesLow
admin@TechnicalHigh
noreply@AutomatedVery High
webmaster@TechnicalHigh
abuse@ComplianceVery High

Why it matters:

  • Multiple people may receive the email
  • Higher complaint rates
  • Lower engagement metrics
  • Some ESP policies restrict role-based addresses

Recommended Action: Usually deliverable but expect lower engagement. Consider for transactional emails, use caution for marketing.

Result Fields Explained

is_deliverable

ValueMeaning
trueEmail can receive messages
falseEmail cannot receive messages
nullUnknown deliverability

is_disposable

Indicates whether the email is from a temporary/disposable email service.

is_catchall

Indicates whether the domain accepts all email addresses.

is_role

Indicates whether the email is a role-based address (info@, support@, etc.).

is_free

Indicates whether the email is from a free email provider.

Examples:

  • gmail.com
  • yahoo.com
  • outlook.com
  • hotmail.com

Use cases for this flag:

  • B2B vs B2C segmentation
  • Lead scoring
  • Fraud detection (high percentage of free emails in B2B)

smtp_check

Indicates whether SMTP-level verification was performed.

ValueMeaning
trueSMTP verification was performed
falseSMTP verification was not performed

Confidence Score

The score field (0.0 - 1.0) provides an overall confidence rating:

0.0 ──────────── 0.5 ──────────── 0.8 ──────────── 1.0
 │                │                │                │
Invalid     Unknown/Risky     Likely Valid      Valid

Score Ranges

ScoreInterpretationAction
0.9 - 1.0Highly confident validSafe to send
0.8 - 0.9Likely validSafe for most campaigns
0.6 - 0.8UncertainUse caution, test first
0.4 - 0.6RiskyAvoid for important campaigns
0.0 - 0.4Likely invalidRemove from list

Handling Strategies by Type

For Marketing Campaigns

function shouldIncludeInCampaign(result) {
  // Strict: Only include high-confidence valid emails
  if (result.status === 'valid' && result.score >= 0.8) {
    return true;
  }
  return false;
}

For Transactional Emails

function canSendTransactional(result) {
  // More lenient: Include valid, catchall, and role
  if (result.status === 'valid') return true;
  if (result.status === 'catchall' && result.score >= 0.5) return true;
  if (result.status === 'role' && result.score >= 0.5) return true;
  return false;
}

For User Registration

function allowRegistration(result) {
  // Block disposable and invalid
  if (result.status === 'invalid') return { allow: false, reason: 'invalid_email' };
  if (result.status === 'disposable') return { allow: false, reason: 'disposable_not_allowed' };
  if (result.status === 'risky') return { allow: false, reason: 'risky_email' };
  return { allow: true };
}

Decision Matrix

Use this matrix to decide how to handle different verification results:

StatusScoreMarketingTransactionalRegistration
valid0.9+SendSendAllow
catchall0.7CautionSendAllow
role0.6CautionSendAllow
unknown0.5SkipCautionRetry
risky0.4SkipCautionBlock
disposable0.3SkipCautionBlock
invalid0.1RemoveRemoveBlock

Next Steps

On this page