
Validate subscriber emails to keep your Mailchimp audience clean. Remove invalid addresses, reduce bounces, and protect your sender reputation.
Validate emails as people join your audience. Auto-archive invalid subscribers before they receive campaigns.
Bulk validate your audience before major sends. Remove invalid addresses to keep bounce rates under 2%.
Catch disposable and temporary emails that inflate subscriber counts without engagement.
Tag subscribers by validation status. Send critical campaigns only to verified addresses.
MailOdds API key from dashboard. Mailchimp API key from Account > Extras > API Keys.
Use the Mailchimp API to list members or set up a webhook for new subscriber events.
POST each email to /v1/validate. The response includes status, action, disposable flag, and detailed sub_status.
If action is "reject", archive the subscriber via Mailchimp API. If "accept", add a "verified-email" tag.
In Mailchimp, create segments using tags. Target verified subscribers for important campaigns.
// Validate a Mailchimp subscriber email via MailOdds API
const subscriberEmail = 'user@example.com'; // From your Mailchimp audience
const response = await fetch('https://api.mailodds.com/v1/validate', {
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json'
},
body: JSON.stringify({ email: subscriberEmail })
});
const result = await response.json();
const outcome = {
email: result.email,
status: result.status,
action: result.action,
is_valid: result.action === 'accept',
is_disposable: result.disposable || false
};
// Use outcome to tag or archive the subscriber in Mailchimp // Route subscribers by validation result
// After validating, branch on the action field:
//
// action: "reject"
// -> Archive or unsubscribe the member in Mailchimp
//
// action: "accept_with_caution"
// -> Add tag "risky-email" via Mailchimp API
//
// action: "accept"
// -> Add tag "verified-email" via Mailchimp API
//
// Optionally update a merge field:
// PATCH /3.0/lists/{list_id}/members/{subscriber_hash}
// { "merge_fields": { "VALIDATION": result.status } } // Remove invalid subscribers from Mailchimp after validation
// 1. Validate the email via POST /v1/validate
// 2. If result.action is "reject", archive the subscriber:
//
// DELETE /3.0/lists/{list_id}/members/{subscriber_hash}
// (archives the member, keeps the record)
//
// Or set status to "cleaned" for permanent removal:
// PATCH /3.0/lists/{list_id}/members/{subscriber_hash}
// { "status": "cleaned" }
//
// Alternative: Archive instead of cleaning
// to keep the record but prevent future sends. Receive real-time MailOdds events and update Mailchimp subscribers automatically. Route bounces to cleaned status, and use filtered open/click data to update merge fields.
is_bot = true when the event came from a security scanner, link prefetcher, or corporate email gateway (not a human). Common with Barracuda, Proofpoint, and Mimecast.
is_mpp = true when the event came from Apple Mail Privacy Protection, which pre-fetches all images and inflates open counts. Affects roughly 50% of iOS/macOS mail users.
Both fields are Booleans on engagement events (opened, clicked). Always guard with == true since they may be absent on non-engagement events.
// Handle MailOdds webhook events and update Mailchimp
// Your webhook endpoint receives POST with event payload
const { event, to: email, is_bot, is_mpp } = req.body;
if (event === 'message.bounced') {
// Add to MailOdds suppression list
await fetch('https://api.mailodds.com/v1/suppression', {
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json'
},
body: JSON.stringify({
entries: [{ type: 'email', value: email, reason: 'hard_bounce' }]
})
});
// Then archive the member in Mailchimp via their API:
// PATCH /3.0/lists/{list_id}/members/{subscriber_hash}
// { "status": "cleaned" }
}
if (event === 'message.opened' && !is_bot && !is_mpp) {
// Real human open: update Mailchimp merge field LASTOPEN
// PATCH /3.0/lists/{list_id}/members/{subscriber_hash}
// { "merge_fields": { "LASTOPEN": new Date().toISOString() } }
}
if (event === 'message.clicked' && !is_bot) {
// Real click: add tag "engaged-validated" via Mailchimp API
// POST /3.0/lists/{list_id}/members/{subscriber_hash}/tags
// { "tags": [{ "name": "engaged-validated", "status": "active" }] }
} Keep your MailOdds suppression list in sync with Mailchimp. Add bounced emails to your blocklist and check suppression status before sending campaigns.
// Check suppression status before sending a Mailchimp campaign
const subscriberEmail = 'user@example.com'; // From your Mailchimp audience
const checkRes = await fetch('https://api.mailodds.com/v1/suppression/check', {
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json'
},
body: JSON.stringify({ email: subscriberEmail })
});
const check = await checkRes.json();
if (check.suppressed) {
// Email is on blocklist: archive in Mailchimp
// PATCH /3.0/lists/{list_id}/members/{subscriber_hash}
// { "status": "cleaned" }
console.log('Suppressed:', subscriberEmail, 'Reason:', check.reason);
}
// Not suppressed: safe to include in campaign Push validation health metrics into Mailchimp merge fields. Track deliverable rates and validation counts for audience-level reporting.
// Fetch validation health and push to Mailchimp merge fields
const response = await fetch('https://api.mailodds.com/v1/telemetry/summary', {
headers: { 'Authorization': 'Bearer YOUR_API_KEY' }
});
const telemetry = await response.json();
// Update Mailchimp merge fields via their API:
// PATCH /3.0/lists/{list_id}/members/{subscriber_hash}
// {
// "merge_fields": {
// "VALTOTAL": telemetry.totals.validations,
// "DELRATE": telemetry.rates.deliverable,
// "BNCRATE": telemetry.rates.undeliverable
// }
// } Validate your entire Mailchimp audience before a campaign. Submit emails in batch, poll for results, and archive or tag subscribers based on outcomes.
// Bulk validate Mailchimp audience before a campaign
// Step 1: Export audience emails via Mailchimp API or CSV export
// Step 2: POST batch to MailOdds
const audienceEmails = ['user1@example.com', 'user2@example.com']; // Up to 100
const response = await fetch('https://api.mailodds.com/v1/validate/batch', {
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json'
},
body: JSON.stringify({
emails: audienceEmails,
depth: 'enhanced'
})
});
const batch = await response.json();
// Poll GET /v1/validate/batch/{job_id} for results
// Then archive or tag subscribers based on validation outcomes
console.log('Job ID:', batch.job_id, 'Count:', audienceEmails.length); Beyond list cleaning, MailOdds monitors sender health, DMARC compliance, and bounce patterns for the domains you send from in Mailchimp.
Track DMARC authentication pass/fail rates for the domains you send from in Mailchimp. Get early warning when SPF or DKIM alignment issues threaten your inbox placement.
// Monitor DMARC for your Mailchimp sending domain
const response = await fetch(
'https://api.mailodds.com/v1/dmarc/domains/yourdomain.com/trend',
{ headers: { 'Authorization': 'Bearer YOUR_API_KEY' } }
);
const trend = await response.json();
// trend.policy, trend.data_points[].fail_percentage
// Alert if fail rate exceeds threshold Related: DMARC Monitoring
Monitor your overall sender reputation across the domains you use in Mailchimp. Track bounce rates, complaint rates, and authentication health in one place.
// Check sender health for domains used in Mailchimp
const response = await fetch('https://api.mailodds.com/v1/sender-health', {
headers: { 'Authorization': 'Bearer YOUR_API_KEY' }
});
const health = await response.json();
// health.reputation_score (0-100)
// health.bounce_rate, health.complaint_rate
// health.authentication_health Related: Sender Reputation
Cross-reference bounced emails from Mailchimp campaign reports with MailOdds bounce analysis. Classify bounces by type and auto-suppress confirmed hard bounces to protect your reputation.
// Cross-reference Mailchimp bounces with MailOdds data
const response = await fetch('https://api.mailodds.com/v1/bounce-analyses', {
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json'
},
body: JSON.stringify({
emails: mailchimpBouncedEmails // Array of bounced emails from Mailchimp
})
});
const analysis = await response.json();
// Classify: hard_bounce, soft_bounce, complaint
// Auto-suppress confirmed hard bounces Related: Email Deliverability Platform
Identify subscribers with no engagement over a configurable window. Use the report to archive inactive Mailchimp subscribers or move them to a re-engagement campaign.
// Identify inactive contacts for Mailchimp audience hygiene
const response = await fetch(
'https://api.mailodds.com/v1/contacts/inactive-report?days=90',
{ headers: { 'Authorization': 'Bearer YOUR_API_KEY' } }
);
const report = await response.json();
// report.inactive_count, report.inactive_percentage
// Use to archive inactive Mailchimp subscribers Related: Email Deliverability Platform
Can't find what you're looking for? We're here to help you get Mailchimp working.
Get 1,000 free validations. Remove invalid subscribers and reduce bounces.