# What happens when an email bounces

> The bounce rule — hard vs soft bounces, the 4% and 8% bounce-rate thresholds, the 200-email floor, and how a stopped step resumes the next day.

**A bounce marks the contact Bounced and feeds the sequence bounce rate, recalculated once an hour. At a 4% rate the sequence toggle turns orange; at 8% Reply stops the sending step until the end of the day — but only once 200 or more emails have gone out. Follow-ups keep sending, and the step resumes next day.**

_Status: Reviewed — human-edited, facts not yet confirmed against the product._

## At a glance

| Aspect | Detail |
| --- | --- |
| **What it governs** | What a failed delivery changes — contact state, step execution, and sequence health |
| **Trigger** | The receiving server rejects a sent email (reported via Delivery Status Notification, or directly by the ESP when using SendGrid with bounce webhooks) |
| **Inputs** | Bounce type (hard or soft), sequence bounce rate, emails sent today |
| **Result** | Contact becomes `Bounced`; at 8% bounce rate with ≥200 emails sent, the step stops until end of day |
| **Configurable** | No — thresholds are fixed. Pre-send [email validation](/specifications/prospect-data) reduces bounces up front |
| **Does not** | Stop follow-up emails (they send even past the threshold), permanently suspend the sequence, or repair the bad address |
| **Plans** | All plans |

## Rule summary

A bounced email marks the contact `Bounced` and counts into the sequence's bounce rate.
The bounce rate is recalculated **once an hour** over a **24-hour window**. Crossing **4%**
turns the sequence toggle orange as a warning; crossing **8%** stops the sending step for
the rest of the day — provided at least **200 emails** were sent — and the step resumes
automatically the next day with the counter reset to zero.

## Trigger

The receiving mail server rejects a sent email. Reply learns about it from the Delivery
Status Notification (DSN) that arrives in the sending mailbox — or, when you send through
SendGrid with bounce webhooks connected, directly from SendGrid with no DSN involved.

## Decision logic

1. Classify the failure — **hard bounce** (permanently rejected: invalid or nonexistent address) or **soft bounce** (temporarily undeliverable, for example a full inbox).
2. Set the contact's status to `Bounced`. No further automated sends go to that address.
3. Recalculate the sequence bounce rate (hourly, across **all email steps and all sending
   email accounts** in the sequence):

```
Bounce rate in % = Bounced emails x 100 / Total people
```

**Then apply the thresholds:**

| Condition | Effect |
| --- | --- |
| Bounce rate reaches **4%** | Sequence toggle turns **orange** — warning only, sending continues |
| Bounce rate reaches **8%**, fewer than 200 emails sent today | Nothing stops — the 200-email floor protects small sends from statistical noise |
| Bounce rate reaches **8%**, 200 or more emails sent today | The sending step **stops until the end of the current day**; you are notified; the toggle turns **red** |

The next day, the stopped step resumes during your sending-window hours and the bounce
threshold resets to 0.

## Result

The bounced contact stops receiving sequence email. The sequence itself is never
permanently suspended by bounces: the stopped step resumes automatically the next day.
(Under the legacy rule the limit was 15% and suspension was permanent — that behavior was
replaced by this daily-reset model.)

## State changes

| Field | Change |
| --- | --- |
| Contact status | → `Bounced` |
| Sequence toggle | Orange at 4%, red at 8% (with the 200-email floor) |
| Statistics | Bounce counts into bounce rate (`Bounced emails × 100 / Total people`); a bounce is never a delivery |

## Exceptions

- **Follow-up emails are sent even when the 8% threshold is reached** — only the sending
  step stops.
- If **199 or fewer** emails were sent in the current window, no step stops regardless of
  the rate.
- With SendGrid bounce webhooks, there is no DSN in the mailbox; Reply records the bounce
  with the reason SendGrid provides.

## Configuration that changes this rule

The thresholds themselves are not configurable. What you can control is the input:
validate addresses before sending with the email validation service (see
[Prospect data](/specifications/prospect-data)), and check the DSN error codes in the
sending mailbox to understand individual failures — see
[Why was an email not sent](/troubleshooting/email-was-not-sent).

## Limits

| Limit | Value |
| --- | --- |
| Warning threshold (orange toggle) | 4% bounce rate |
| Stop threshold (red toggle, step stops until end of day) | 8% bounce rate |
| Daily email floor before the stop rule applies | 200 emails per sequence per sending window |
| Recalculation frequency | Once an hour |
| Rate window | 24 hours; resets to 0 each new day |

## FAQ

### Does an 8% bounce rate kill the sequence permanently?

No. The sending step stops until the end of the current day and resumes the next day
during your sending window, with the bounce counter reset to 0. Permanent suspension was
the legacy behavior at 15% and no longer applies.

### Do follow-ups stop when the threshold is reached?

No. Follow-up emails continue sending even after the 8% threshold stops the step. Only
new sends from the affected step wait for the next day.

### Can I send to a contact again after a bounce?

Not at the bounced address — fix or [enrich](/capabilities/data-enrichment) the address on
the contact record first. See [Contacts](/specifications/contacts) and
[Statuses](/reference/statuses).

### How do I see why a specific email bounced?

Open the Delivery Status Notification in the sending mailbox's inbox — it carries the
bounce error code and explanation. Sequence-level errors also surface in the sequence Log
tab; see [Why was an email not sent](/troubleshooting/email-was-not-sent).

## Related

- [Statistics calculation](/behavior/statistics-calculation) — bounce rate uses the Total-people denominator
- [Sequence stopping](/behavior/sequence-stopping) — all the ways a sequence stops
- [Reply detection](/behavior/reply-detection) — bounces are classified apart from replies
- [Deliverability](/capabilities/deliverability)
- [Statuses](/reference/statuses)

## Build with Reply

- REST API: [docs.reply.io](https://docs.reply.io/api-reference/introduction) — contact status and validation endpoints
- MCP: [agents.reply.io/mcp](https://agents.reply.io/mcp) — sequence health and contact operations
