Amazon SES Sunset Policy: Remove Inactive Subscribers

Amazon SES Sunset Policy: Remove Inactive Subscribers

Why List Hygiene Matters More Than Ever in 2026

Most Amazon SES senders invest heavily in authentication. SPF, DKIM, and DMARC records are correctly configured, dedicated IP pools are warmed carefully, and configuration sets are wired up to SNS. That baseline is now table stakes. Once identity is confirmed, inbox providers pivot immediately to engagement signals: who opens, who clicks, and crucially, who ignores. Sending to large volumes of unengaged, decayed contacts is now the fastest route to account review and inbox placement collapse for SES senders.

The scale of the problem is striking. Roughly one in six marketing emails never reaches the inbox, with the average inbox placement rate sitting at approximately 83% across the industry. At the same time, email lists decay at a rate of around 23% per year according to ZeroBounce's most recent data, meaning nearly a quarter of any list becomes invalid or deeply unengaged within twelve months. For a sender with 100,000 contacts and no hygiene process, that translates to tens of thousands of risky addresses accumulating silently, each one a potential bounce, complaint, or spam-trap hit waiting to surface.

The Hidden Cost of List Decay on SES Sender Reputation

AWS publishes clear enforcement thresholds that every SES sender must understand. For bounce rates, the review threshold is 5% and the account-pause threshold is 10%. For complaint rates, the review threshold is 0.1% and AWS pauses sending when the rate exceeds 0.01%. That complaint ceiling is extremely tight. On a list of 10,000 contacts, just ten spam complaints in a single send push you to the review threshold. At the account-pause level, a single complaint per 10,000 recipients is enough to trigger enforcement action.

The decay problem compounds quickly. ZeroBounce's annual list decay report tracked the rate at 22% in 2022, 25% in 2023, 28% in 2024, and 23% in 2025, with roughly two to three percent of addresses going dark every single month. After two years of no hygiene activity, lists commonly contain close to half invalid or dormant addresses. Many of those addresses do not simply produce hard bounces. Abandoned mailboxes and recycled domains are regularly converted into spam traps by ISPs and blacklist operators. Hitting a spam trap, even at modest send volumes, can trigger blacklisting that affects every mailbox provider simultaneously, not just the one running the trap.

Inactive subscribers who have not converted to hard bounces create a second category of risk that is less visible but equally damaging. Disengaged subscribers stop opening and clicking, which signals to mailbox providers that the content is unwanted. That negative engagement signal reduces inbox placement rates not just for those individuals but across the sending domain as a whole, affecting deliverability for your engaged subscribers too.

Understanding Your SES Signal Data

Amazon SES gives senders the raw data needed to detect decay early, but only if event publishing is configured properly. SES event publishing works through configuration sets, which specify which event types to capture and where to route them. Each configuration set can send events to Amazon SNS, Amazon Kinesis Data Firehose, Amazon CloudWatch, or Amazon S3. For list hygiene purposes, the events that matter most are hard bounces, soft bounces, complaints, opens, and clicks.

Hard bounce events carry a bounce type of Permanent and indicate that the recipient address does not exist, the domain does not exist, or the receiving server has permanently rejected delivery. These addresses will never become deliverable and must be removed immediately. SES automatically adds hard-bounce addresses to the account-level suppression list, which prevents future sends, but your application database must be kept in sync so that those contacts are also marked at the source.

Complaint events are fired when a recipient marks your message as spam. Yahoo operates a feedback loop that SES can receive directly. Gmail does not expose a traditional feedback loop; instead, Google applies complaint signals internally when evaluating sender reputation. Regardless of provider, complaints automatically trigger suppression at the SES account level when the account is configured to do so via the SES API v2 suppression settings. The PutSuppressedDestination operation allows you to add addresses to the suppression list programmatically, and the ListSuppressedDestinations operation lets you query the full list for syncing back to your database.

The harder signal to capture is non-engagement: subscribers who receive your emails but never open or click them. SES can publish open and click events through event publishing, but these rely on your email containing the SES tracking pixel and tracked links. Apple Mail Privacy Protection has inflated open-rate data significantly since 2021, which means raw open events from SES should be treated as directional rather than definitive for individual subscriber decisions. Click events remain a reliable engagement signal and should be weighted more heavily when building inactivity segments.

