# Bounces, complaints, and suppression lists

> Tell hard bounces from soft bounces, learn why complaints matter most, and see how Broadcast's suppression lists stop you mailing addresses that hurt you.

Source: https://sendbroadcast.net/university/deliverability/bounces-complaints-suppression

Every bounce and every spam complaint is a vote against your reputation. Mailbox providers notice when you keep mailing addresses that do not exist, or people who said no. In this lesson you learn to read bounces and complaints, and how Broadcast's suppression lists protect you from mailing the same bad addresses twice.

## Hard bounces and soft bounces

A bounce is an email the receiving server refused. There are two kinds, and they need opposite responses.

A **hard bounce** is permanent. The reply has a 5xx code, most often `550 5.1.1`: the mailbox does not exist. Other causes are a domain with no mail server, or a permanent block. Every later email to that address is wasted, and providers read repeated attempts as a sign that you do not clean your list. Suppress it at once.

A **soft bounce** is temporary. The reply has a 4xx code: a full mailbox, a server that is down, greylisting, or throttling. The sending service retries, and most get through. An address that soft bounces send after send, such as a mailbox full for months, should be treated as hard.

A sudden wave of soft bounces from one provider, such as many `421` replies from Gmail or Microsoft, is usually not about the addresses. That provider is slowing you down. Send more slowly and check your authentication and complaint rate.

### Hard bounce

Permanent, `5xx`

- Often `550 5.1.1`
- The mailbox does not exist
- Suppress it at once

### Soft bounce

Temporary, `4xx`

- Full mailbox, server down, greylisting
- The sending service retries
- Most get through

Two kinds of bounce, and opposite responses.

## Complaints matter most

A complaint is a reader who clicked "Report spam". It is the strongest negative signal you can get, and a rising complaint rate needs a review of your list and your consent, not a technical fix.

Keep these limits in mind:

- **Bounces**: under 2% is healthy for a list you mail regularly.
- **Complaints**: Gmail asks bulk senders to stay under 0.1% and never reach 0.3%.
- **Amazon SES** reviews an account at a 5% bounce rate or a 0.1% complaint rate, and can pause sending at 10% bounces or 0.5% complaints.

- Treat as your ceiling. Gmail's target, and where SES reviews an account: 0.1%
- Gmail: never reach this: 0.3%
- Amazon SES can pause sending: 0.5%

Complaint rates. The bars share one scale, so the distance between limits is real.

- Healthy: stay under this: 2%
- Amazon SES reviews the account: 5%
- Amazon SES can pause sending: 10%

Bounce rates. The scale is 20 times wider than the one above: complaints are far less forgiving.

Check both on the broadcasts list after every send, in the **Bounce** and **Spam** columns.

## How Broadcast learns about them

Your email provider reports bounces and complaints through **ESP webhooks**. When one arrives, Broadcast does three things:

1. Marks that email as bounced or complained.
2. Deactivates the subscriber, with a history entry such as "Bounced (Unsubscribed) [Webhook]".
3. Adds the address to the **channel** suppression list, with the provider's reason.

Broadcast also catches one kind of hard bounce without webhooks. When an SMTP server refuses an address at send time because it does not exist, Broadcast records it the same way, with "[Send]" in the history. Bounces reported later, and every complaint, still need webhooks. Without them, your activity looks better than it is and you keep mailing dead addresses.

On Amazon SES, **Suppression List Sync** on the email server imports SES's own account-level list, including bounces from before you connected Broadcast.

## What each suppression blocks

Open **Settings → Global Suppression**. There are two tabs, **Channel** and **Global**. Each entry shows its source and what it blocks.

- **Added manually**, **Imported** or **API**, the entries you add yourself: block **all** email, including transactional.
- **Hard bounce**, **spam complaint**, or **suppressed by provider**: blocks **marketing** only, so broadcasts and sequences. Transactional mail still goes, because a complaint about a newsletter should not stop a password reset.

![The Channel tab of the suppression list with Source and Blocks columns: hard bounces and complaints block Marketing only, and manual entries block All email](https://sendbroadcast.net/assets/docs/university/suppression-list-5f670c8e.png)

The Source and Blocks columns on the Channel tab. The addresses are examples.

One exception: in **Settings → General Channel Settings**, **Hard bounces also block transactional email** makes hard bounces block transactional mail too.

When an address has several sources, the strongest wins. Adding an address yourself upgrades a provider suppression to block all email.

### Entries you add

Blocks all email

- Added manually
- Imported
- API

### Entries from your provider

Blocks marketing only

- Hard bounce
- Spam complaint
- Suppressed by provider

What each source blocks. The setting above moves only hard bounces to all email.

Warning

Reactivating a subscriber, by import, API or resubscribe, does not remove their suppression. It keeps blocking email until you remove it by hand. Remove a suppression only when you are sure.

## Channel or global

Automatic suppressions are always **channel** suppressions. Nothing is ever added to the **Global** tab on its own. If a bounced address seems missing, look at the Channel tab first.

That matters when you run several channels. A hard bounce in one channel is a dead address in every channel. To share what one channel learned, click **Copy to global** on the Channel tab. Broadcast shows how many addresses it would copy before it writes anything, and running it again adds nothing new.

## Bring your old suppressions with you

Moving from another platform? Export its hard bounces and complaints before you import subscribers, and upload them under **Settings → Global Suppression**: open the menu next to **Add suppression** and choose **Upload email list**. The file is plain text, one address per line. Imports then skip those addresses.

## When a broadcast bounces a lot

Open the broadcast's **Recent Activity** and use the **Bounced** filter. The reason under each bounce is the diagnosis. Hard bounces from a fresh import mean the list was old. Blocks or rejections mean a reputation or authentication problem, so start with lesson 2. See [bounces and delivery failures](/how-to/bounces-and-delivery-failures).

## What you learned

- Hard bounces (5xx) are permanent: suppress them. Soft bounces (4xx) are temporary.
- Complaints matter most. Keep them under 0.1%.
- ESP webhooks drive auto-suppression into the channel's list. Nothing goes to Global by itself.
- Your own suppressions block all email. Provider suppressions block marketing only.

## Quiz
1. What does a 550 5.1.1 reply mean?
   - The mailbox is full, try again later
   - The receiving server is throttling you
   - The mailbox does not exist, so it is a hard bounce (correct)
   550 5.1.1 means the recipient's mailbox does not exist. Suppress the address and never mail it again.
2. A subscriber hard bounces in your Newsletter channel. Where does Broadcast record the suppression?
   - On the Newsletter channel's suppression list (correct)
   - On the Global tab, for every channel
   - Nowhere, you must add it by hand
   - At your email provider only
   Automatic suppressions are always channel-specific. Nothing is added to the Global tab automatically.
3. By default, what does a suppression from a spam complaint block?
   - All email, including password resets
   - Marketing email only, broadcasts and sequences (correct)
   - Nothing, it is only a label
   Provider-reported suppressions block marketing only. Suppressions you add yourself block all email.
