ActiveCampaign + MailOdds
Validate contact emails to improve ActiveCampaign deliverability. Tag contacts by email quality and keep your automations targeting real addresses.
Prerequisites
- MailOdds account with API key
- ActiveCampaign account
- Zapier or Make account
How to Connect
ActiveCampaign Use Cases
New Contact Validation
Validate emails on contact creation. Tag as verified or invalid to control automation enrollment.
Automation Gate
Use validation tags as automation entry conditions. Only verified contacts enter nurture sequences.
Pre-Campaign Cleaning
Bulk validate lists before major campaigns. Remove invalid emails to protect sender reputation.
Form Submission Quality
Validate ActiveCampaign form submissions. Prevent fake emails from consuming automation steps.
Step-by-Step Setup
Create Custom Fields in ActiveCampaign
Settings > Custom Fields: add "email_validation_status" (text) and "email_validation_action" (text).
Create a Zap: New Contact
Trigger: ActiveCampaign "New Contact". Map email to validation Code step.
Validate with MailOdds
Code step calls MailOdds API. Returns status, action, and detailed sub_status.
Tag Contact by Result
Add "verified-email" or "invalid-email" tag based on action field.
Build Automations on Tags
Create AC automations triggered by validation tags for routing and segmentation.
Zapier: Validate ActiveCampaign Contact
JAVASCRIPT// Zapier Code Step - Validate ActiveCampaign Contact
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 ActiveCampaign contact
})
});
const result = await response.json();
return {
email: result.email,
status: result.status,
action: result.action,
is_valid: result.action === 'accept',
disposable: result.disposable
}; Make: ActiveCampaign Scenario
JAVASCRIPT// Make Scenario - ActiveCampaign Contact Validation
// 1. ActiveCampaign: Watch New Contacts (trigger)
// 2. HTTP Module: POST to https://api.mailodds.com/v1/validate
// Headers: Authorization: Bearer YOUR_API_KEY
// Body: { "email": "{{1.email}}" }
// 3. ActiveCampaign: Update Contact
// Custom Field "email_validation" = {{2.data.status}}
// Custom Field "email_action" = {{2.data.action}}
// 4. Router: Branch by action
// - "reject" -> ActiveCampaign: Add Tag "invalid-email"
// - "accept" -> ActiveCampaign: Add Tag "verified-email" Zapier: Tag Contacts by Email Quality
JAVASCRIPT// Zapier: Tag ActiveCampaign Contacts by Email Quality
// After validation, tag contacts for automation triggers:
//
// Step 1: Code by Zapier (validation above)
// Step 2: ActiveCampaign - Add/Remove Tag
// If is_valid = true: Add tag "verified-email"
// If is_valid = false: Add tag "invalid-email"
//
// Step 3: ActiveCampaign - Update Contact
// Custom Field "email_quality" = {{code.status}}
//
// Use tags to trigger automations:
// - "invalid-email" -> remove from campaigns
// - "verified-email" -> enroll in nurture sequence Webhook Event Handling
Receive real-time MailOdds events and update ActiveCampaign contacts automatically. Route bounces to tags, and use filtered open/click data to drive automations.
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 ActiveCampaign
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' }]
})
});
// Tag contact in ActiveCampaign
// Next Zapier step: ActiveCampaign - Add Tag "bounced"
}
if (event === 'message.opened' && !inputData.is_bot && !inputData.is_mpp) {
// Real human open - update ActiveCampaign custom field
// Next step: ActiveCampaign - Update Contact
// Custom Field "last_validated_open" = new Date().toISOString()
}
if (event === 'message.clicked' && !inputData.is_bot) {
// Real click - update engagement score
// Next step: ActiveCampaign - 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 ActiveCampaign. Add bounced emails to your blocklist and check suppression status before campaigns.
Zapier: Sync Suppression List with ActiveCampaign
JAVASCRIPT// Zapier: Sync MailOdds Suppression with ActiveCampaign
// Step 1: Check if email is suppressed before campaign send
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 - tag in ActiveCampaign
// Next step: ActiveCampaign - Add Tag "suppressed"
// Next step: ActiveCampaign - Remove from Automation
return { suppressed: true, email: inputData.email, reason: check.reason };
}
return { suppressed: false, email: inputData.email }; Engagement Enrichment
Push validation health metrics into ActiveCampaign custom fields. Track deliverable rates and validation counts for internal reporting.
Zapier: Push Telemetry Data to ActiveCampaign
JAVASCRIPT// Zapier: Push Validation Health to ActiveCampaign
const response = await fetch('https://api.mailodds.com/v1/telemetry/summary', {
headers: { 'Authorization': 'Bearer YOUR_API_KEY' }
});
const telemetry = await response.json();
// Update ActiveCampaign contact with account-level validation health
// Next step: ActiveCampaign - Update Contact Custom Fields
// "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 ActiveCampaign list before a campaign. Submit emails in batch, poll for results, and tag contacts based on outcomes.
Zapier: Bulk Validate ActiveCampaign List
JAVASCRIPT// Zapier: Bulk Validate ActiveCampaign List Before Campaign
// Step 1: Export AC list contacts (via ActiveCampaign 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 AC list
depth: 'enhanced'
})
});
const batch = await response.json();
// batch.job_id - poll GET /v1/validate/batch/{job_id} for results
// Then tag contacts 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 ActiveCampaign working.
Clean Your ActiveCampaign Lists
Get 1,000 free validations and improve your marketing automation deliverability.