Email domain warm up: how to warm a new domain or IP address
By Rasket TeamLast updated 13 min read
Written for startup founders, deliverability specialists and email marketers
The short answer
Send at low volume to the people most likely to want your mail, then raise daily volume in small steps; a sudden doubling can get you rate-limited at Gmail. An anti-abuse group suggests six weeks on average; a small list mailed daily can finish in about two. Slow down whenever mail is delayed, bounces or draws spam reports.
Domain or IP: what you are warming
Google’s summary of the method is one line: “Start with a low sending volume to engaged users, and slowly increase the volume over time.”[1] Everyday one-to-one mail from your own inbox needs none of this; warm-up is about volume from a new domain or a new IP address.
Picture a shop that moves its newsletter to a fresh subdomain and sends to all 40,000 subscribers on the first morning. By lunchtime Gmail is delaying most of it. It answers with deferrals, temporary “try again later” refusals, and the rest of the batch waits to be retried. Nothing in the message was wrong. The domain had no history, and the first thing Gmail saw was a spike.
M3AAWG (the Messaging, Malware and Mobile Anti-Abuse Working Group), whose Sender Best Common Practices this guide leans on, explains why: a new domain’s reputation “usually starts as unknown, which makes it similar to bad in that it does not yet have any sending history.”[2]
An IP address is the numeric address of the server your mail leaves from. Most sending services put many customers on a shared pool of addresses that the service keeps in use; a dedicated IP carries only your mail. Providers keep a reputation for both: “Gmail tracks volume, feedback, and limits per domain and IP address.”[1]
| Domain warm-up | IP warm-up | |
|---|---|---|
| What carries the reputation | Your domain, as the DKIM signature and From address name it | The server address the mail leaves from |
| When you need it | A new domain or subdomain, or one that has never sent volume | A new dedicated IP |
| On a shared pool | Still needed: the pool is warm, your domain is not | Not needed: your provider keeps the addresses in use |
A new subdomain such as news.example.com needs its own warm-up, even under a parent domain with years of good history. M3AAWG advises against counting on the parent’s record: “When sending from a new subdomain, to be safe, domain warming is recommended even if the organizational level domain already has an established reputation.”[2] Whether marketing needs a subdomain at your volume is in the subdomain guide. A dedicated IP is not better by default. M3AAWG says “Consistency of volume, whether high or low, plays an integral part in the determination of IP reputation”,[2] and a small or bursty sender alone on an address gives providers too little to judge. One record belongs to the address rather than the domain: the PTR record, which Google and Yahoo expect for every sending IP.[1][5] On a shared pool your provider sets it, not you.
How long does a warm-up take?
6 weeks
Among the mailbox providers, only Microsoft publishes a figure: “A new IP can expect to be fully ramped within a couple of weeks or sooner depending on volume, list accuracy and as long as their junk email complaint rates are kept at a minimum.”[3] Google and Yahoo publish none, so you set the pace per provider by how each one answers you. At Microsoft that answer can be a refusal rather than a delay: its error list includes 550 rejections “related to content with spam-like characteristics or IP/domain reputation.”[3]
Google gives no duration, but it names what sets the pace:
- How much you send. “The more email that you send, the more slowly you should increase sending volume.”
- How often you send. “You can increase the sending volume more quickly when you send daily instead of weekly.”
- How big each jump is. “Immediately doubling previously sent volumes suddenly could result in rate limiting or reputation drops.”[1]
From here on, anything not quoted or cited is our own practice rather than a provider’s rule: the durations, the step size, the engagement windows and the stop rule. Applying Google’s three rules, a list of a few thousand that you can mail daily often finishes in about two weeks; mailed weekly, each issue is one step, so it takes longer.
Before the first send
Ready to warm: your part
- SPF and DKIM, the two DNS records that prove your mail comes from you, pass, and at least one of them aligns with your From address (in practice, DKIM signed with your domain, not your provider’s), and a DMARC record (your policy for mail that fails them) is published. What Gmail and Yahoo require is in the sender requirements checklist.
- Marketing mail carries one-click List-Unsubscribe headers and a visible unsubscribe link.
- The domain is verified in Google Postmaster Tools, which shows spam reports and delivery errors for mail to personal Gmail accounts.
- Addresses that bounced or complained before are removed, and nobody on the list was bought, scraped or appended.
- The domain is on no blocklist already; the blocklist guide shows how to check, and the check is worth repeating after a sharp spike in refusals.
Postmaster Tools may stay empty at first: “Data might be missing if the total number of messages for a given day is too low.”[6] How the authentication records work is in DKIM, SPF and DMARC explained.
Dedicated IP only. On a shared pool the address-level work is your sending provider’s, so skip this. If the sending IPs are yours, join two Microsoft programmes: Smart Network Data Services, “available to anyone who can prove they own an IP range”, which reports each address’s complaint rate,[7] and the Junk Email Reporting Program, to which Microsoft asks you to add every new IP.[3]
Who to send to first
The first sends go to the people most likely to want the mail, because their reactions are the evidence. Split your consented list by things a person has to do:
- Warmest: clicked, replied or bought in the last 30 days, or signed up in that time.
- Warm: did one of those in the last 90 days.
- The rest: did one of those in the last 12 months.
Leave out anyone silent for longer than a year; sunsetting inactive subscribers explains why old addresses bounce and turn into spam traps. If the warmest group is smaller than your first step, send to all of it and widen the window (60 days, then 90) until the step is full. A store can build these groups from its customer export, filtered by last order date. Readers who open but never click land in the last group or outside it; once the ramp is done they get your normal mail again, and the sunset guide decides who to drop.
Do not use opens to pick them. Apple’s Mail Privacy Protection downloads remote content, tracking pixels included, “in the background by default” and “regardless of whether you engage with the email”,[8] so Apple Mail users register opens they never made. Why opens can’t tell you who is inactive has the detail.
Example schedules, from 300 contacts to 50,000 a day
These schedules put engaged recipients first and make each step about one and a half times the one before. Move up only after a clean step, as defined in the next section.
A few thousand contacts
Take a list of 4,000. Mailing daily, send each step’s volume on two days in a row; the same people get both days’ mail, as they would anyway. Mailing weekly, each step is one issue.
| Step | Volume | Who | Mailing daily | Mailing weekly |
|---|---|---|---|---|
| 1 | 400 | Warmest | Days 1–2 | Issue 1 |
| 2 | 600 | Warmest, then warm | Days 3–4 | Issue 2 |
| 3 | 900 | Add warm | Days 5–6 | Issue 3 |
| 4 | 1,400 | Add warm | Days 7–8 | Issue 4 |
| 5 | 2,000 | Add the rest | Days 9–10 | Issue 5 |
| 6 | 3,000 | Add the rest | Days 11–12 | Issue 6 |
| 7 | 4,000 | Everyone in the 12-month list | Day 13 on | Issue 7 |
Mailing weekly, that is seven issues, and the people outside each step miss that issue. To get there sooner without leaving anyone out for long, split each issue into two or three segments (by sign-up date, say) and schedule each as its own send on a different day, each one a step.
A few hundred contacts
At 300 contacts the whole list is low volume, so there is little to ramp. Start with the 30-day group, keep a steady rhythm (“It’s preferable to send campaigns on a regular basis until the domain is sufficiently warmed up”[2]) and watch your own numbers, because each complaint weighs more: one in a send of 300 is a third of a percent.
Working up to 50,000 a day
Two steps a week, each held for two to four days. A large list that mails weekly needs the same steps split into separate sends across the week, or it takes twelve issues.
| Week | Share of eventual daily volume | At 50,000 a day | Who |
|---|---|---|---|
| Week 1 | 1%, then 1.5% | 500, then 750 | Warmest |
| Week 2 | 2.3%, then 3.5% | 1,150, then 1,750 | Warmest |
| Week 3 | 5.3%, then 8% | 2,650, then 4,000 | Add warm |
| Week 4 | 12%, then 18% | 6,000, then 9,000 | Add warm |
| Week 5 | 27%, then 41% | 13,500, then 20,500 | Add the rest |
| Week 6 | 64%, then 100% | 32,000, then 50,000 | Everyone in the 12-month list |
How to send each step
Spread each day’s mail out. M3AAWG: “Do not send your daily batch all at once.”[2] If you make significant changes to your sending setup or your headers mid-way, Google asks you to “increase the modified segment of traffic separately.”[1] Receipts and password resets cannot wait for a ramp: let them flow at their natural rate and ramp only the marketing. A marketing subdomain keeps the two apart in your data; transactional vs marketing email draws the line between them.
What to watch, and when to slow down
Judge each step against the one before, provider by provider. You do not need code for that: filter the step’s delivery report by recipient address (@gmail.com, @outlook.com and @hotmail.com, @yahoo.com), which covers most of a consumer list. A step was not clean if any of these happened:
- the hard-bounce rate, not the count, at least doubled from the step before (with fewer than five bounces, wait for the next step before judging);
- one provider was still deferring mail the next day;
- the spam rate passed 0.1% at any provider; below 1,000 messages one complaint is already over that, so there take two complaints in a step as the stop. Google asks senders to “Keep spam rates reported in Postmaster Tools below 0.10% and avoid ever reaching a spam rate of 0.30% or higher”,[1] and Yahoo says “Keep your spam rate below 0.3%”.[5] How each is measured is in the spam complaint rate guide.
Complaint figures come from a different place at each provider: Gmail’s only from Postmaster Tools, which may be blank at low volume; Yahoo’s from its Complaint Feedback Loop (“Use the CFL to monitor your complaint rate”);[5] Microsoft’s from the Junk Email Reporting Program.[3] A sending service collects the feedback loops for you; until Postmaster Tools fills in, watch the complaints it reports from Yahoo and Microsoft recipients, and hold Gmail if its unsubscribe rate is double the others’. A step that is not clean costs the days you hold it plus a repeat: two to four days in the 4,000 example, four to eight in the 50,000 one.
| Signal | What it usually means | What to do |
|---|---|---|
| Deferrals at one provider | That provider is throttling you | Hold the next step for its recipients until deferrals clear |
| More hard bounces saying the address does not exist (5.1.x codes) | Old or unconfirmed addresses in the group you just added | Remove them; go back to the previous group |
| Refusals citing policy or reputation (5.7.x codes) | The provider is refusing you, not the address | Keep those recipients; slow down and read the reply text |
| More spam reports | Recipients do not want this mail | Hold the ramp; narrow to the warmest group |
| Fewer clicks at one provider, scanner clicks left out | Mail may be landing in junk there | Hold or step back a stage |
When a provider defers you
Google’s instruction: “If messages start bouncing or start being deferred, reduce the sending volume until the SMTP error rate decreases. Then, increase slowly again.” Its rate limit has a code of its own, 4.7.28. After one, Google asks you to:[1]
- stop sending for at least 10 minutes;
- resume from a single connection;
- add connections back one at a time.
Those steps are for whoever runs the sending servers. Through a sending service you never hold the connections, so they are the service’s job. Yours is the volume, as in the table above, while the other providers stay on schedule.
Yahoo’s temporary refusals carry codes beginning TS; it names complaints and an IP’s poor reputation as causes and asks for a Sender Support Request if the same one persists.[4] M3AAWG adds that you “may need to slow down sending to some or all domains if you see deferral spikes”,[2] so one slow provider can get its own pace while the others carry on. A deferral is retried; a bounce is final (see hard bounce vs soft bounce).
Spam reports and clicks
M3AAWG reads engagement both ways: a drop “may indicate your mail is going to the junk folder”, and large spikes “may indicate security appliances giving your mail extra scrutiny.”[2] Watch clicks, not opens, and per provider: a problem at one is hidden in a combined number. Leave out clicks a company’s link scanner made, or a step to business addresses looks better than it was; how to tell a scanner’s click from a reader’s shows the signs.
A seed test, a send to a set of test inboxes that reports where each filed it, catches a broken signature before the first step. During the ramp it says less: those inboxes have never heard from you, unlike your engaged subscribers.
If you send through Rasket
Rasket’s pricing page lists managed shared IPs on every plan and says “Shared pools are kept in good standing”,[10] so there is no IP for you to warm and no reverse DNS for you to set up. Rasket does not publish how its shared addresses are grouped. What it does publish are the brakes on its own customers, the part of keeping a pool clean that you can see. On a paid plan, a new account can send 100 emails an hour and 500 a day for its first 24 hours, then 1,000 a day, doubling with each day sent without bounce or spam problems, until it is a week old.[13] An account whose mail bounces or is reported as spam too often has its sending limited.[11]
What is new is your domain, and Rasket does not ramp a new domain for you. Those limits are on your account, not a warm-up schedule for your domain, but they shape a launch. They count every email the account sends, receipts included, so a brand-new account reaches at most 500 people on day one however warm they are. Open the account and verify the domain at least a week before launch, and start the ramp then.
To run the schedule, send each step as a Campaign to a segment. A segment filters on your contacts’ fields and properties, not on past clicks,[14] so the engagement groups come from your own data. Rasket’s import docs describe adding a true-or-false column from a spreadsheet, such as “bought in the last 30 days”, to your contacts,[12] and a segment can filter on it. Re-import the column before each step so it stays current.
Rasket’s metrics break results down by sending domain, campaign or email, not by the recipient’s provider. To check one provider after a step, search the step’s emails by recipient domain: the list-emails search matches recipient addresses, and each email carries its last event, such as delivery_delayed or bounced.[15] Its pricing page offers a dedicated IP from the Scale plan up, recommended from 5,000 emails a day, that warms up on its own schedule while your mail keeps flowing.[10] A new domain on it still needs the ramp above.
A warm-up is the wrong fix when the list is the problem. If the first step, sent to your warmest group, bounces or draws complaints, a slower schedule will not repair it. Google’s advice when errors continue at low volume is to “review individual messages to identify problems.”[1] Clean the list first, then work through why emails go to spam before you restart the ramp.
For developers: deferrals per provider from events
Through an API you never see the SMTP replies. Rasket’s events docs list an email.delivery_delayed event for each deferral, carrying the receiver’s status code and text for each delayed recipient.[9] Group them by the recipient domain’s mail servers (its MX record), not the domain itself: a company on Google Workspace or Microsoft 365 has its own domain but those providers’ servers. This handler caches one lookup per domain and prints a line per delayed recipient:
// Count deferrals per receiving provider (Node 18+, ES module).
import { resolveMx } from "node:dns/promises";
const PROVIDERS = [
[".google.com", "Gmail / Google Workspace"],
[".googlemail.com", "Gmail / Google Workspace"],
[".olc.protection.outlook.com", "Outlook.com"],
[".mail.protection.outlook.com", "Microsoft 365"],
[".yahoodns.net", "Yahoo"],
];
const mxCache = new Map(); // recipient domain -> provider
const deferrals = new Map(); // provider -> count
async function providerFor(domain) {
if (!mxCache.has(domain)) {
const mx = await resolveMx(domain).catch(() => []);
mx.sort((a, b) => a.priority - b.priority);
const host = (mx[0]?.exchange ?? "").toLowerCase();
const known = PROVIDERS.find(([suffix]) => `.${host}`.endsWith(suffix));
mxCache.set(domain, known ? known[1] : host || "no MX");
}
return mxCache.get(domain);
}
export async function onEvent(event) {
if (event.type !== "email.delivery_delayed") return;
for (const r of event.data.delay.delayedRecipients) {
const domain = r.emailAddress.split("@")[1].toLowerCase();
const provider = await providerFor(domain);
deferrals.set(provider, (deferrals.get(provider) ?? 0) + 1);
console.log(provider, r.status, r.diagnosticCode);
}
}Frequently asked questions
Do I need to warm up again when I switch email providers?
Your domain keeps its history when you move, as long as your old provider signed DKIM with your domain; mail it signed with its own domain built history for the provider, not you. Publish the new provider's DKIM and return-path records before you switch, keep the old provider's SPF entry until its last messages are out, and move the volume across over a week or two.
Do I need to warm up again after a long pause in sending?
There is no published cut-off after which a domain counts as new again. The cautious reading of Google's advice against sudden volume spikes is to treat a return after months of silence as a short warm-up: restart small with your most engaged readers and step up over a week or two.
How do I prepare for a seasonal peak such as Black Friday?
Raise volume in the weeks before rather than on the day. A peak at three times your usual volume is exactly the sudden jump Google warns about, so add the extra sends in steps over several weeks before the sale, so the day itself is a size the providers have already seen from you.
My launch date is fixed. What if I cannot wait six weeks?
Start now with the people who already expect to hear from you. A 5,000-person waitlist with two weeks to go fits seven steps sent every other day: 500 of the newest sign-ups, then 750, 1,100, 1,700, 2,500, 3,800 and everyone. If launch comes first, mail only the groups you have reached and let sign-up and receipt mail flow as it comes.
How do I know when the warm-up is finished?
M3AAWG speaks only of a domain being sufficiently warmed up, without a test. A practical one is that you are sending your full normal volume and deferrals, bounces and complaints have stayed flat across several sends at that level.
My domain has sent a little mail for a year. Is it warm enough for a much bigger list?
Only for the volume it has been sending. Google's warning is about sudden spikes when you do not have a history of sending large volumes, so a steady few hundred a day is a starting point, not a pass: ramp from your current daily volume to the new one in the same steps.
Should my automated emails keep running during a warm-up?
Keep the flows that answer something a person just did, such as order confirmations, welcome mail and abandoned-cart reminders, because those recipients are as warm as anyone. Pause automations aimed at older subscribers, such as win-back series, until the ramp reaches their group.
Sources
15 primary sources, each read on the date shown.
See all sourcesHide sources
- 1.Email sender guidelines — Gmail Help, Google,
- 2.M3AAWG Sender Best Common Practices, Version 4.0 (updated August 2026) — M3AAWG,
- 3.Troubleshooting — Outlook.com Postmaster, Microsoft,
- 4.SMTP Error Codes — Yahoo Sender Hub,
- 5.Sender Requirements & Recommendations — Yahoo Sender Hub,
- 6.Set up Postmaster Tools — Gmail Help, Google,
- 7.SNDS – Frequently Asked Questions — Outlook.com Smart Network Data Services, Microsoft,
- 8.Mail Privacy Protection & Privacy — Apple Legal,
- 9.Events — Rasket docs,
- 10.Pricing — Rasket,
- 11.Billing API reference — Rasket docs,
- 12.Imports API reference — Rasket docs,
- 13.Email API rate limits: headers and backoff — Rasket blog,
- 14.Segments API reference — Rasket docs,
- 15.Emails API reference — Rasket docs,
Keep reading
- GuideHow to lower your email spam complaint rateWhat a good email spam complaint rate is, how Gmail and Yahoo measure it, how to read it on a small list, and the steps that bring it down.
- GuideGoogle Postmaster Tools, explainedWhat Google Postmaster Tools shows, how to set it up, what each v2 dashboard means, how to query its API, and what to use when the charts stay empty.
- GuideEmail list cleaning: sunset inactive subscribersDefine inactive subscribers when Apple inflates opens, spot scanner clicks, run a re-engagement flow, and sunset the rest without blocking their receipts.
- GlossaryIP warmingWarming is the practice of raising volume on a new sending address slowly rather than all at once. Receiving servers judge an address they have never seen by how it behaves, and a sudden burst from an unknown one looks like a spam run. A warm-up sends a little on the first day and more each day after, watching bounces and complaints as it climbs.
- GlossaryDedicated IPA dedicated IP is a sending address used by one sender and nobody else. Its reputation is entirely yours: nothing another sender does can damage it, and nothing they do can help it either. It suits high and steady volume. Below a few thousand messages a day it usually hurts, because there is not enough traffic for receiving servers to form an opinion.
- GlossaryShared IP poolA shared pool is a set of sending addresses used by many senders at once. Its reputation is collective, and keeping it in good standing is the operator's job. For most volumes that is the right default: the pool is already warm, while a small sender on an address of its own would never send enough for receiving servers to form a view.
- DocsEventsEvery event a webhook can carry, with one real payload each.
Written by the Rasket Team. First published ; last checked against its sources . See something out of date? How we correct guides.