IP Warmup Schedule — Ramping a New Sending Server in AcelleMail

A fresh IP has zero reputation. Send 50,000 emails day one and every major ISP routes you to spam. The warmup schedule grows volume gradually over 4-6 weeks. This guide walks the AcelleMail per-server config + a realistic ramp table.

Why a new IP needs ramping

When you provision a new sending IP — fresh Amazon SES verified domain, new Postmark account, new dedicated IP from your ESP — receiving servers (Gmail, Outlook, Yahoo) have NO reputation data on it yet. Their default treatment of unknown IPs is conservative: messages from a brand-new IP at high volume look like a botnet, so they go to spam or get rejected.

Warmup = sending in small batches at first, growing volume daily over 4-6 weeks. Each successful batch teaches the receiving servers "this IP sends legitimate mail at this volume." Once you've earned a baseline reputation, full volume is sustainable.

Skip warmup → blocked or filtered for months until reputation recovers from a fresh start.

The realistic 30-day ramp table

Day Daily volume What to monitor
1 1,000 Bounce rate <2%, complaint <0.1%
2 2,000 Same
3 4,000 Same
4 8,000 Same
7 15,000 Same; first reputation check at Google Postmaster Tools
10 25,000 Hold if any signal red
14 50,000 Postmaster Tools should now show IP reputation: Medium or High
21 100,000 Hold if complaint rate creeps above 0.15%
30 250,000+ Full volume; warmup complete

Send to your MOST engaged segment first. Engaged-last-7d is the gold subgroup; expect 30-40% open rates. Receiving servers see high engagement → reputation jumps fast. If you start with re-engagement segments (low open rate), warmup takes 2-3× longer.

Configure the schedule in AcelleMail

Open the sending-server detail

In AcelleMail's sidebar, click Sending → Sending servers. The list shows every server connected to this account with its status chip, sending limit, and last activity:

Customer sending-server list

Click into the row you want to configure. The detail page surfaces Connection settings (host / credentials), Configuration (server name, default from, sending limit, bounce + FBL handler), and the Test connection / Send test email buttons in the toolbar:

Server detail — Connection + Configuration

Where the throttle lives

Same sending-server detail → Configuration section. The Sending limit dropdown caps how many emails AcelleMail will hand to this server per unit of time (per minute / hour / day):

Sending limit dropdown — 5,000 emails per 1 hour

AcelleMail enforces the limit globally — when the rolling-window counter hits the cap, the queue holds back until the window slides. No throttling code in your campaigns; configure once per server.

For warmup specifically: set Sending limit to 1,000/day on Day 1. Each day raise it manually following the table above, OR use AcelleMail's per-server Warmup strategy (admin panel) to automate the daily increment.

Admin-side: pool-wide warmup view

The admin pool list lets you see every server's warmup state at a glance:

Admin pool — sending servers and their states

In the admin sidebar, Warmup Strategies lets you define reusable warmup templates and attach them to servers as they're provisioned. The Strategies screen ships with 4 starter templates (Cautious / Balanced / Aggressive / Long-Haul) — each defines starting volume, daily increment, per-day cap, and growth curve:

Admin warmup strategies — Cautious / Balanced / Aggressive / Long-Haul presets

Click into any preset to see its per-day volume table + risk-level + estimated completion. Balanced is the recommended default — linear ramp + safety pause if bounce/complaint signals trip. For a new IP with no prior reputation, the Cautious strategy (slow ramp + extra checkpoints) buys deliverability insurance. For a known-good IP on a new account, Aggressive cuts the warmup to ~30 days.

The per-server Warmup stats view shows live progress against the assigned strategy:

Warmup stats — per-server progress against strategy

Monitoring during warmup

Daily checks (5 minutes):

  1. Bounce rate at the AcelleMail campaign report. Should stay <2%. If creeps to 3%+, HOLD the ramp at current volume; don't raise tomorrow.
  2. Complaint rate. Stay <0.1%. If >0.15%, HOLD or cut volume.
  3. Google Postmaster Tools (added separately, see walkthrough). IP reputation should climb from "Bad" → "Medium" → "High" over the warmup. If stays "Bad" after Day 14, content + list quality issue, not just volume.
  4. SNDS (Outlook postmaster, see walkthrough). Per-IP reputation Green/Yellow/Red. Aim for Green by Day 21.

