# Amazon SES Complaint Rate: Why 0.1% Is the Number That Matters

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

One complaint in a thousand puts an SES account under review. That is a tighter budget than most senders realise, and the number SES shows you is lower than the number recipients are actually producing.

## Which one is happening to you

| What you are seeing | What it usually means |
| --- | --- |
| A single campaign spiked the rate | Either the segment did not expect the mail, or the mail did not look like what they signed up for. Content and audience, in that order. |
| The rate is steady but sits near 0.1% | You are operating with no margin. Any campaign that lands slightly wrong takes you over the review line. |
| Complaints are rising and unsubscribes are not | People cannot find the unsubscribe, or do not trust it. The spam button is the fallback for a missing exit. |
| Gmail recipients complain and nothing shows in SES | Expected. SES only counts complaints from providers that feed them back, so your visible rate understates reality. |

## The numbers AWS enforces

As with bounces, AWS publishes a best-practice level and a separate level at which it intervenes. The gap between them is one complaint in two hundred.

| Metric | Aim below | AWS places under review | AWS may pause sending |
| --- | --- | --- | --- |
| Complaint rate | 0.1% | 0.1% or greater | 0.5% 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.

## The rate you see is not the rate you have

AWS is explicit that the complaint rate statistic in the console and from GetSendStatistics does not include complaints from email providers that do not send feedback to SES. Providers that run a feedback loop are counted. Providers that do not are invisible.

So a rate of 0.04% is not evidence that you are at 0.04%. It is evidence that the providers who report to SES are seeing 0.04%. Treat the visible number as a floor, and leave headroom accordingly.

Like the bounce rate, the complaint rate is measured over a representative volume rather than a fixed window, so it is not something you can recompute from your own send log and match.

## What actually causes complaints

Complaints are not a deliverability problem that arrived from outside. They are a recipient telling their provider that they did not want this. Almost all of them trace back to one of four things.

-   The recipient does not remember opting in, usually because the opt-in was a side effect of doing something else.
-   The mail does not resemble what they signed up for. A product update list that starts sending promotions generates complaints from people who are still interested in the product.
-   The unsubscribe is hard to find, requires a login, or does not appear to work. Marking as spam is faster and always works.
-   Frequency changed without warning. Weekly to daily is a complaint generator even when the content is good.

## Make unsubscribing easier than complaining

This is the single highest-leverage change, and it is mostly mechanical. RFC 8058 one-click unsubscribe puts an unsubscribe control in the provider's own interface, right next to the button that would otherwise register a complaint. Gmail and Yahoo both require it for bulk senders.

Honour it immediately and without a confirmation step. An unsubscribe that takes two clicks and a login is a complaint waiting to happen.

-   Send the List-Unsubscribe and List-Unsubscribe-Post headers on bulk mail.
-   Keep a visible unsubscribe link in the body as well. The header is for the provider, the link is for the reader.
-   Suppress on the first request, not on the next export.
-   Offer fewer emails as an option alongside none. Some complaints are frequency complaints.

## Watch it before AWS does

The SES console's Reputation metrics page carries the account-level complaint rate alongside the bounce rate, and both can be graphed and alarmed in CloudWatch. Alarm at a level below the review threshold, not at it, since by the time you cross the line AWS has already acted.

The account's current enforcement state is one API call, and worth wiring into whatever you already page on.

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

## What no tool can do for you here

No platform can see complaints that the recipient's provider never reports. The gap between your visible rate and your real rate is structural, and every sender on SES has it.

No platform can stop someone marking mail as spam. What it can do is make the alternative easier and make sure the complaint results in immediate suppression.

Wraps tracks complaints, suppresses the addresses that generate them, and supports one-click unsubscribe. It has no influence over AWS's thresholds or over whether a provider feeds complaints back to SES.

## Common questions

### What is a good complaint rate for Amazon SES?

AWS says to maintain a complaint rate below 0.1%. A rate of 0.1% or greater places the account under review, and 0.5% or greater may pause sending.

### Why is my SES complaint rate lower than I expect?

AWS states the complaint rate statistic excludes complaints from email providers that do not send feedback to SES. Providers without a feedback loop generate complaints you never see.

### Does an unsubscribe count as a complaint in SES?

No. An unsubscribe is a request to stop; a complaint is a recipient marking the message as spam with their provider. Only the second one affects the metric AWS enforces on.

### Does one-click unsubscribe reduce complaints?

It gives the recipient an exit in the same place as the spam button, which is where the decision is made. It does not make unwanted mail wanted, so it works alongside fixing targeting and frequency rather than instead of it.

### How do I find out which campaign caused the complaints?

Publish SES complaint events per configuration set or per campaign so the metric is attributable. An account-level rate tells you that something is wrong and nothing about where.

## Where to go next

### [Bounce rate](https://wraps.dev/ses/bounce-rate)

The other enforced metric, with wider thresholds and different arithmetic.

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

What happens once you cross the line, and how to get back.

### [Suppression lists](https://wraps.dev/docs/guides/suppression-lists)

How suppression works in practice, including what gets added automatically.

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

The event pipeline behind both metrics.

### [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.

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

Authentication and blacklist checks, free, no account needed.

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