The short version

The full mapping

TOM condenses every BillionVerify verdict into one light. Green means send. Yellow means decide deliberately. Red means excluded by default — you cannot select it for a cold campaign. The table below is the complete correspondence.

TOM lightev_scoreStatusMeaning
🟢 Green≥ 0.9validEmail exists and can receive messages
🟡 Yellow≥ 0.7catchallDomain accepts all emails — mailbox not individually confirmed
🟡 Yellow≥ 0.6roleRole-based address (info@, support@, …) — deliverable, lower engagement
🔴 Red≥ 0.5unknownValidity could not be determined
🔴 Red≥ 0.3disposableTemporary email service
🔴 Red≈ 0.3riskyMailbox likely accepts mail, but the domain is blocklisted for spam, phishing, malware or botnet activity
🔴 Red< 0.3invalidEmail does not exist or cannot receive messages

Two things worth noticing immediately. First, the mapping is ordered: TOM reads the score bands from top to bottom, so each address lands in exactly one row. Second, there are seven verdicts behind three lights — red covers four different situations (unknown, disposable, risky, invalid) that fail for completely different reasons. The rest of this guide unpacks each one.

Before the color: what verification actually checks

The light is the last step of a six-stage pipeline. Knowing the stages matters because each color is really a statement about where the address failed or passed:

  1. Syntax check. Is the address well-formed (one @, valid local part and domain)? A malformed address never gets past this stage — it becomes invalid with reason invalid_syntax.
  2. Domain check. Does the domain exist and resolve in DNS? A dead or unregistered domain becomes invalid (no_mx_records, or spf_reject_all when the domain explicitly rejects all inbound mail).
  3. MX record check. Does the domain publish mail servers that can receive email? No MX records means no inbox exists — again invalid.
  4. Disposable detection. Is the domain on the list of 5,000+ known temporary email providers (Mailinator, 10MinuteMail, Guerrilla Mail and the like, updated daily)? A match becomes disposable, regardless of whether the mailbox technically exists.
  5. SMTP check. The decisive step: BillionVerify connects to the recipient mail server and asks, via RCPT TO, whether the specific mailbox exists. A 250 OK confirms it (valid); a 550 user unknown kills it (invalid, mailbox_not_found). Everything ambiguous — timeouts, greylisting, rate limits, blocked probes — becomes unknown or catchall.
  6. Score calculation. All stage results are combined into a confidence score from 0.0 to 1.0. SMTP confirmation carries the most weight (about 30%), followed by MX records, domain existence, disposable status and reputation signals.

On top of this pipeline there are two orthogonal detections: role-based patterns (is this a shared inbox?) and reputation screening against the Spamhaus Domain Blocklist (is this domain a confirmed spam, phishing, malware or botnet source?). They produce the role and risky verdicts respectively.

Green: valid

🟢 Green · ev_score ≥ 0.9 · status valid

The mailbox exists and can receive messages. SMTP returned 250 OK for this specific address (smtp_deliverable). Safe to send.

Green is the only verdict that confirms the individual mailbox, not just the domain. Syntax is valid, the domain exists, MX records are published, the address is not disposable, and the receiving server explicitly accepted the recipient. Confidence is high — in BillionVerify's scale this is the 0.9–1.0 band, "highly confident valid".

What to do: include in cold campaigns without hesitation. Green addresses are the backbone of every send; the campaign quality threshold in TOM exists precisely to keep their share high.

Yellow: catch-all

🟡 Yellow · ev_score ≥ 0.7 · status catchall

The domain accepts all emails, so this specific mailbox cannot be confirmed. The probe address was accepted along with a random test address — the server says yes to everything. Keep, but monitor bounces.

Catch-all is a property of the domain, not of the address. Small companies and self-hosted setups often configure their mail server — or a security gateway such as Mimecast or Proofpoint in accept-all mode, or a Microsoft 365 internal relay — to accept every recipient rather than bounce unknown ones. The SMTP conversation therefore proves nothing about whether marco@ actually works there.

