TL;DR
- Reply.io's validation returns Valid, Risky or Invalid. Risky contacts still get sequence emails.
- Reply suggests keeping Risky to 20% of a send or less. One bucket covers catch-alls, disposables and more.
- MailExchange splits risky leads by reason (catch-all, role, disposable), from $0.0058 per email, with credits that never expire.
How Reply.io handles risky addresses
Reply's documentation says Risky contacts receive sequence emails and are treated as Valid, and recommends keeping Risky "to up to 20% of a send" to avoid high bounce rates. Validation uses credits bought as an add-on in Plans & Billing.
That leaves you a problem: 20% of a send is a lot of uncertain addresses, and one Risky label doesn't tell you which are catch-all domains (often real people) and which are throwaway inboxes (never worth sending to).
Source: Reply.io email validation docs, checked 2026-10-17. Reply marks that page as not yet confirmed against the running product, so check your own account settings too.
What "Risky" can mean
Reply's Risky bucket groups very different addresses together:
| Kind of address | Reply.io | MailExchange |
|---|---|---|
| Catch-all domain | Risky, sent to | risky: catch-all (low_deliverability) |
| Disposable inbox | Risky, sent to | risky: disposable |
| Role address (info@, sales@) | Not split out | risky: role (low_quality) |
| Couldn't be checked | Not split out | unknown, credit refunded |
A catch-all at a real company may well be your buyer. A disposable inbox never is. Seeing them separately lets you keep the first kind and drop the second, instead of treating a fifth of your send as one blind bet.
Verify before import
- Export your leads as a CSV from your lead source or from Reply.
- Upload it to MailExchange. Duplicates are free and unknowns are refunded. Your columns are kept for personalisation.
- Split the results:
- deliverable: your main sequence.
- risky: catch-all: a separate sequence at lower daily volume, on your most established mailboxes.
- risky: role: usually skip for cold outreach.
- risky: disposable and undeliverable: drop.
- Import into Reply.io. Because you've already removed the bad rows, the Risky share in each send stays well under Reply's 20% guideline.
Why catch-alls get their own sequence
A catch-all domain accepts mail for any address, so no verifier can prove the person exists from the mail server alone. In Hunter's test (checked 2026-10-17), accept-all addresses bounced 27% of the time, against 1% for valid ones. Keeping them in a separate, slower sequence means a bad batch can't drag down your main campaign. More: should you send to catch-all emails?
Re-verify long sequences
Bounce rates often rise on later steps as people change jobs. If a sequence runs for more than a few weeks, re-verify the remaining contacts before the later steps and remove anyone who has become undeliverable. See how many bounces burn a domain.
Cost
| Credits | Price | Per email |
|---|---|---|
| 5,000 | $29 | $0.0058 |
| 10,000 | $49 | $0.0049 |
| 100,000 | $299 | $0.0030 |
Credits never expire, and unknowns and duplicates are refunded. Full table on pricing, or estimate your list in the verification cost calculator.
Do you still need Reply's own validation?
If you've already verified a list with MailExchange, running Reply's validation on the same addresses spends a second set of credits on the same question. Keep Reply's validation for contacts that arrive in Reply some other way, such as through Reply's own lead search or a CRM sync you haven't routed through a verifier.
Automate it
Verify each lead with the MailExchange API (early access) before you add it to Reply, or use a Zapier webhook step between your lead source and Reply. A direct connector is on our roadmap.