Defining Inactivity: Recommended Windows by Sending Frequency

There is no single universal inactivity window, because what counts as disengaged depends heavily on how often you send. The following windows represent practical, data-grounded thresholds for SES senders.

For daily senders, a subscriber who has not opened or clicked in 60 days has missed roughly 60 opportunities to engage. That contact should be flagged as at-risk at 60 days and moved into a re-engagement sequence. Removal should follow at 90 days without any engagement response.

For weekly senders, 90 days without engagement covers approximately 13 send cycles. Flag at 90 days, attempt re-engagement, and remove at 180 days. After 60 to 90 days of inactivity, most subscribers are already treated as low-value by inbox providers; after 180 days they are effectively considered dormant.

For monthly senders, the window can reasonably extend to 180 days before flagging and 365 days before removal, provided that re-engagement is attempted in the interim. Monthly newsletters targeting B2B audiences must also account for job changes: with median employee tenure at around 3.9 years according to US Bureau of Labor Statistics data, roughly a quarter of B2B contacts change corporate email addresses every year, making regular verification especially important for this segment.

Transactional email, including order confirmations, password resets, and account notifications, should never be subject to the same suppression logic as marketing email. Suppressing transactional mail based on inactivity can cause genuine service failures. Use separate configuration sets for transactional and marketing streams, and apply sunset logic only to the marketing stream. This also protects your transactional sending reputation from any damage caused by marketing list decay.

Building a Sunset Policy Step by Step

Step 1: Segment by engagement tier

Start by querying your SES event data to classify every marketing subscriber into one of three tiers. Active contacts have opened or clicked within your defined active window. At-risk contacts have not engaged within the at-risk window for their send frequency but have not yet crossed into dormant territory. Dormant contacts have had no engagement event recorded beyond the dormant threshold. This segmentation should be rebuilt on a rolling basis, at least weekly for high-volume senders.

Step 2: Run a re-engagement sequence

Before removing any dormant subscriber, send a short re-engagement sequence of two to three emails. The first email should acknowledge the absence of activity and offer clear value for re-engaging, with a prominent call to action to confirm continued interest. The second email, sent three to five days later, can take a different angle or tone. The third email should be a plain-text last-chance message that makes it straightforward to either confirm interest or unsubscribe cleanly. Any subscriber who responds positively should be moved back to the active tier with their inactivity clock reset. Any subscriber who does not respond to the full sequence should be suppressed.

Step 3: Define removal triggers

Removal triggers should be binary and automated rather than manually reviewed. A hard bounce fires immediate suppression. A complaint fires immediate suppression. Completion of a re-engagement sequence with no positive response fires suppression on a schedule. Any address that has not been verified via double opt-in and has never produced an open or click event within 30 days of signup should be reviewed promptly, as this pattern is a strong indicator of a mistyped or fake address.

Automating Suppression in SES

SES v2 accounts have the account-level suppression list enabled by default for both bounces and complaints. For addresses you want to suppress proactively, such as dormant contacts exiting a re-engagement sequence without responding, use the PutSuppressedDestination API call with a suppression reason of BOUNCE or COMPLAINT as appropriate. Alternatively, manage them outside the SES suppression list entirely by ensuring your application code checks an internal do-not-mail list before calling the SES send API.

Configuration sets are the key to routing suppression events cleanly. Create a dedicated configuration set for your marketing stream with reputation metrics enabled so that bounce and complaint rates are published to CloudWatch. Use an SNS event destination within that configuration set to receive bounce and complaint notifications in near real time. A Lambda function subscribed to the SNS topic can then process each notification, update your application database, and call PutSuppressedDestination if needed. The SES v2 API also supports bulk operations for adding or removing addresses from the suppression list, which is far more efficient than looping through individual API calls at scale.

If you operate multiple AWS accounts or send across multiple regions, suppression lists are account-scoped and region-scoped. An address suppressed in us-east-1 is not automatically suppressed in eu-west-1. Any cross-region or cross-account suppression sync must be implemented explicitly, typically by centralising your do-not-mail list in a shared database and enforcing it before the send API call is made, regardless of which SES endpoint is used.

The Metrics That Warn You First

