# Amazon SES Bounce Rate: The Thresholds and How to Get Back Under Them

Source: https://wraps.dev/ses/bounce-rate

AWS publishes the bounce-rate percentages it acts on, and they are not the numbers most guides quote. Two of them put you under review; a different two stop your sending. Here is which is which, what SES actually counts, and what to do first.

## Which one is happening to you

| What you are seeing | What it usually means |
| --- | --- |
| The rate jumped right after one campaign | One segment, usually an old or imported list, is carrying the bounces. Isolate that send before you change anything global. |
| The rate has drifted up over months | List decay. Addresses that were valid at signup stop existing, and nothing is removing them. |
| The rate is alarming but your volume is small | SES measures over a representative volume rather than a fixed window, so a handful of bad addresses moves the percentage a long way at low volume. |
| AWS emailed you about it | You are already at or past the review threshold. Treat it as an incident, not a metric. |

## The numbers AWS enforces

AWS states two different things: the level you should stay under, and the level at which it intervenes. Confusing the two is the most common mistake in writing about this.

| Metric | Aim below | AWS places under review | AWS may pause sending |
| --- | --- | --- | --- |
| Bounce rate | 2% | 5% or greater | 10% or greater |

Source: [Amazon SES sending review process FAQs](https://docs.aws.amazon.com/ses/latest/dg/faqs-enforcement.html). AWS changes these occasionally, so check the source before you plan around a number.

## What SES counts as a bounce, and what it does not

AWS is specific about this and it changes how you read your own number. Your bounce rate includes only hard bounces to domains you have not verified. Soft bounces, and bounces to domains you have verified in SES, do not count toward it.

That means the metric you see in the SES console and the metric AWS enforces on can diverge from anything you compute yourself. AWS says so directly: you cannot calculate your own bounce rate from the console or from GetSendStatistics, because the rate is measured over a representative volume that varies per sender and can stretch further back than the console shows.

-   Hard bounces to unverified domains: counted.
-   Soft bounces: not counted.
-   Bounces to domains you have verified in SES, including your own test domains: not counted.
-   Sends to the SES mailbox simulator: not counted, and they do not touch your daily quota either.

## Work through it in this order

The instinct is to clean the whole list. That is slow, and usually the bounces are concentrated somewhere specific. Narrow before you scrub.

-   Segment the bounces by campaign and by signup date. One cohort is normally responsible.
-   Separate hard from soft. Only the hard ones against unverified domains move the number AWS enforces on.
-   Suppress every hard bounce immediately, and make that automatic rather than a task someone remembers.
-   Look at how those addresses got in. A bounce rate above the threshold is almost always an acquisition problem wearing a list problem's clothes.
-   Stop sending to the cohort that caused it while you fix the intake, rather than continuing at a lower volume.

## Check the number without guessing

The SES console's Reputation metrics page shows the account-level bounce rate, and it links each metric into CloudWatch, where Reputation.BounceRate can carry an alarm. An alarm is the difference between finding out from your dashboard and finding out from AWS.

From the command line, the account's enforcement status is one call. A healthy account and an account under review answer differently.

```
aws sesv2 get-account \  --query '{Enforcement:EnforcementStatus,Quota:SendQuota,Enabled:SendingEnabled}'
```

## Test bounce handling without damaging your own metrics

The SES mailbox simulator gives you a bounce on demand. Mail sent to it does not count toward your sending quota, your bounce rate, or your complaint rate, and it works while your account is still in the sandbox. You are billed for it as normal.

Use it to prove your suppression path actually suppresses, before you need that path to work under pressure.

```
aws sesv2 send-email \  --from-email-address you@yourdomain.com \  --destination ToAddresses=bounce@simulator.amazonses.com \  --content 'Simple={Subject={Data=test},Body={Text={Data=test}}}'
```

## What no tool can do for you here

Nobody can lower a bounce rate that is already recorded. The metric is computed over your recent sending, so it comes down by sending clean mail, not by deleting rows after the fact.

Nobody can override an AWS decision either. If AWS places the account under review or pauses it, that state is lifted by AWS when the underlying problem is fixed and you have said what changed.

Wraps suppresses hard bounces and complaints and shows the rates in one place, which is the part you control. It does not change what AWS counts or what AWS does about it.

## Common questions

### What bounce rate does AWS suspend an SES account at?

AWS states that a bounce rate of 5% or greater places the account under review, and 10% or greater may pause the account's ability to send. Aim to stay below 2%.

### Do soft bounces count toward my SES bounce rate?

No. AWS states the bounce rate includes only hard bounces to domains you have not verified. Soft bounces and bounces to verified domains are excluded.

### Can I calculate my SES bounce rate myself?

Not accurately. AWS says the rate is computed over a representative volume that differs per sender and can reach further back than the console or GetSendStatistics shows, so your own arithmetic will not match theirs.

### How long does it take for a bounce rate to recover?

There is no fixed window to wait out, because the rate is not measured over a fixed period. It moves as clean sending accumulates and displaces the bad volume.

### Does testing with fake addresses hurt my bounce rate?

Made-up addresses at real domains do. The SES mailbox simulator does not: AWS excludes simulator mail from your bounce and complaint rates and from your daily quota.

## Where to go next

### [Account under review or paused](https://wraps.dev/ses/account-under-review)

The next stage of the same incident. What each state permits, and what to send AWS.

### [Complaint rate](https://wraps.dev/ses/complaint-rate)

The other metric AWS enforces on, with a much smaller margin for error.

### [Bounce and complaint handling](https://wraps.dev/docs/guides/bounce-handling)

The implementation depth: event pipeline, suppression, and what to do per bounce type.

### [Check your domain](https://wraps.dev/tools)

SPF, DKIM, DMARC, MX and blacklist checks, in case authentication is part of the picture.

### [AWS sending review process FAQs](https://docs.aws.amazon.com/ses/latest/dg/faqs-enforcement.html)

The primary source for every percentage on this page.

### [AccountSendingPausedException](https://wraps.dev/ses/errors/account-sending-paused)

The exception your code sees once the pause is in effect.

[Back to running Amazon SES in production](https://wraps.dev/ses)
