Validate contact emails to improve ActiveCampaign deliverability. Tag contacts by email quality and keep your automations targeting real addresses.
Log in to the MailOdds dashboard and copy your API key from Settings > API Keys.
Use fetch() or your preferred HTTP client to POST contact emails to api.mailodds.com/v1/validate.
Tag contacts based on the validation action field. Use tags to control automation enrollment and list segmentation.
Validate emails on contact creation. Tag as verified or invalid to control automation enrollment.
Use validation tags as automation entry conditions. Only verified contacts enter nurture sequences.
Bulk validate lists before major campaigns. Remove invalid emails to protect sender reputation.
Validate ActiveCampaign form submissions. Prevent fake emails from consuming automation steps.
Settings > Custom Fields: add "email_validation_status" (text) and "email_validation_action" (text).
Log in to the MailOdds dashboard and copy your API key from Settings > API Keys.
POST contact emails to api.mailodds.com/v1/validate. Returns status, action, and detailed sub_status.
Add "verified-email" or "invalid-email" tag based on action field.
Create AC automations triggered by validation tags for routing and segmentation.
// Validate an ActiveCampaign contact email
const contactEmail = 'user@example.com'; // From 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: contactEmail })
});
const result = await response.json();
// result.status: "deliverable", "undeliverable", "risky", "unknown"
// result.action: "accept", "reject", "uncertain"
// result.disposable: true/false
const isValid = result.action === 'accept'; // Tag ActiveCampaign contacts by email validation result
const contactEmail = 'user@example.com';
// Step 1: Validate with MailOdds
const valRes = await fetch('https://api.mailodds.com/v1/validate', {
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json'
},
body: JSON.stringify({ email: contactEmail })
});
const validation = await valRes.json();
// Step 2: Tag in ActiveCampaign based on result
// Use ActiveCampaign API to add tag:
// action === "accept" -> tag "verified-email"
// action === "reject" -> tag "invalid-email"
//
// Step 3: Update ActiveCampaign custom fields
// "email_quality" = validation.status
//
// Use tags to trigger automations:
// "invalid-email" -> remove from campaigns
// "verified-email" -> enroll in nurture sequence Receive real-time MailOdds events and update ActiveCampaign contacts automatically. Route bounces to tags, and use filtered open/click data to drive automations.
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 ActiveCampaign
const webhookEvent = 'message.bounced'; // From webhook payload
const recipientEmail = 'user@example.com';
const isBot = false;
const isMpp = false;
if (webhookEvent === '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: recipientEmail, reason: 'hard_bounce' }]
})
});
// Then tag the contact as "bounced" in ActiveCampaign via their API
}
if (webhookEvent === 'message.opened' && !isBot && !isMpp) {
// Real human open: update ActiveCampaign custom field
// "last_validated_open" = new Date().toISOString()
}
if (webhookEvent === 'message.clicked' && !isBot) {
// Real click: tag contact as "engaged-validated" in ActiveCampaign
} Keep your MailOdds suppression list in sync with ActiveCampaign. Add bounced emails to your blocklist and check suppression status before campaigns.
// Check suppression status before sending an ActiveCampaign campaign
const contactEmail = 'user@example.com';
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: contactEmail })
});
const check = await checkRes.json();
if (check.suppressed) {
// Email is on blocklist: tag as "suppressed" in ActiveCampaign
// Remove from active automations
console.log('Suppressed:', contactEmail, 'Reason:', check.reason);
} else {
console.log('Not suppressed:', contactEmail);
} Push validation health metrics into ActiveCampaign custom fields. Track deliverable rates and validation counts for internal reporting.
// Fetch validation health metrics for ActiveCampaign reporting
const response = await fetch('https://api.mailodds.com/v1/telemetry/summary', {
headers: { 'Authorization': 'Bearer YOUR_API_KEY' }
});
const telemetry = await response.json();
// Push into ActiveCampaign custom fields for internal reporting:
// "validation_total" = telemetry.totals.validations
// "deliverable_rate" = telemetry.rates.deliverable
// "bounce_rate" = telemetry.rates.undeliverable
console.log('Deliverable rate:', telemetry.rates.deliverable); Validate your entire ActiveCampaign list before a campaign. Submit emails in batch, poll for results, and tag contacts based on outcomes.
// Bulk validate an ActiveCampaign list before a campaign
// Step 1: Export AC list contacts (via ActiveCampaign API or CSV)
const listEmails = ['user1@example.com', 'user2@example.com'];
// 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: listEmails,
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
console.log('Job created:', batch.job_id, 'Emails:', listEmails.length); Beyond list cleaning, MailOdds monitors sender health, DMARC compliance, and bounce patterns for the domains you send from in ActiveCampaign.
Track DMARC authentication pass/fail rates for the domains you send from in ActiveCampaign. Get early warning when SPF or DKIM alignment issues threaten your inbox placement.
// Monitor DMARC for your ActiveCampaign 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 ActiveCampaign. Track bounce rates, complaint rates, and authentication health in one place.
// Check sender health for domains used in ActiveCampaign
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 ActiveCampaign campaign reports with MailOdds bounce analysis. Classify bounces by type and auto-suppress confirmed hard bounces to protect your reputation.
// Cross-reference ActiveCampaign bounces with MailOdds data
const acBouncedEmails = ['bounce1@example.com', 'bounce2@example.com'];
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: acBouncedEmails })
});
const analysis = await response.json();
// Classify: hard_bounce, soft_bounce, complaint
// Auto-suppress confirmed hard bounces Related: Email Deliverability Platform
Identify contacts with no engagement over a configurable window. Use the report to trigger ActiveCampaign re-engagement automations or remove stale contacts from active lists.
// Identify inactive contacts for ActiveCampaign list 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 trigger ActiveCampaign re-engagement automation Related: Email Deliverability Platform
Can't find what you're looking for? We're here to help you get ActiveCampaign working.
Get 1,000 free validations and improve your marketing automation deliverability.