Explainer

Every Email Status, Explained

An email status tells you how far an address was checked and whether to send. Here are all 13 values and the rule for each.

Get your free API key →Free to start. No credit card. 1,000 records to spend whenever you like.

An email status is a label that says how far an address was checked and whether it is safe to send. LeadOcean uses 13 values: verified, catch_all_valid, catch_all, risky, unknown, untested, invalid, role, disposable, spam_trap, abuse, derived and none.

Key takeaways

  • Four groups cover all 13 values: send, send in a separate batch, check first, and never send.
  • untested means nobody checked yet. unknown means a check ran and could not decide. They are not the same.
  • verified on a business address means our own verifier sent to it and the server accepted. A supplier's word alone is published as untested.
  • Read the status before you send. LeadOcean does not refund or credit bounced emails.

What it is

An email status is the deliverability verdict stored next to an address, describing how it was tested and what the test found.

The status is not a quality score and not a promise. It records evidence. verified is strong evidence the mailbox exists. catch_all is no evidence either way. invalid is evidence the mailbox does not exist.

Each person in LeadOcean has one best email, and that email has one status. The status travels with the record in search rows, enrichment, exports and the MCP server (LeadOcean API enums, September 2026).

How it works

A verifier talks to the recipient's mail server the way a sending server would, then hangs up before any message goes out. The reply decides most of the status.

  1. The address enters the dataset, either found on a source or built from the company's address pattern. A built address is marked derived.
  2. Address-level checks run first. A shared mailbox such as info@ is marked role. A throwaway domain is marked disposable.
  3. The verifier connects to the mail server and asks whether the recipient exists. The SMTP standard defines the accept and reject replies (RFC 5321, September 2026).
  4. An accept on a normal domain gives verified. A reject gives invalid.
  5. If the domain accepts every name, the verifier cannot tell. The address gets catch_all, or catch_all_valid when a provider identity check confirms the mailbox.
  6. If the check ran but the server gave no clear answer, the status is unknown. An address nobody has run yet stays untested.

Worked example, with placeholders. Three addresses at one company, three different outcomes:

code
jane.doe@acme.com    accepted by the server           -> verified
info@acme.com        shared mailbox, accepted         -> role
zq81xk@acme.com      rejected by the server           -> invalid

All three look like normal addresses. Only the status tells you which ones to send.

Email status vs email type

People confuse the status with the type. They answer different questions, and both appear on every search row.

email_statusemail_type
Question it answersWill this address accept mail?Whose address is this?
Example valuesverified, catch_all, invalidwork, work_other, other
Set byA verifier and its checksThe relationship between person and domain
Affects bounce riskDirectlyIndirectly
Filter nameemailStatusemailType

A work address is at the person's current employer. A work_other address is at a former one. Both can be verified today, and only the first is likely to reach the person. Look at both fields.

The status has a second look-alike, has_email. That flag only says an address exists. It says nothing about whether the address works.

When it matters

Cold outbound

Send verified and catch_all_valid first. Both are safe to send. Then send catch_all as a second, smaller campaign and watch the bounce rate. Never mix the groups in one send.

The LeadOcean default counts verified, catch_all_valid and catch_all as mailable. Passing your own emailStatus replaces that default.

Protecting your sending domain

Bounces cost more than leads. Mailbox providers count every message to a missing mailbox. A spam_trap is worse: it is an address that exists to catch senders with poor list hygiene, and mailing one can get a domain blocklisted. Drop invalid, spam_trap, abuse and disposable before you send.

Reading a count before you buy

A count by status tells you what a list is made of. A list that is mostly untested is not bad. It is unchecked. A list that is mostly catch_all has a different send plan. Count by status first, and label the number by the filter you used, because a count with emailStatus set is not a mailable count.

Shared and generated addresses

role addresses such as info@ and sales@ follow a naming convention for shared mailboxes (RFC 2142, September 2026). They reach a team, not a person, so reply rates are lower and complaints are likelier. derived addresses are built from a company's pattern and were never tested. Verify them before use.