What to do if warmup hits a wall

Day Signal Action
7 Bounce rate 4-6% Stay at current daily volume for 3 days. Run list verification.
7 Bounce rate 8%+ Pause warmup. Audit list source — likely bad import. Resume only after cleanup.
14 Postmaster IP still "Bad" Send only to engaged-last-7d for next 5 days. Re-evaluate.
14 Complaint rate 0.2-0.3% Hold volume; audit campaign content + subject lines.
21 Holding at Day 14 volume, all signals green OK to resume the ramp from where you held. Add 2-3 extra days to compensate.
30 Still seeing 3-5% bounce rate at full volume Permanent issue. Investigate list source or content; this is not warmup-related.

Common UI signals + fixes

Symptom Likely cause UI fix
Daily quota hit by 10am Cap set too low for the day's intended volume Sending limit → raise; OR add second warming server in parallel
Bounce rate spike on Day 3 Engaged-segment exhausted; sending to unengaged Re-scope segment; engaged-30d is too broad for warmup
Postmaster Tools shows no data after Day 7 Domain alignment broken — Gmail can't attribute the IP to your domain Re-verify domain in sending-server detail; check DKIM signature
Day 14 reputation still "Medium" Mid-warmup — expected Continue ramp; reputation grows slowly with consistent quality
Mid-warmup quota wasn't raised yesterday Manual update missed Set up admin Warmup Strategy → assign to server → auto-increments daily
Advanced: per-ISP warmup, ramp curves, and automation patterns

The standard 30-day ramp is uniform. Sophisticated warmups go per-ISP because each major receiver weights different signals.

Per-ISP warmup curves:

ISP Aggressive curve OK? Notes
Gmail / Google Workspace Moderate — Gmail signals reputation early Postmaster Tools is your daily check
Microsoft (outlook.com/live/hotmail) Slower — Microsoft is conservative SNDS shows per-IP reputation
Yahoo / Y!Mail / AOL Slower still No native postmaster tool; reverse-engineer from FBL + bounce
Apple iCloud Very conservative No postmaster tool; trust bounce + complaint signals
Business B2B (proofpoint, Mimecast, Cisco) Very slow Per-domain reputation; some require IP whitelisting

For each ISP, segment your warmup audience. Per-domain segments:

-- AcelleMail subscriber tagging by recipient ISP
UPDATE subscribers SET tags = JSON_ARRAY_APPEND(tags, '$', 'gmail') WHERE email LIKE '%@gmail.com';
UPDATE subscribers SET tags = JSON_ARRAY_APPEND(tags, '$', 'outlook') WHERE email LIKE '%@outlook.com' OR email LIKE '%@hotmail.com' OR email LIKE '%@live.com';