Typical reason codes behind a catch-all include catch_all_domain (random probe accepted), catch_all_deliverable (catch-all domain where the specific address also returned 250 OK), gateway_accept_all and m365_internal_relay. Forwarding-alias services (SimpleLogin, Firefox Relay, Duck.com) and some regional consumer domains land here too.

Why yellow and not green? Because the bounce risk is structurally higher: you are sending to an address the verifier could not individually confirm. Why yellow and not red? Because many catch-all addresses are real people at real companies — discarding them all would throw away legitimate prospects, especially in the SMB segment.

Yellow: role-based

🟡 Yellow · ev_score ≥ 0.6 · status role

A shared inbox, not a person. Addresses like info@, support@, sales@, admin@ or noreply@ are usually deliverable but behave differently: several people may read them, complaint rates are higher and engagement is lower.

One subtlety from the documentation: role addresses inherit the reason code from their underlying SMTP check — there are no dedicated reason codes for this status. A role address that passed SMTP shows reason: smtp_deliverable, exactly like a green address. The role flag (is_role: true) is what distinguishes it.

Not all role addresses carry the same risk. As a rule of thumb from BillionVerify's reference:

PatternTypeRisk level
sales@SalesLow
info@, support@GeneralMedium
admin@, webmaster@TechnicalHigh
noreply@, abuse@Automated / complianceVery high

Why yellow? The mailbox exists, so red would be wrong — but a cold email to info@ competes with every other inbound message to that company, and some providers restrict role addresses outright. Fine for transactional mail; for cold outreach, use deliberately and expect lower reply rates.

Red: unknown

🔴 Red · ev_score ≥ 0.5 · status unknown

Validity could not be determined. The mail server timed out, greylisted the probe, rate-limited it, or belongs to a provider that blocks automated SMTP verification altogether. Excluded by default — TOM does not let you select it for a cold campaign.

Unknown is the most misunderstood verdict, because "unknown" sounds neutral while TOM shows red. The red is intentional: an address whose validity cannot be confirmed carries the same sending risk as a bad one until proven otherwise. That is why TOM guides you toward doing cold outreach properly and blocks red addresses instead of letting you gamble a bounce on them.

Common causes split into two groups:

  • Temporary and retryable — worth verifying again: smtp_timeout, smtp_rate_limited, smtp_greylisted (including the Mimecast variant), Proofpoint async lookups, Google and Microsoft 365 temporary rejections, DNS timeouts and transient internal errors.
  • Structural and not retryable — retrying will not change the result: providers that block SMTP probes by policy (Apple iCloud, Microsoft consumer mail, Proton, Tuta, Japanese carrier domains), servers that blacklisted the probe connection, misaligned DMARC configurations, mailboxes over quota or disabled, and accounts configured to skip SMTP verification.

Practical rule: re-verify once after a delay — greylisting and rate limits often clear, and the address may turn green or yellow and become selectable. While it stays unknown, it remains excluded by default and cannot be added to a cold campaign.

Red: disposable and risky

🔴 Red · ev_score ≈ 0.3 · status disposable / risky

Two different verdicts share the same score — and the same light. Disposable means a temporary email service with no lifetime value. Risky means the mailbox probably works but the domain is blocklisted for abuse. Both are excluded by default in TOM and cannot be selected for a cold campaign.

Disposable (is_disposable: true, reason disposable_domain) covers Mailinator, 10MinuteMail, Guerrilla Mail, TempMail and thousands of smaller generators. These addresses rarely engage, are often used for spam or fraud, and signal near-zero lifetime value — particularly damaging in registration flows.

Risky is the verdict missing from most summaries, so it deserves a full explanation. It means the mailbox most likely accepts mail (is_deliverable: true), but the recipient domain is listed in the Spamhaus Domain Blocklist for spam, phishing, malware distribution or botnet command-and-control. The risk_reasons array tells you which one: spamhaus_dbl_spam, spamhaus_dbl_phish, spamhaus_dbl_malware or spamhaus_dbl_botnet_cc. Sending there can damage your own sending reputation, so the recommended action is identical to disposable: remove from the list. Retrying never changes a risky result.

