# SES dedicated IP warm-up planner

Worksheet for the post **Amazon SES Dedicated IP Warm-Up: Standard vs Managed (2026)**.

This is a blank log plus six milestone totals. It is not a copy of AWS’s 40-row per-provider table.

## Where the milestone numbers come from

On **3 July 2025**, Tyler Holmes published a sample ramp on the AWS Messaging Blog:

[Guide to IP and domain warming and migrating to Amazon SES](https://aws.amazon.com/blogs/messaging-and-targeting/guide-to-ip-and-domain-warming-and-migrating-to-amazon-ses/)

That sample uses seven columns (Gmail, Hotmail, Outlook, Yahoo, iCloud, AOL, and everyone else). Day 1 is **150 per column**, **1,050** total. The daily totals below are the sums of those columns on the days that matter for a checkpoint. AWS says this pace fits lists with about **40–60% engagement**. If engagement is lower, hold a milestone longer. Do not paste these totals onto a cold or unengaged list.

| Day | Daily total |
| --- | ---: |
| 1 | 1,050 |
| 7 | 70,000 |
| 14 | 3,500,000 |
| 21 | 7,700,000 |
| 30 | 14,000,000 |
| 40 | 21,000,000 |

A second clock sits beside this table and is **not** the same schedule. [Standard dedicated IP auto warm-up](https://docs.aws.amazon.com/ses/latest/dg/dedicated-ip-warming.html) raises a percentage for **45 days independent of sending volume**. Managed dedicated IPs warm per provider and can spill overflow to the shared pool. Read the post before you treat day 40 as “done.”

## Columns in the CSV

[`warmup-planner.csv`](./warmup-planner.csv)

| Column | Meaning |
| --- | --- |
| `row_type` | `milestone` = AWS daily-total reference. `plan` = your log. Do not edit milestone `planned` values. |
| `day` | Ramp day, counting from the first send on the new IP. |
| `isp` | `daily_total` on milestone rows. On plan rows, the provider you can actually segment (`gmail`, `outlook`, `yahoo`, or `other`). |
| `planned` | Mail you intend to send that day to that `isp`. |
| `actual` | Mail you sent. Leave blank until the day closes. |
| `bounce_rate` | Hard-bounce rate for that slice that day. |
| `complaint_rate` | Complaint rate for that slice that day. |
| `action` | `advance`, `hold`, or `step_back`. |
| `notes` | Why you held or stepped back. |

`action` has one rule: if bounce rate or complaint rate is worse than the prior day, set `hold` or `step_back`. Do not `advance` to keep the calendar.

## How to use it

1. Leave the `milestone` rows as reference.
2. Duplicate the `plan` template rows — one per day per provider you segment. If you cannot segment, log a single `other` or `daily_total` row and cap it with the milestone total only when engagement is in the 40–60% band.
3. Day 1 `planned` should be your most engaged segment (openers from the last 30 days), not the full list.
4. Each morning, fill `actual`, both rates, and `action` before you raise the next day’s cap.
5. Keep transactional mail you cannot delay on a pool that is already warm.

Rates change and provider tolerance changes. Re-read the AWS post and the [SES dedicated IP warm-up page](https://docs.aws.amazon.com/ses/latest/dg/dedicated-ip-warming.html) before you treat this sheet as a quota.
