Bounce rate
The share of attempted recipient deliveries that receiving servers rejected, best split into permanent and temporary failures.
See it
What it is
Bounce rate is rejected recipient attempts divided by attempted recipient deliveries, multiplied by 100. Count recipients, not API calls, because one message can address several people and produce a different result for each. Report hard, soft, and total bounce rates separately; one points at list quality, another may point at a temporary receiver or reputation problem.
Watch it per campaign, message stream, recipient domain, and rolling time window. A list-wide average can look calm while one old import is full of dead mailboxes or Gmail is deferring a single stream. The useful dashboard pairs the rate with raw counts and SMTP status classes, so a small test send cannot look as trustworthy as a month of steady volume. Amazon SES treats the number as an operating limit rather than a report: an account approaching a 5 percent bounce rate can be placed under review, and 10 percent can pause sending altogether.
The denominator is the gotcha. A request rejected by your send API before acceptance is an application error, not an email bounce, and a 4xx deferral that later delivers is not a final bounce. Suppressed addresses were never attempted and belong in neither side of the fraction. Providers label events differently, so publish the formula next to the chart instead of comparing two unexplained percentages.
Ask AI for it
Write a SQL model for bounce rate from Amazon SES delivery events. Use one row per provider message ID and recipient, and define the denominator as recipient deliveries accepted for sending. Exclude local validation errors and addresses blocked by the suppression list. Count only final bounce events in the numerator, so a temporary delay that later receives a Delivery event is not a bounce. Compute hard, soft, and total rates as percentages with raw numerator and denominator counts, grouped by campaign, transactional versus marketing stream, recipient domain, and rolling 1 day, 7 day, and 30 day windows. Deduplicate webhook retries by message ID plus recipient and add tests for multi-recipient messages and out-of-order events.