One reassurance from the documentation: domains flagged by Spamhaus as abused legitimate sites — a normal company website that was compromised — never produce a risky result. A hacked website does not mean that company's mailboxes are bad.

In TOM

Both verdicts surface as red at the 0.3 score band, and TOM excludes both from selection. If you need to tell them apart — for example to distinguish "never engaged" from "dangerous to touch" — look at the underlying status: disposable deserves deletion from any list; risky additionally warns you never to retry it as if it were a temporary failure.

Red: invalid

🔴 Red · ev_score < 0.3 · status invalid

The address cannot receive messages. The mailbox does not exist, the domain does not exist, or the format itself is broken. Excluded by default — TOM does not let you select it, because every send to an invalid address would be a certain bounce and damage your sender reputation.

Invalid is the most confident negative verdict (score around 0.1). Typical reason codes: invalid_syntax (malformed address), no_mx_records (domain has no mail server), spf_reject_all (domain explicitly rejects all inbound mail), mailbox_not_found (server returned 550 / user unknown) and host_not_found (the MX host itself is unreachable).

There is no "maybe" here and no retry logic that helps: an invalid address will bounce every time. In cold outreach it is pure cost — a bounce, a reputation hit, and a prospect who never existed.

Score vs status: which one decides the color?

Both — and they never disagree. Every status carries a fixed score, so the two readings are equivalent:

Score bandInterpretationTOM light
0.9 – 1.0Highly confident valid🟢 Green
0.6 – 0.8Uncertain — deliverable but unverified or shared🟡 Yellow
0.4 – 0.6Could not verify🔴 Red
0.0 – 0.4Likely invalid, disposable or abusive🔴 Red

Think of the score as the machine-readable form of the status, and the color as the human-readable form of the score. TOM evaluates the bands from top to bottom — the first threshold the score meets wins — which is why an address can only ever have one light. The is_deliverable flag follows the same logic: true for valid (and technically for risky), false for invalid, null for unknown and catch-all where deliverability is genuinely undetermined.

What to do with each color in TOM

Verification is only useful if it changes what you send. In TOM it does so by design: red addresses are excluded by default and cannot be selected for a cold campaign — guiding you toward doing cold outreach properly means not letting you send to addresses that would certainly bounce. Green and yellow are selectable; the per-campaign quality threshold then decides how much yellow a send may contain.

VerdictLightIn a TOM cold campaign
valid🟢Selectable — send
catchall🟡Selectable — your call; test batch, monitor bounces
role🟡Selectable — your call; expect lower engagement
unknown🔴Excluded by default, not selectable — re-verify first
disposable🔴Excluded by default, not selectable
risky🔴Excluded by default, not selectable
invalid🔴Excluded by default, not selectable

In TOM this plays out in three places: the per-address light tells you what each contact is worth, the minimum quality threshold per campaign keeps green share high across the selectable addresses, and the pre-flight check before launch stops a campaign whose list quality would burn the domain. Red addresses never reach that point — they are filtered out before selection. Verification credits never expire, so re-verifying an unknown address next week — or cleaning a list that sat idle for 90 days — costs nothing extra, and an address that turns green or yellow becomes selectable.

Green dominates → launch

High-confidence valid addresses. This is the list composition every campaign should aim for.

Some yellow → decide case by case

Catch-all and role addresses are selectable and can stay for a deliberate test, but they should never dominate a cold send.

Red unknowns → re-verify

Excluded by default and not selectable. Re-verify once after a delay; if the address turns green or yellow, it becomes selectable.

Red disposable / risky / invalid → out

Excluded by default and not selectable. No test batch, no second chance — TOM blocks them so a certain bounce never leaves your domain.

When the result surprises you: reason codes