(Run via tinker or migration; AcelleMail's tag-based segmentation handles this natively too.)

Send Days 1-3 to gmail-tagged only. Reputation builds at Gmail first. Add outlook on Day 4. Add yahoo/icloud Day 7. Add B2B receivers Day 14.

Programmatic warmup automation:

# Daily cron at 02:00 — increments per-server quota by 20-30% if yesterday's
# bounce + complaint rates stayed green
SERVER_UID="..."

# Yesterday's stats from API
stats=$(curl -sH "Authorization: Bearer $ADMIN_TOKEN" \
  "https://acellemail.com/api/v1/admin/sending-servers/${SERVER_UID}/stats?day=yesterday")

bounce=$(echo $stats | jq '.bounce_rate')
complaint=$(echo $stats | jq '.complaint_rate')
current_limit=$(echo $stats | jq '.daily_sending_limit')

# Stop ramp if signals red
if (( $(echo "$bounce > 0.04" | bc -l) )) || (( $(echo "$complaint > 0.0015" | bc -l) )); then
  echo "Holding ramp — bounce=$bounce complaint=$complaint"
  exit 0
fi

# Else raise quota 25% (cap at full-volume target)
new_limit=$(( current_limit * 5 / 4 ))
if [ $new_limit -gt 250000 ]; then new_limit=250000; fi

curl -X PATCH -H "Authorization: Bearer $ADMIN_TOKEN" \
  -d "{\"sending_limit\": $new_limit}" \
  "https://acellemail.com/api/v1/admin/sending-servers/${SERVER_UID}"

echo "Raised limit to $new_limit"

Multi-IP warmup — for a pool of 5 new IPs:

  1. Day 1-7: Warm IP 1 only at 1k → 15k/day. Other IPs disabled.
  2. Day 8-14: Add IP 2 starting at 1k/day. IP 1 continues.
  3. Continue staggered intro every 5-7 days

Why staggered? If IP 1 hits a problem, the volume on others remains low. Parallel warm-up risks all-IPs-bad-at-once.

Warmup completion criteria — formally end warmup when:

  • 14 consecutive days at full volume with bounce <2%
  • Complaint rate <0.05% sustained
  • Postmaster Tools / SNDS reputation High/Green
  • Engagement (open + click) within 10% of baseline

After completion, monitor monthly. Reputation can degrade fast — staying clean requires content + list discipline.

Related articles

17 comentarios

8 comentarios

  1. danrey.dev
    For very low-volume senders (< 5k/month), does warmup even matter? Or just send and let the provider's shared pool absorb the trickle?
    1. admin
      Suppression list import via CSV captures all opt-outs including preference-center ones if you exported with the right field set. The export filter defaults exclude some — check the 'include unsubscribed' checkbox on Mailchimp's export wizard...
    2. admin (editado)
      Yes — strict alignment requires the From: domain to match exactly. Subdomain-level (`bounce.example.com` vs `example.com`) passes relaxed but fails strict. Most operators run relaxed; the rare strict-DMARC setups need explicit subdomain DKIM configuration.
    3. admin (editado)
      good question. the campaign:rerun audit writes to laravel.log only when the audit decides to force-resume — pure noop runs are silent. we'll add an info-level heartbeat in a future acelle release to make it easier to monitor.
    4. admin (editado)
      For your specific case, I'd recommend testing with `--dry-run` first. The behavior under high load isn't 100% deterministic and we want you to see your own pattern before committing
    5. admin (editado)
      Good catch. The bounds (200/32) are hardcoded in the runtime. We've discussed making them configurable; not a ner-term priority but it's tracked
    6. admin (editado)
      We don't recommend that approach in production. It works in dev but has subtle race conditions under concurrent load. Stick with the documented pattern.
  2. tnovak.cz
    confirming the postmaster tools data lag — sometimes 48 hours, sometimes longer. don't make decisions on a single day's data
  3. m.schmidt78
    We hit a Spamhaus listing once. Self-service delisting was actually fast (< 24h) but the reputation recovery took weeks. Not the listing itself that hurt — the user complaints that caused it.
    1. admin
      Worth noting — your config diverges from the recommended one in one place that often bites people. We'll send a separate note with the suggested change. lol
  4. ravi.kumar.del…
    The Postmaster Tools section is gold. Most senders don't even know it exists.
    1. admin
      Appreciate it. If anything in this needs updating, ping us — we revisit articles every few months.
  5. sobrien.kw
    if you're warming a new ip after a known issue, consider seeding with transactional mail first (password resets, order confirmations). higher engagement rate per send than marketing — helps the reputation ramp.
  6. bos.devops
    does engagement-based segmentation help during warmup? e.g. only sending to the most-engaged 20% during week 1?
    1. admin
      Yes, that pattern is supported. The undocumented bit is the order — config:cache MUST come after the migration, not before. Updating the docs to make that explicit. anyway
  7. priya.iyer.ops
    this is the clearest ip warmup schedule i've found. the volume table at the top is what i'm referencing daily
  8. akira.tnk88
    we warmed up a dedicated ip last fall. the 2-week ramp this article describes is on the aggressive side — gmail in particular punishes anything faster than ~3-4 weeks. we did 4 weeks and had a clean ramp...

More in Sending & Deliverability