Email Warmup Automation Guide
How to automate IP and domain warmup for hands-off reputation building
Why Automate Warmup?
Manual warmup is error-prone and inconsistent. Automated warmup runs on schedule, sends to engagement lists, and adjusts based on results. It's the difference between a 28-day warmup that works and one that gets your IPs blocked.
✅ CloudMails Auto-Warmup
CloudMails includes automated warmup that runs on fixed schedules, injects engagement signals, and monitors results. The system automatically adjusts volume if bounce thresholds are approached.
Automated Warmup Schedule
This is the standard 28-day warmup schedule that should be automated:
WARMUP_SCHEDULE = {
# Phase 1: Foundation (Days 1-7)
"days_1-3": {
"volume": "100-200/day",
"recipients": "engagement_seed_list",
"opens": "auto_open",
"target_isp": "any"
},
"days_4-7": {
"volume": "200-500/day",
"recipients": "engagement_seed_list",
"opens": "auto_open",
"reply": "auto_reply"
},
# Phase 2: Growth (Days 8-14)
"days_8-10": {
"volume": "500-1000/day",
"recipients": "engagement_seed_list + small_cold_list",
"opens": "auto_open",
"reply": "auto_reply"
},
"days_11-14": {
"volume": "1000-2000/day",
"recipients": "mixed_list",
"opens": "auto_open",
"reply": "auto_reply"
},
# Phase 3: Scale (Days 15-21)
"days_15-18": {
"volume": "2000-5000/day",
"recipients": "mixed_list + larger_cold_list",
"engagement": "graduated_injection"
},
"days_19-21": {
"volume": "5000-10000/day",
"engagement": "reduce_auto_engagement"
},
# Phase 4: Transition (Days 22-28)
"days_22-25": {
"volume": "10000-25000/day",
"engagement": "natural_only"
},
"days_26-28": {
"volume": "25000-50000/day",
"full_warmup": true
}
}
Engagement Injection
ISP algorithms track engagement. Automated warmup must simulate natural engagement:
Open Signal Injection
Warmup emails should be opened by the recipient to signal interest. Methods:
- Seed list opens – Pre-arranged recipients who open every email
- Email client simulation – Automated opens via email tracking pixels
- Link clicks – Some warmup emails include tracked links
Reply Signal Injection
Replies are the strongest positive signal. Include prompts like:
⚠️ Engagement Ratio Matters
ISPs track engagement rates. If you're sending 1,000 emails but only getting 5 opens, that low engagement signals problems. Aim for 20%+ open rates on warmup sends.
ISP-Specific Warmup Adjustments
Gmail requires the most careful warmup. Yahoo is sensitive to complaint rates. Outlook is more forgiving.
| ISP | Warmup Sensitivity | Required Adjustments |
|---|---|---|
| Gmail | Very High | Start at 50 emails/day, slower ramp |
| Outlook | Medium | Standard schedule works |
| Yahoo | High | Monitor complaint rate closely |
| iCloud | Medium | Lower daily limits |
Gmail-Specific Warmup
# Gmail-specific warmup overrides
GMAIL_WARMUP = {
"initial_volume": 50, # vs 100 for other ISPs
"daily_increase": 1.15, # 15% daily (vs 20% for others)
"max_before_check": 500, # Pause and verify at 500
"required_open_rate": 0.25, # 25% minimum
"pause_on_complaint": True
}
Monitoring During Warmup
Automation without monitoring is just as dangerous as no automation at all.
Metrics to Monitor
- Bounce rate – Alert at 1%, stop at 2%
- Open rate – Alert if below 15%
- Complaint rate – Any complaints need investigation
- Spam folder rate – Alert if above 5%
Automated Responses to Watch For
WARMUP_ALERTS = {
"bounce_rate_above_threshold": {
"action": "reduce_volume_to_previous_step",
"notify": ["ops_team"]
},
"complaint_received": {
"action": "pause_ip_for_72_hours",
"notify": ["ops_team"]
},
"low_engagement_rate": {
"action": "increase_engagement_injection",
"notify": ["ops_team"]
},
"spam_folder_placement": {
"action": "reduce_volume_50_percent",
"notify": ["ops_team"]
}
}
Domain Warmup Automation
Domain warmup follows the same principles but includes DNS propagation checks.
# Domain warmup automation
DOMAIN_WARMUP_CHECKLIST = {
"dns_propagation": {
"check_spf": True,
"check_dkim": True,
"check_dmarc": True,
"check_mx": True,
"wait_time": "24-48_hours_after_record"
},
"test_sending": {
"send_to_seed": True,
"verify_delivery": True,
"check_authentication": True
},
"gradual_volume": {
"initial": "50_emails/day",
"increase": "next_day",
"monitor": ["bounce_rate", "authentication_pass"]
}
}