How to Reduce Your Email Bounce Rate: The Complete 2026 Guide
What bounce rate actually measures, what's a good rate, the SMTP codes you'll see, soft vs hard bounces, and seven things that actually move the number down.
Bounce rate is one of those metrics that everyone tracks and almost nobody diagnoses. The number sits on the campaign dashboard, occasionally turns red, and triggers a vague conversation about "list quality." But bounce rate is downstream of at least five different problems, and the fix for each is different. Treating the number as if it has a single cause is why teams clean reactively after a bad campaign instead of preventing the bad campaign in the first place.
This guide covers what bounce rate actually measures, what counts as "good" by sender type, the SMTP codes you'll see in bounce reports, the difference between soft and hard bounces, and seven specific fixes ranked by how much they actually move the number.
01What bounce rate measures (and the formula)
Bounce rate is the percentage of attempted sends that didn't reach the recipient's mail server, or reached it and were rejected.
The formula:
bounce rate = (bounced sends ÷ total sends attempted) × 100
A campaign that attempts 10,000 sends and gets 250 bounces has a 2.5% bounce rate. Almost every ESP (Mailchimp, Klaviyo, ActiveCampaign, SendGrid, Mailgun, Postmark) reports this number per campaign and as a rolling 30-day or 90-day average for your sending domain.
What it doesn't measure: deliveries that landed in the spam folder. Those are "delivered" from a bounce-rate perspective even though nobody saw them. Inbox placement is a separate metric you have to actively measure (Postmark and a few others surface it; most ESPs don't).
02What counts as "good"
The honest answer depends on what you're sending and to whom.
| Sender type | Healthy bounce rate | Concerning above |
|---|---|---|
| Engaged double-opt-in newsletter | < 1% | 2% |
| Standard marketing list (mixed engagement) | < 2% | 3% |
| Re-engagement campaign to dormant subs | < 5% | 8% |
| B2B cold outreach (well-researched) | < 3% | 5% |
| B2B cold outreach (bought/scraped list) | varies widely | 8% triggers ESP review |
The thresholds matter because ESPs and major receiving servers (Gmail, Microsoft 365) react badly to high bounce rates. Gmail starts soft-throttling new sends from a domain that crosses ~5% bounce rate. Microsoft 365's Exchange Online Protection (EOP) gets more aggressive at lower thresholds, sometimes ~3%. SendGrid and Mailgun both publish bounce-rate limits in their terms of service; typically 5% triggers an account review.
Reputation damage compounds over weeks, not minutes. A single 5% bounce campaign isn't fatal, but it's a meaningful debit against your sender reputation, and that reputation is what determines inbox placement for the next campaign.
03Soft vs hard bounces
Both count toward your bounce rate. The difference is whether the address might recover.
Hard bounce. Permanent failure. The address is dead, the mailbox doesn't exist, the domain has no MX records, or the receiving server has explicitly rejected the recipient. Hard-bounced addresses should be suppressed immediately and never mailed again; your ESP usually does this automatically.
Soft bounce. Temporary failure. Mailbox full, server temporarily unavailable, message too large, greylisted by anti-spam. Soft bounces might succeed on retry. Most ESPs retry soft bounces for 24-72 hours; if every retry fails, they're escalated to hard bounces and suppressed.
The SMTP protocol distinguishes the two via response codes: the leading digit tells you which is which.
04The SMTP codes you'll see in bounce reports
When a receiving server rejects mail, it returns a numeric code. The leading digit is the class, and for triage purposes that one digit is all you need:
| Class | Meaning | What to do |
|---|---|---|
2xx | Accepted, no bounce | Nothing; the send landed |
4xx | Soft bounce, temporary issue (greylisting, mailbox full, server busy) | Let your ESP retry; suppress only if it keeps failing |
5xx | Hard bounce, permanent (mailbox doesn't exist, blocked, auth failure) | Suppress immediately |
That three-way split is enough to act on. The one distinction worth carrying forward: within the 5xx class, a permanent rejection can be about the address (clean the list) or about your sender reputation (fix authentication or content), and the extended status code after the 5xx tells you which. If your ESP exposes the full bounce log, the full code-by-code breakdown lives in our bounce-diagnosis guide.
05The seven actual fixes, ranked
Now the practical part. These are ranked by how much each one moves the bounce rate on a typical mixed list.
1. Pre-send verification with SMTP probing (highest leverage)
The single most effective intervention. Run the list through a verifier that does actual SMTP probing (not just syntax + DNS) before the campaign goes out. A solid verifier will catch ~80-95% of the 550 5.1.1 bounces before they ever hit the receiving server.
The mechanism: a real SMTP probe opens a connection to the receiving server, walks through the protocol (HELO / MAIL FROM / RCPT TO), and reads the response, without delivering an actual message. If the server returns 550 5.1.1 to the probe, the verifier marks the address undeliverable. You drop it before the send, and you've avoided the bounce.
This is the difference between a 4% bounce rate and a 0.5% bounce rate on most mixed lists. It's also the reason "verification" exists as a category.
What MailCull does here: full SMTP probing on every address (Free plan included), the Microsoft 365 cascade for corporate addresses (most B2B lists), multi-probe catch-all detection, and the SMTP reply for every verdict surfaced as the evidence chain so you can see exactly why an address was marked the way it was.
2. Suppress hard bounces from prior sends
Your ESP usually does this automatically: once an address has hard-bounced, it goes on the suppression list and stops being mailed. But if you import a fresh list, the new addresses haven't been seen by your suppression system yet. Cross-reference any new list against your historical hard-bounce records before sending.
This catches the recurring problem where an old contact you mailed two years ago, who bounced then, gets re-added via a new CRM sync and bounces again.
3. Quarantine "risky" addresses before sending
A good verifier returns three buckets: deliverable, undeliverable, and risky (some validators call this "catch-all" or "unknown"). Risky addresses passed all the cheap checks (syntax, DNS, MX) but couldn't be confidently confirmed at the SMTP layer, usually because the domain is catch-all or the receiving server returned an ambiguous response.
The mistake is treating risky as deliverable. Most of these will deliver, but the percentage that doesn't is concentrated enough to push bounce rate up by 1-2 points. Segment them out for the first send, run that send to your safest segment first, and add the risky segment back if the early results look clean.
4. Re-verify lists older than 90 days
Address validity decays at roughly 22% per year on average. People change jobs, employers, email providers. A list you verified clean in February is meaningfully less clean by October. The decay is concentrated in B2B (people change companies); consumer Gmail/Yahoo accounts decay much slower.
Rule of thumb: re-verify any list you're about to send to that you haven't verified or sent to in the last 90 days. Quarterly is the minimum cadence for an active sender.
5. Validate at the signup form
The cheapest place to catch a typo or a fake address is at the moment it gets entered into your system. Most modern signup forms run a real-time API call to verify the address before accepting it: the same API call a bulk verifier does, just one address at a time.
This prevents the slow accumulation of [email protected] and [email protected] rows that compound over years and eventually show up as a "list quality problem" when really it's a signup-form problem.
6. Authenticate your sending domain (SPF, DKIM, DMARC)
This doesn't move the address-existence side of the bounce-rate dial, but it moves the 550 5.7.x (spam/auth-failure) bounces meaningfully. If your domain isn't passing SPF/DKIM/DMARC checks, a percentage of your "good" addresses will bounce with 550 5.7.26 (DMARC failure) at receivers with strict policies, Microsoft 365 in particular.
If you've never set this up, it's a one-time DNS configuration that pays back forever. Most ESPs walk you through it during onboarding; many senders skip past it and pay the cost in deliverability later.
7. Make hygiene a recurring habit
The biggest bounce-rate problems usually come from inconsistency: a team that cleans heroically after a bad campaign, then forgets until the next bad campaign. A recurring quarterly verification pass plus signup-form validation plus suppression-list maintenance prevents the slow drift that produces the next crisis.
This isn't a clever fix; it's just doing the boring work on a schedule. But it's why mature senders have 1-2% bounce rates without thinking about it and most others bounce at 4-6% and don't understand why.
06The mindset shift
The unhelpful question after a bad campaign: why did this campaign bounce so much?
The useful question before the next campaign: what could have been cleaned, suppressed, or validated before I hit send?
The second question almost always has a concrete answer. The first one usually leads to vague resolutions that don't get acted on.
07What MailCull does on the bounce-rate problem
The core mechanism is the full SMTP probe on every address (same on Free and Pro) with the evidence chain (SMTP reply, MX record, reason flags, confidence score) surfaced for every verdict. Run a list through Verify List before a campaign, drop the undeliverable rows, segment the risky rows, and your bounce rate on the deliverable set typically lands under 1%.
Start free: 500 credits per month, no credit card, full SMTP probing on every address. Pro is $19/month flat for 10,000 credits plus the public API and MCP server access, and Max is $49/month for 75,000 credits if you're verifying at higher volume.
Before your next send, the free deliverability scan checks your domain's MX, SPF, DKIM, DMARC, and blacklist status in one pass.
Start with 500 free validation credits. No card.
Both Free and Pro run the same scan engine, full SMTP probe, MX lookup, typo, disposable, domain checks, and the evidence chain on every verdict. The difference is the monthly credit pool (Free=500, Pro=10,000, Max=75,000) plus Pro's API and MCP access.