MailOdds
Mailchimp

Mailchimp + MailOdds

Validate subscriber emails to keep your Mailchimp audience clean. Remove invalid addresses, reduce bounces, and protect your sender reputation.

Setup time: 5-10 min
Difficulty: Beginner
1,000 free validations included

Prerequisites

  • MailOdds account with API key
  • Mailchimp account with audience
  • Zapier or Make account

Mailchimp Use Cases

New Subscriber Validation

Validate emails as people join your audience. Auto-archive invalid subscribers before they receive campaigns.

Pre-Campaign List Clean

Bulk validate your audience before major sends. Remove invalid addresses to keep bounce rates under 2%.

Disposable Email Detection

Catch disposable and temporary emails that inflate subscriber counts without engagement.

Segment by Email Quality

Tag subscribers by validation status. Send critical campaigns only to verified addresses.

Step-by-Step Setup

1

Get API Keys

MailOdds API key from dashboard. Mailchimp API key from Account > Extras > API Keys.

2

Create Zap: New Subscriber

Trigger on "New Subscriber" in Mailchimp. Map email_address to validation Code step.

3

Validate with MailOdds

Code step validates the email. Returns status, action, disposable flag, and detailed sub_status.

4

Route by Result

Filter: if invalid, archive the subscriber. If valid, add "verified-email" tag.

5

Create Segments

In Mailchimp, create segments using tags. Target verified subscribers for important campaigns.

Zapier: Validate Mailchimp Subscriber

JAVASCRIPT
// Zapier Code Step - Validate Mailchimp Subscriber Email
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: inputData.email // Mapped from Mailchimp subscriber email
  })
});

const result = await response.json();

return {
  email: result.email,
  status: result.status,
  action: result.action,
  is_valid: result.action === 'accept',
  is_disposable: result.disposable || false
};

Make: Mailchimp List Validation

JAVASCRIPT
// Make Scenario - Mailchimp List Validation
// 1. Mailchimp: Watch New Subscribers (trigger)
// 2. HTTP Module: POST to https://api.mailodds.com/v1/validate
//    Headers: Authorization: Bearer YOUR_API_KEY
//    Body: { "email": "{{1.email_address}}" }
// 3. Router: Branch by action
//    - "reject" -> Mailchimp: Unsubscribe/Archive Member
//    - "accept_with_caution" -> Mailchimp: Add Tag "risky-email"
//    - "accept" -> Mailchimp: Add Tag "verified-email"
// 4. Mailchimp: Update Member Merge Fields
//    VALIDATION = {{2.data.status}}

Zapier: Remove Invalid Subscribers

JAVASCRIPT
// Zapier: Remove Invalid Subscribers from Mailchimp
// After validation, clean invalid emails from your audience:
//
// Step 1: Code by Zapier (validation above)
// Step 2: Filter - Only continue if is_valid = false
// Step 3: Mailchimp - Unsubscribe Email
//    List: Your Main Audience
//    Email: {{trigger.email_address}}
//    Status: "cleaned" (permanent removal)
//
// Alternative: Archive instead of unsubscribe
// to keep the record but prevent future sends.

Webhook Event Handling

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.

Understanding is_bot and is_mpp in Webhook Events

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.

Zapier: Handle MailOdds Webhook Events for Mailchimp

JAVASCRIPT
// Zapier Code Step - Handle MailOdds Webhook Event
const event = inputData.event;
const email = inputData.to;

if (event === 'message.bounced') {
  // Add to MailOdds suppression list
  const suppRes = 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' }]
    })
  });

  // Archive member in Mailchimp
  // Next Zapier step: Mailchimp - Update Subscriber Status to "cleaned"
}

if (event === 'message.opened' && !inputData.is_bot && !inputData.is_mpp) {
  // Real human open - update Mailchimp merge field
  // Next step: Mailchimp - Update Subscriber Merge Fields
  //   LASTOPEN = new Date().toISOString()
}

if (event === 'message.clicked' && !inputData.is_bot) {
  // Real click - tag subscriber
  // Next step: Mailchimp - Add Tag "engaged-validated"
}

return { event, email, is_bot: inputData.is_bot, is_mpp: inputData.is_mpp };

Suppression Sync

Keep your MailOdds suppression list in sync with Mailchimp. Add bounced emails to your blocklist and check suppression status before sending campaigns.

Zapier: Sync Suppression List with Mailchimp

JAVASCRIPT
// Zapier: Sync MailOdds Suppression List with Mailchimp
// Step 1: Check if email is suppressed before sending
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: inputData.email })
});
const check = await checkRes.json();

if (check.suppressed) {
  // Email is on blocklist - archive in Mailchimp
  // Next step: Mailchimp - Update Subscriber Status to "cleaned"
  return { suppressed: true, email: inputData.email, reason: check.reason };
}

return { suppressed: false, email: inputData.email };

Engagement Enrichment

Push validation health metrics into Mailchimp merge fields. Track deliverable rates and validation counts for audience-level reporting.

Zapier: Push Telemetry Data to Mailchimp Merge Fields

JAVASCRIPT
// Zapier: Push Validation Health 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 subscriber merge fields with validation health
// Next step: Mailchimp - Update Subscriber Merge Fields
//   VALTOTAL = telemetry.totals.validations
//   DELRATE = telemetry.rates.deliverable
//   BNCRATE = telemetry.rates.undeliverable
return {
  total_validations: telemetry.totals.validations,
  deliverable_rate: telemetry.rates.deliverable,
  undeliverable_rate: telemetry.rates.undeliverable
};

Bulk Audience Validation

Validate your entire Mailchimp audience before a campaign. Submit emails in batch, poll for results, and archive or tag subscribers based on outcomes.

Zapier: Bulk Validate Mailchimp Audience

JAVASCRIPT
// Zapier: Bulk Validate Mailchimp Audience Before Campaign
// Step 1: Export Mailchimp audience emails (via API or CSV export)
// Step 2: POST batch to MailOdds
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: inputData.emails, // Array of emails from Mailchimp audience
    depth: 'enhanced'
  })
});
const batch = await response.json();

// batch.job_id - poll GET /v1/validate/batch/{job_id} for results
// Then archive or tag subscribers based on validation outcomes
return { job_id: batch.job_id, count: inputData.emails.length };

Frequently Asked Questions

Troubleshooting

Need more help?

Can't find what you're looking for? We're here to help you get Mailchimp working.

Clean Your Mailchimp Audience

Get 1,000 free validations. Remove invalid subscribers and reduce bounces.