The 13 values and what to do

LeadOcean's docs sort the values into send, use with care and do not send (LeadOcean API enums, September 2026). The table follows that grouping.

StatusWhat it meansSend?
verifiedOur verifier sent to the address and the server acceptedYes
catch_all_validCatch-all domain, but the mailbox was confirmed through a provider identity check (Microsoft 365 managed tenants and Google Workspace)Yes
catch_allThe domain accepts everything, so the mailbox cannot be confirmedSeparate small batch
riskyChecked, with a warning sign short of a clear noUse with care
roleA shared mailbox such as info@Use with care
derivedBuilt from the company's address pattern, never testedVerify first
untestedNobody has checked this address yet. It is the largest group and may be fineVerify first
unknownA check ran and the result was inconclusive. A weaker signal than untestedVerify first
invalidThe mailbox does not existNever
disposableA throwaway address that expiresNever
spam_trapAn address that exists to catch bad list practiceNever
abuseAn address tied to spam complaintsNever
noneThe person has no emailNothing to send

On abuse: the docs file it under do not send and give no longer definition. Treat it as a person who has complained before.

How LeadOcean handles it

Every people search row carries email_status, so you can size a list by status before you spend anything. Free counts use count=true as a query parameter with limit 1 in the body (LeadOcean OpenAPI, September 2026).

Search filters on emailStatus take any of the 13 values. catch_all as a filter matches both catch_all and catch_all_valid. Filter on catch_all_valid alone for the narrow set.

One caveat applies today. Enrichment applies the narrow verified rule per address, and people search does not, because the search index has no per-address verification record. A person can show verified in a search row and untested when enriched. Treat a search count of verified as an upper bound, and trust the enriched answer.

The first call below sizes verified US VPs and spends no records. The second enriches one person and returns the address with its enriched status. That call costs one record.

bash
curl -X POST "https://api.leadocean.io/v1/people/search?count=true" \
  -H "x-api-key: $LEADOCEAN_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"emailStatus": ["verified"], "jobLevel": ["VP"], "country": ["US"], "limit": 1}'

curl -X POST "https://api.leadocean.io/v1/people/enrich" \
  -H "x-api-key: $LEADOCEAN_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"person_id": "PERSON_ID", "reveal_email": true}'

Use the first call to plan and the second to confirm. Do not pull a whole list just to read statuses.

The v2 work email endpoint, GET /v2/people/email/work, returns only verified, catch_all_valid and catch_all addresses at the current employer. When none qualifies, they return data: null, which means none that qualify, not no work email. In CSV exports the status comes as email_1_status next to email_1_address. The same filter works in the MCP server and on the Exports page of the app (app.leadocean.io), which shows the record price before you start.

Pricing is two plans: Free (1,000 records, one-off, no card) and Pro at $499 a month. See pricing. For the full verification story, read email verification explained and catch all emails explained. For the tools that do the sending, see outbound email tools explained.

FAQ

What is the difference between untested and unknown?

untested means no check has run. unknown means a check ran and could not decide. The docs call unknown a weaker signal than untested, not a stronger one. Verify both before a large send.

Is risky safe to send to?

Not by default. LeadOcean files risky under use with care. Send it in a small batch after your verified group and watch bounces. Stop if the rate climbs.

Can a catch_all email be verified?

Not through the mail server, because the domain accepts every address. A provider identity check can confirm some mailboxes. That is what moves an address to catch_all_valid.

Does LeadOcean refund bounced emails?

No. There is no refund or credit-back for bounces, so read email_status before you send. Filter out the do-not-send values at the search step, not after the campaign.

Which statuses should I filter out first?

Drop invalid, disposable, spam_trap and abuse. Then decide on role, risky, derived, unknown and untested by how much bounce risk your domain can take.

Count your list by email status before you send

Free to start. No credit card. 1,000 records to spend whenever you like.

Get your free API key →