Open any email service provider’s analytics and you will see two numbers sitting side by side: soft bounces and hard bounces. Most senders glance at the combined bounce rate, decide it looks “fine,” and move on. That is a mistake. These two categories are telling you completely different things, and the right response to each is almost the opposite of the other.
Get the distinction wrong and you will either keep mailing addresses that are silently shredding your sender reputation, or you will delete perfectly good contacts because of a temporary hiccup. This post breaks down exactly what each bounce type means, how to tell them apart in the wild, and what to actually do when you see one.
The One-Sentence Version
A hard bounce is permanent. The address does not exist, the domain is dead, or the server has flatly refused you forever. A soft bounce is temporary. The mailbox is real, but something got in the way of delivery right now: a full inbox, an overloaded server, a message that was too large.
Permanent versus temporary is the whole ballgame. Everything else follows from that.
What a Hard Bounce Actually Means
When a receiving server issues a hard bounce, it is returning a 5xx SMTP status code, the family of “permanent failure” responses. The most common reasons:
- The mailbox does not exist. Someone fat-fingered the address at signup, or
[email protected]left the company and IT deleted the account. - The domain does not exist or has no mail server. A typo like
gmial.com, or a domain that lapsed and was never renewed. - The server has blocked you outright. Your sending IP or domain landed on a blocklist the receiver honors.
The defining trait: retrying will not help. The address is not coming back. Every hard bounce you keep in your list is a future hard bounce, and mailbox providers like Gmail and Outlook watch your hard bounce rate closely as a signal of list hygiene. A rate creeping above roughly 2 percent is the zone where inbox placement starts to suffer for everyone on your list, not just the dead addresses.
The rule with hard bounces is simple: suppress them immediately and never mail them again. Most reputable ESPs do this automatically, but if you export and re-import lists, or run cold outreach through tooling that does not auto-suppress, that responsibility falls back on you.
What a Soft Bounce Actually Means
A soft bounce is a 4xx SMTP code, the “try again later” family. The mailbox is valid and the door is real, it just would not open this time. Typical causes:
- The inbox is full. Common on abandoned-but-not-deleted personal accounts.
- The receiving server is temporarily down or overloaded. Transient infrastructure issues.
- The message is too large for the recipient’s size limits.
- Greylisting. The server deliberately issues a temporary rejection on first contact to filter out spam bots, expecting legitimate senders to retry. (We wrote a whole piece on why greylisting trips up so many validators.)
- Rate limiting / throttling. You sent too fast and the server asked you to slow down.
Because the failure is temporary, ESPs automatically retry soft bounces on a schedule, often for 24 to 72 hours, before giving up. A single soft bounce is usually nothing. The signal to watch is repetition.
The Trap: When a Soft Bounce Is Really a Hard Bounce in Disguise
Here is where careful senders separate themselves from sloppy ones. An address that soft bounces repeatedly, across multiple sends, over days or weeks is not really a temporary problem. A mailbox that is perpetually full, or a server that throttles you every single time, behaves like a dead address for all practical purposes.
The standard discipline: if an address soft bounces on three to five consecutive sends, promote it to your suppression list and treat it as a hard bounce. Continuing to hammer a chronically soft-bouncing address does the same reputation damage as mailing a dead one, because providers cannot easily tell the difference between your “persistence” and a spammer’s.
A Quick Reference Table
| Soft bounce | Hard bounce | |
|---|---|---|
| SMTP code family | 4xx (temporary) | 5xx (permanent) |
| Mailbox status | Real, reachable later | Invalid or blocked |
| Typical cause | Full inbox, server down, greylisting, size | Address does not exist, dead domain, blocklist |
| ESP behavior | Auto-retries for 24 to 72 hours | Suppressed immediately |
| Your action | Monitor; suppress after 3 to 5 repeats | Remove and never resend |
Why You Cannot Just Wait for Bounces to Sort This Out
The obvious-sounding plan is to send the campaign and let the bounce data classify your list for you. The problem is that the bounce itself is the damage. By the time a hard bounce comes back, you have already sent to a dead address, and the provider has already logged it against your reputation. Do that across a few thousand stale contacts in one blast and you can tank your inbox placement before lunch.
This is the entire argument for validating before you send rather than learning from bounces after. Pre-send validation catches the addresses that would hard bounce, like nonexistent mailboxes and dead domains, and pulls them out while they are still harmless line items in a spreadsheet.
The hard part is that the riskiest addresses, catch-all (accept-all) domains, do not give a clean answer to a standard SMTP probe. They return a polite “sure, that mailbox is fine” for every address, real or not, which means a typical validator marks them “unknown” and you are left guessing. A tool like Scrubby is built specifically to resolve those catch-all and unknown addresses that other validators punt on, so the contacts most likely to turn into surprise hard bounces get caught before they ever reach a send.
It is worth folding that check into your workflow at the moment contacts enter your world. If you are importing lists from cold outreach, paid lead sources, or a Kali calendar-invite campaign, run them through validation on the way in rather than discovering the dead addresses three sends later through your bounce report.
Putting It Into Practice
A clean, repeatable bounce policy looks like this:
- Validate before every major send, especially for any list older than 90 days or sourced from outside your own signups.
- Suppress hard bounces on contact, permanently. No second chances, no “maybe they renewed the domain.”
- Track soft bounces per address, not just in aggregate. Three to five repeats means promote to suppression.
- Watch your aggregate rates as an early warning. A rising hard bounce rate means list rot; a rising soft bounce rate can mean a deliverability or throttling problem worth investigating on its own.
- Keep a suppression list and actually honor it across every tool and export, so a cleaned address never sneaks back in through a re-import.
Soft and hard bounces are not two flavors of the same problem. One is a temporary “not right now” and the other is a permanent “never again.” Read each correctly, respond to each differently, and the single biggest lever, validating before you send instead of learning from the wreckage after, will keep both numbers low and your reputation intact.

Amit S.
Marketing Lead