August 17, 2026
Cold email bounce rate: what's normal and how to fix it
TL;DR. A healthy cold email hard-bounce rate is under 2%. At 5% SEMAOS throttles your sending, and at 10% it suspends the account until a person reinstates it. Almost every bounce problem is a list problem, so the fix is verifying addresses before you import them, not changing anything about how you send.
Your bounce rate is the share of sent emails the receiving server rejected. For cold outbound, the number to watch is the hard-bounce rate, and you want it under 2%. Past 5% SEMAOS starts refusing new sends. Past 10% it suspends the account and a human has to put it back. The uncomfortable part is that a bounce rate is almost never a sending problem. It is a list problem, and it usually surfaces a few days after you imported the list that caused it. Earlier parts of this series covered DNS records, first-email copy, subject lines and personalization. This one is about the number that can stop all of it.
What counts as a bounce, and which ones matter?
A bounce is a rejection notice from the receiving mail server. There are two kinds, and the difference between them is most of this post.
A hard bounce is permanent. The mailbox does not exist, the domain does not exist, or the server has refused you outright. Retrying does nothing.
A soft bounce is temporary. The inbox is full, the server was briefly down, the message was too big. Those get retried automatically and usually resolve on their own.
Only hard bounces count toward the rate SEMAOS enforces. That distinction is deliberate. A full mailbox is noise. A dead address is a signal, and it is the exact signal Google and Microsoft use to decide whether you are a real sender or someone working from a list they bought.
One more category worth naming: a block. That is the receiving server rejecting you for reputation reasons rather than because the address is wrong. Blocks often get recorded as bounces, and they mean something different, so if your bounces are all coming from one large provider at once, read the reason strings before you start deleting contacts.
What is a normal cold email bounce rate?
It depends almost entirely on where the list came from.
| List source | Typical hard-bounce rate | What to do |
|---|---|---|
| Hand-built, verified in the last 30 days | Under 1% | Send |
| Hand-built, verified 3+ months ago | 1% to 3% | Re-verify before a big push |
| CRM export nobody has cleaned in a year | 3% to 8% | Clean it first |
| Purchased or scraped list | 8% to 20% or worse | Do not send |
Under 2% is the working target. Between 2% and 5% you are not in trouble yet, but something is decaying and it will keep decaying.
Business email addresses go bad steadily, not suddenly. The usual estimate is that a couple of percent of any B2B list dies every month as people change jobs, companies rename their domain, or IT retires an alias. A list that was clean in March is not clean in September, and nothing warns you. That is the whole reason the number creeps up on teams who did everything else right.
What actually causes a high bounce rate?
| Cause | What it looks like | Fix |
|---|---|---|
| Unverified list | A big spike on the first send of a new import | Verify before importing, not after |
| Stale CRM export | A slow climb over months on a list you trust | Re-verify anything older than 90 days |
| Guessed address patterns | Bounces cluster on one company | Stop guessing first.last@; confirm or drop |
| Role addresses | info@, sales@, admin@ rejecting | Remove them from cold lists entirely |
| Typos from a web form | One-offs, misspelled domains | Format validation at the boundary catches most |
| Sending too fast on a new domain | Bounces and blocks together, from one provider | Follow the warmup ramp |
Notice how many of those trace back to the same moment: the import. By the time SEMAOS is reporting the number, the decision that caused it is a week old.
What happens as your bounce rate climbs?
SEMAOS measures the hard-bounce rate on a rolling 24-hour window and acts on it automatically. This is not a warning email you can ignore.
| Hard-bounce rate (rolling 24h) | What SEMAOS does | How it ends |
|---|---|---|
| Under 5% | Nothing. Normal sending. | n/a |
| 5% or higher | New sends are rejected and recorded as throttled. | Lifts on its own once the rate falls back under 5% |
| 10% or higher | Sending is suspended on the account. | Manual reinstatement only, after review |
Two details keep this from being trigger-happy. There is a floor of 50 attempted sends in the window before any threshold applies, so a ten-contact test with one bad address will not throttle you. And soft bounces are excluded entirely, so an office full of out-of-office replies costs you nothing.
Every hard bounce also does one thing quietly: the address goes onto your suppression list. That list is checked before every send, including every remaining step of a sequence the contact is already sitting in, so you will not hit the same dead address twice and you will not spend three more steps mailing it. The enrollment itself stays open in the sequence; nothing further is ever sent to it.
How do you get out of a throttle or a suspension?
For a throttle, the honest answer is mostly to stop and wait. The window is rolling and 24 hours long, so as the bad batch ages out of it the rate falls and sending resumes by itself. What you do in the meantime matters more: find the import that caused it, verify or delete the rest of that list, and do not enroll more of it. Resuming into the same list just restarts the clock.
For a suspension, there is no waiting it out. Sending stays off until someone reviews what happened and reinstates the account, and that review is going to ask what you sent and where the list came from. Have an answer. The check exists because tenants on the shared sending domain can damage each other's reputation, and a 10% hard-bounce rate is the clearest evidence there is of a list that should never have been mailed.
Either way, your suppression list is already doing the cleanup for the addresses that bounced. The work left is the rest of the list, the part that has not been sent to yet.
How do you keep it low in the first place?
Verify the list before you import it. SEMAOS checks email format at signup and at CSV import, which catches typos and malformed addresses. It does not check whether a mailbox actually exists, and format validation is not verification. Specialist services do that job properly. NeverBounce, ZeroBounce and MillionVerifier all run mailbox-existence checks, and running a list through one of them costs a few dollars per thousand addresses. Against a suspension, that is not a close call.
Re-verify anything older than 90 days. Including your own CRM export. Especially your own CRM export.
Send the first batch small. Take 50 addresses off a new list, send, and look at the result before you enroll the other 2,000. If those 50 produce three hard bounces, you have learned something for the price of three bounces instead of 120.
Respect the warmup ramp on a new domain. A newly verified custom sending domain in SEMAOS is capped at 100 sends a day for the first week, 500 a day for the second, and 2,000 a day for the third. After 21 days your plan limits apply normally. The ramp is not there to annoy you; volume from a domain with no history is what gets a domain filtered, and bounces on top of that is what gets it blocked.
Drop role addresses. info@, sales@, support@ and friends bounce more, convert less, and complain more when they do land.
Be careful reading catch-all domains. Some companies accept mail to any address at the domain, which means a verifier reports "valid" and the message quietly disappears. Those inflate your apparent deliverability rather than your bounce rate, so a suspiciously clean list from a verifier is worth a second look.
Does any of this change when you send from your own mailbox?
Yes, and it is worth being precise about it.
The 5% and 10% thresholds run on the SES channel, where Amazon reports every bounce back to SEMAOS and we can act on it. A 1:1 sequence sent through your connected Gmail or Outlook account takes a different path. Those non-delivery reports come back to your own inbox, and your provider, not SEMAOS, is the one keeping score.
That is not a loophole to route around the guardrail. Gmail and Outlook are less forgiving than SES about an account that repeatedly mails addresses that do not exist, and the account on the line is the one you use for everything else. Roughly 500 sends a day on Gmail and 300 to 1,000 on Outlook is the ceiling anyway, so the volumes are small enough that a dirty list shows up as a reply-rate problem long before it shows up as a sending problem. Verify the list either way.
How does SEMAOS handle this?
The suppression list is checked before every single send, so a bounced address, an unsubscribe, or a complaint is permanently out of reach. Hard bounces add themselves to it automatically. The rolling 24-hour rate drives the throttle and the suspension without anyone having to notice a dashboard; the help article on deliverability and bounces covers where to watch it in the product.
What SEMAOS does not do is verify that a mailbox exists before you send to it. That is a real limitation and we would rather say it plainly than let you find out at 6%. Clean the list somewhere else, import it here, and the guardrails become something you never think about instead of something that stops your week.