Bounce rates and complaint rates are lagging indicators: by the time they cross AWS's warning thresholds, list decay is already well advanced. The metrics that warn you earliest are trends rather than absolute values. A bounce rate that climbs from 0.8% to 1.5% over four consecutive weeks is a stronger signal than a rate sitting at 2% with no movement. A complaint rate that ticks upward over successive campaigns targeting your oldest list segments almost always points to decay in those segments specifically.

Open-rate trends, even accounting for Apple MPP inflation, remain useful at the segment and cohort level. If the cohort of subscribers who signed up twelve months ago shows a meaningful decline in click-to-open rate over the past three months while newer cohorts hold steady, that is a clear signal of decay concentrated in older signup vintages. Click-rate trends carry even more weight because they are not affected by proxy-open inflation.

Watching these metrics manually across multiple SES configuration sets, sending identities, and AWS regions is impractical at any meaningful scale. SES Monitor addresses this directly by aggregating bounce rate trends, complaint rate trends, and open and click engagement data across your entire SES sending footprint into a single real-time dashboard. Rather than waiting for an AWS account-review notification to arrive, SES Monitor surfaces the trajectory of each metric with alerting thresholds you configure well in advance of the AWS enforcement ceiling. That early-warning layer is the difference between catching a decaying segment before it affects your domain reputation and discovering the problem only after your account has been placed under review.

Practical Quarterly Hygiene Checklist

List hygiene is not a one-off project. The following actions should be completed on a quarterly cycle for any active SES sending programme.

Review hard bounce and complaint rates per configuration set and per sending identity. If any identity shows a bounce rate above 2% or a complaint rate approaching 0.1%, investigate the underlying list segment before the next major send, given that the account-pause threshold sits at just 0.01%.

Query your SES event data for all addresses that have never produced an open or click event since their first send, and verify whether those addresses went through a double opt-in confirmation at signup. Any that did not should be suppressed immediately. Double opt-in is the single most effective list-hygiene measure available at the point of acquisition, because it verifies that the address is deliverable and that a real person controls it before the address ever enters your sending list. The reduction in signup conversion rate is real but modest compared with the reputational cost of mailing unconfirmed addresses at scale.

Audit your signup forms. CAPTCHA reduces bot and disposable-address submissions, which in turn reduces the volume of addresses that will hard-bounce within the first few sends.

Verify suppression list synchronisation across all sending identities and regions. Run a test query against the ListSuppressedDestinations API for each active region, cross-reference the results against your application database, and ensure that any address suppressed in one region is also marked as do-not-mail at the application level so it cannot be reached via any other SES endpoint.

Finally, review your re-engagement sequence performance. If more than 80% of dormant subscribers are completing the full sequence without responding, the sequence itself may need revision, or the inactivity window may need to be shortened to catch disengagement earlier.

Hygiene Is a Continuous Monitoring Loop

Amazon SES gives you the infrastructure to send reliably and the event data to make informed list decisions. What it does not provide out of the box is a continuous, aggregated view of how your sender reputation is trending across all your sending identities and regions simultaneously. The gap between raw SES metrics and actionable list decisions is exactly where accounts get into trouble. Bounce rates drift upward gradually. Complaint rates creep past the 0.1% review threshold quietly, with account suspension following swiftly at 0.01%. Dormant subscribers accumulate until they represent a significant share of each send.

A robust sunset policy, built on clear inactivity windows, automated suppression via the SES v2 API, and a structured re-engagement sequence, removes the bulk of that risk before it materialises. Continuous monitoring of bounce rate trends, complaint rate trends, and cohort-level engagement metrics closes the loop, ensuring that early warning signals are visible and actionable long before AWS takes enforcement action. That is the posture of a sender who treats list hygiene not as a quarterly cleanup task but as a permanent operating practice.

Never find out from AWS again
SES Monitor alerts you the moment bounces and complaints start arriving.
Start monitoring

Keep reading

All articles →
20 Jul 2026

Amazon SES Custom MAIL FROM and DMARC Alignment

12 min read
17 Jul 2026

BIMI for Amazon SES: Display Your Logo in the Inbox

15 min read
14 Jul 2026

Amazon SES Suppression Lists: All Three Layers Explained

15 min read

Start protecting your SES reputation today

Connect your AWS SES account in a couple of minutes and get bounce and complaint alerts before a problem becomes a suspension.

2-minute setup · No contracts · Cancel anytime