Klaviyo + MailOdds
Validate subscriber emails to reduce Klaviyo bounces and protect sender reputation. Auto-suppress invalid addresses and clean lists before campaigns.
Prerequisites
- MailOdds account with API key
- Klaviyo account with private API key
- Zapier or Make account
How to Connect
Klaviyo Use Cases
Subscriber Validation
Validate emails when new profiles are added. Auto-suppress invalid addresses before they receive campaigns.
Pre-Campaign List Clean
Bulk validate a list before a major send. Remove bounces and protect your sender reputation.
Segment by Email Quality
Create Klaviyo segments based on validation status. Send to verified-only lists for critical campaigns.
Bounce Rate Reduction
Keep Klaviyo bounce rates under 0.5% by removing invalid emails proactively instead of after they bounce.
Step-by-Step Setup
Get Your API Keys
MailOdds API key from dashboard. Klaviyo private API key from Settings > API Keys.
Create Zap: New Klaviyo Subscriber
Trigger on "New Subscriber" in Klaviyo. Map the email field to the validation Code step.
Add Validation Code Step
Paste the MailOdds validation code. Returns status, action, and detailed sub_status.
Add Filter: Only Invalid Emails
Filter step: continue only if is_valid = false. This routes invalid emails to suppression.
Suppress Invalid Profiles
Use Klaviyo "Suppress Profile" action. Invalid emails will not receive future campaigns.
Zapier: Validate Klaviyo Subscriber
JAVASCRIPT// Zapier Code Step - Validate Klaviyo Profile 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 Klaviyo profile email
})
});
const result = await response.json();
return {
email: result.email,
status: result.status,
action: result.action,
is_valid: result.action === 'accept',
is_risky: result.action === 'accept_with_caution'
}; Make: Klaviyo List Validation
JAVASCRIPT// Make Scenario - Klaviyo List Validation
// 1. Klaviyo: Watch New Profiles (or use scheduled trigger)
// 2. HTTP Module: POST to https://api.mailodds.com/v1/validate
// Headers: Authorization: Bearer YOUR_API_KEY
// Body: { "email": "{{1.email}}" }
// 3. Router: Branch by action
// - "reject" -> Klaviyo: Suppress Profile
// - "accept_with_caution" -> Klaviyo: Add to "Risky" segment
// - "accept" -> Continue (no action needed)
// 4. Klaviyo: Update Profile Properties
// "$email_validation" = {{2.data.status}} Zapier: Auto-Suppress Invalid Emails
JAVASCRIPT// Zapier: Suppress Invalid Emails in Klaviyo
// After validation, suppress emails that fail verification:
//
// Step 1: Code by Zapier (validation above)
// Step 2: Filter - Only continue if is_valid = false
// Step 3: Klaviyo - Suppress Profile
// Email: {{trigger.email}}
//
// This prevents invalid emails from receiving future campaigns,
// protecting your sender reputation and reducing bounce rates. Webhook Event Handling
Receive real-time MailOdds events and update Klaviyo profiles automatically. Handle bounces, opens, and clicks to keep engagement data accurate.
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 Klaviyo
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' }]
})
});
// Suppress profile in Klaviyo
// Next Zapier step: Klaviyo - Suppress Profile (email)
}
if (event === 'message.opened' && !inputData.is_bot && !inputData.is_mpp) {
// Real human open - update Klaviyo profile engagement
// Next step: Klaviyo - Update Profile Property
// "$last_validated_open" = new Date().toISOString()
}
return { event, email, is_bot: inputData.is_bot, is_mpp: inputData.is_mpp }; Suppression Sync
Keep your MailOdds suppression list in sync with Klaviyo. Add bounced emails to your blocklist and check suppression status before sending campaigns.
Zapier: Sync Suppression List with Klaviyo
JAVASCRIPT// Zapier: Sync MailOdds Suppression List with Klaviyo
// 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 - suppress in Klaviyo too
// Next step: Klaviyo - Suppress Profile
return { suppressed: true, email: inputData.email, reason: check.reason };
}
return { suppressed: false, email: inputData.email }; Engagement Enrichment
Push validation health metrics into Klaviyo profile properties. Track deliverable rates and validation counts as custom profile data for reporting.
Zapier: Push Telemetry Data to Klaviyo Profiles
JAVASCRIPT// Zapier: Push Validation Health to Klaviyo Profile
const response = await fetch('https://api.mailodds.com/v1/telemetry/summary', {
headers: { 'Authorization': 'Bearer YOUR_API_KEY' }
});
const telemetry = await response.json();
// Update a Klaviyo profile with account-level validation health
// Next step: Klaviyo - Update Profile Properties
// "$validation_total" = telemetry.totals.validations
// "$deliverable_rate" = telemetry.rates.deliverable
// "$bounce_rate" = telemetry.rates.undeliverable
return {
total_validations: telemetry.totals.validations,
deliverable_rate: telemetry.rates.deliverable,
undeliverable_rate: telemetry.rates.undeliverable
}; Bulk List Validation
Validate your entire Klaviyo list before a campaign. Submit emails in batch, poll for results, and suppress or tag profiles based on outcomes.
Zapier: Bulk Validate Klaviyo List
JAVASCRIPT// Zapier: Bulk Validate Klaviyo List Before Campaign
// Step 1: Export Klaviyo list emails (via Klaviyo API or CSV)
// 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 Klaviyo list
depth: 'enhanced'
})
});
const batch = await response.json();
// batch.job_id - use to poll for results
// GET /v1/validate/batch/{job_id} for status and results
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 Klaviyo working.
Improve Your Klaviyo Deliverability
Get 1,000 free validations. Clean your subscriber list and reduce bounces.