Every verdict ships with a reason field — a stable string identifier that explains why the address got its status. When a light looks wrong, the reason is where you look. The most useful ones to recognize:

  • Looks red but you expected green: mailbox_not_found (typo in the address or departed employee), no_mx_records (domain without mail), smtp_blocked or smtp_unverifiable (the provider refuses probes — common with iCloud, Microsoft consumer mail, Proton and Tuta).
  • Looks yellow but you expected green: catch_all_domain or gateway_accept_all (the domain accepts everything), or an inherited smtp_deliverable paired with is_role: true (a working but shared inbox).
  • Stuck on unknown: check whether the reason is retryable (smtp_timeout, smtp_rate_limited, smtp_greylisted, google_rate_limit, dns_timeout) or structural (smtp_unverifiable, carrier_blocked, mailbox_full). Only the first group improves on retry.
  • Score 0.3 with no obvious cause: check risk_reasons. A spamhaus_dbl_* entry means the domain is blocklisted — the address is not "low quality", it is actively dangerous to your reputation.

Two companion flags help with segmentation beyond deliverability: is_free (Gmail, Yahoo, Outlook — useful for B2B vs B2C scoring and fraud detection) and smtp_check (whether the deep SMTP probe actually ran, or the verdict rests on domain-level heuristics).

FAQ

Why is a catch-all address yellow and not green?

A catch-all domain accepts mail for any address, so the SMTP probe cannot confirm that the specific mailbox exists. The address may well be deliverable, but the bounce risk is higher — yellow means keep it only if you accept that risk and monitor bounces.

Why is a role-based address yellow and not green?

Role addresses such as info@ or support@ are usually deliverable, but they belong to a shared inbox: several people may read the message, complaint rates are higher and engagement is lower. Yellow signals that the mailbox exists but the reply dynamics are different from a personal inbox.

Why is unknown red if the address might be valid?

Unknown means the verifier could not determine validity — server timeout, greylisting, rate limiting or a provider that blocks SMTP probes. Some unknown results are retryable, but sending to them blindly risks bounces, so TOM treats them as red: excluded by default and not selectable for cold campaigns. Re-verify later — if the address turns green or yellow, it becomes selectable.

What is the difference between disposable and risky if both score 0.3?

Disposable means the domain belongs to a temporary email service with no engagement value. Risky means the mailbox probably accepts mail but the domain is listed by Spamhaus for spam, phishing, malware or botnet activity. Both are red in TOM — excluded by default and not selectable for cold outreach. One would never reply, the other could damage your sender reputation, so TOM blocks both instead of letting you choose.

Should I send cold email to yellow addresses?

Only deliberately. Catch-all and role-based addresses are deliverable often enough for transactional mail, but for cold campaigns they deserve caution: send a smaller test batch first, watch bounces and replies, and keep a per-campaign quality threshold so yellows never dominate a send.

Which decides the color in TOM: the score or the status?

Both, and they always agree: each BillionVerify status carries a fixed score (valid 0.9+, catch-all 0.7, role 0.6, unknown 0.5, disposable and risky 0.3, invalid 0.1). TOM maps score bands to lights, so reading the color is equivalent to reading the underlying status.

Start the beta

Verify first, then send

Every address in TOM carries its green, yellow or red light before a single email goes out — red addresses are excluded by default and cannot be selected, per-campaign quality thresholds keep the selectable list strong, and a pre-flight check stops weak lists from burning your domain. Verification credits are purchased separately and never expire. AI copywriting, warmup and replies are available with each email mailbox subscription ($19 per mailbox/month; no platform-access fee). Domains and verification credits are separate. Cancellation stops future renewals at the end of the billing period; statutory consumer rights apply.

Start with one mailbox

This guide is part of the TOM blog. Verification statuses and scores follow the BillionVerify verification-types documentation and the verification-reasons reference. Related reading: the 12 cold email frameworks, 12 cold email software alternatives compared and warmup as a platform behavior.