# How email validation works

> How Reply classifies addresses as Valid, Risky, or Invalid — the disposable, catch-all, and honeypot signals, the syntax, DNS, and mailbox error taxonomy, and when validation runs.

**Reply validates each address and assigns Valid, Risky, or Invalid. Risky covers disposable domains, catch-all servers, and honeypots; Invalid covers syntax, DNS, and mailbox errors. Contacts with Invalid addresses receive no sequence emails. Validation runs on demand from the People page or automatically when contacts enter a sequence, consuming email validation credits.**

_Status: Reviewed — human-edited, facts not yet confirmed against the product._

## At a glance

| Aspect | Detail |
| --- | --- |
| **What it governs** | How Reply classifies an email address's deliverability and which classifications block sending |
| **Trigger** | Manual validation from the People page, or — with automatic validation enabled — every time contacts are added to a sequence |
| **Inputs** | The email address, checked by different parameters: syntax, DNS records, and the mailbox's response |
| **Result** | Status `Valid`, `Risky`, or `Invalid`; contacts with `Invalid` addresses do not receive sequence emails |
| **Configurable** | Yes — automatic validation is a toggle (Settings → Emails); manual validation runs on demand; both use email validation credits |
| **Does not** | Guarantee delivery for Valid addresses, block sending to Risky addresses, repair a bad address, or produce the `Missing data` status (that comes from missing variables, LinkedIn URLs, or phone numbers) |

## Rule summary

Reply checks each email address by different parameters and classifies it into one of
three groups: **Valid**, **Risky**, or **Invalid**. Valid means verification completed
with no high-risk factors detected — safe to put into sequences. Risky means the
recipient's mail server stated the recipient exists, but the address may still bounce or
is of low value; Reply recommends treating Risky as Valid, with up to 20% of Risky
addresses in a send to avoid high bounce rates. Invalid means the address failed a
syntax, DNS, or mailbox check — Reply does not send sequence emails to it, which keeps
the [bounce rate](/behavior/bounce-handling) down.

## Trigger

**Manual validation.** On the **People** page, select the prospects (at least 1 contact)
and click **Validate emails**. Only one batch can be validated at a time — wait for the
first batch to finish before starting another. When validation completes you get a
notification in the Notification Center, and status icons appear next to each contact's
email address.

**Automatic validation.** Turn on the **Automatic email validation** toggle under
**Settings → Emails**. Once enabled, any time contacts are added to a sequence their
emails are validated first, using your email validation credits as needed.

Both paths consume email validation credits; validation packages are bought as an
add-on in the Plans & Billing section of Settings.

## Decision logic

Each address is classified into one of three statuses:

| Status | Meaning | Receives sequence emails? |
| --- | --- | --- |
| `Valid` | Verification completed; no high-risk factors detected | Yes — safe for sequences |
| `Risky` | The mail server stated the recipient exists, but the address may still bounce or is of low value | Yes — treated as Valid; keep Risky to up to 20% of a send |
| `Invalid` | The address failed a syntax, DNS, or mailbox check | No |

An address is marked **Risky** for one of these reasons:

| Reason | Description |
| --- | --- |
| Well-known DEA domain | The domain is a well-known disposable e-mail address provider |
| Catch-all | The external mail exchanger accepts fake and non-existent e-mail addresses, so the email may not exist and its existence cannot be verified |
| Honeypot | The external mail exchanger hides a honeypot/spam trap |

An address is marked **Invalid** when the response contains one of the following errors.

Syntax errors:

| Error |
| --- |
| A quoted-pair within a quoted word is not closed properly |
| An unexpected quoted-pair sequence has been found within a quoted word |
| A new word boundary start has been detected at an invalid position |
| An invalid character has been detected in the provided sequence |
| The number of parentheses used to open comments is not equal to the one used to close them |
| An invalid sequence of two adjacent dots has been found |
| The local part of the e-mail address has an invalid length |
| An invalid folding white space (FWS) sequence has been found |
| The at-sign symbol (@), used to separate the local part from the domain part of the address, has not been found |
| An invalid quoted word with no content has been found |
| The email address has an invalid total length |
| The domain part of the email address is not compliant with the IETF standards |

DNS errors:

| Error |
| --- |
| The domain of the e-mail address does not exist |
| The email address's domain does not have any valid DNS records and couldn't accept messages from another host on the Internet |

Mailbox errors:

| Error |
| --- |
| The mailbox for the e-mail address does not exist |
| The external mail exchanger refused to accept messages |
| The external mail exchanger does not support international mailbox names, while the supplied address pretends to have one |

## Result

Each contact gets a status icon next to its email address — green for Valid, with
distinct icons for Risky and Invalid. Reply does not send emails to prospects with
Invalid addresses; this is done to reduce the bounce rate. Validating a list before
launching is the main pre-send lever against the 4% and 8% bounce-rate thresholds
described in [What happens when an email bounces](/behavior/bounce-handling).

## State changes

| Field | Change |
| --- | --- |
| Email validation status | → `Valid`, `Risky`, or `Invalid`; shown as an icon next to the address |
| Sending eligibility | `Invalid` → excluded from sequence emails, including contacts added via the API |
| Notification Center | A notification arrives when the validation batch completes |
| Credits | Validation consumes email validation credits |

## Exceptions

- **Risky is not blocked.** Risky contacts do receive sequence emails; the recommendation is to keep them to up to 20% of a send.
- **Invalid contacts can still enter a sequence** if the sequence has no email steps at the moment. This helps handle large contact volumes, limits, and deliverability, and it covers the API as well.
- **Missing data is a different status.** It comes from missing variable data, missing or invalid LinkedIn URLs, or invalid phone numbers — not from email validation.
- **Validation takes time.** If a conditional sequence checks the validation status, add enough step delay for validation to finish first — at least 10 minutes for every 1,000 contacts.

## Configuration that changes this rule

- **Automatic email validation** — Settings → Emails → Automatic email validation toggle. With it on, contacts are validated whenever they are added to a sequence.
- **Conditional-sequence filtering** — add a condition that checks *Email Validation is set to Valid* and leave the No branch empty; contacts marked Invalid or Risky are automatically finished once their status is checked.
- **Credits** — buy an email validation package as an add-on in Settings → Plans & Billing.

## Limits

| Limit | Value |
| --- | --- |
| Concurrent validation batches | 1 — wait for the current batch to finish before validating more |
| Minimum selection for manual validation | 1 contact |
| Time to allow before a conditional step checks the result | At least 10 minutes per 1,000 contacts |
| Recommended share of Risky addresses in a send | Up to 20% |
| Credits | Validation consumes email validation credits, bought as an add-on |

## FAQ

### Does Reply send emails to Risky addresses?

Yes. Risky means the server confirmed the recipient exists but the address may still
bounce, so Reply recommends treating Risky as Valid while keeping such addresses to up to
20% of a send. If a Risky address does bounce, the normal
[bounce handling](/behavior/bounce-handling) applies.

### Why is a contact with an Invalid email still in my sequence?

A prospect with an Invalid status can be moved to a sequence if there are no email steps
at the moment — a deliberate allowance for handling large volumes, limits, and
deliverability, and it applies via the API too. The contact will still not receive
sequence emails at that address.

### What is the difference between Invalid and Missing data?

Invalid is an email validation verdict: the address failed a syntax, DNS, or mailbox
check. Missing data is unrelated to validation — it appears when a template variable has
no value, a LinkedIn URL is missing or broken, or a phone number is invalid. See
[Statuses](/reference/statuses).

### When should I validate?

Before launching: check contact lists with the validation service before starting the
sequence — the higher the bounce rate, the greater the risk to your domain reputation.
With automatic validation on, every contact added to a sequence is validated on entry,
so new additions are covered without a manual step.

## Related

- [What happens when an email bounces](/behavior/bounce-handling) — validation is the pre-send lever against the bounce thresholds
- [Contacts](/specifications/contacts)
- [Statuses](/reference/statuses)
- [Data enrichment](/capabilities/data-enrichment) — fixing or replacing bad addresses
- [Deliverability](/capabilities/deliverability)

## Build with Reply

- REST API: [docs.reply.io](https://docs.reply.io/api-reference/introduction) — contact and validation-status operations
- MCP: [agents.reply.io/mcp](https://agents.reply.io/mcp) — contact search and filtering by validation status
