MailOdds

ActiveCampaign

ActiveCampaign + MailOdds

Validate contact emails to improve ActiveCampaign deliverability. Tag contacts by email quality and keep your automations targeting real addresses.

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

Prerequisites

  • MailOdds account with API key
  • ActiveCampaign account

How to Connect

1

Get your MailOdds API key

Log in to the MailOdds dashboard and copy your API key from Settings > API Keys.

2

Call the MailOdds API

Use fetch() or your preferred HTTP client to POST contact emails to api.mailodds.com/v1/validate.

3

Use results in ActiveCampaign

Tag contacts based on the validation action field. Use tags to control automation enrollment and list segmentation.

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

1

Create Custom Fields in ActiveCampaign

Settings > Custom Fields: add "email_validation_status" (text) and "email_validation_action" (text).

2

Get Your MailOdds API Key

Log in to the MailOdds dashboard and copy your API key from Settings > API Keys.

3

Validate with MailOdds

POST contact emails to api.mailodds.com/v1/validate. Returns status, action, and detailed sub_status.

4

Tag Contact by Result

Add "verified-email" or "invalid-email" tag based on action field.

5

Build Automations on Tags

Create AC automations triggered by validation tags for routing and segmentation.

Validate Contact Email

JAVASCRIPT
// 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 Contacts by Email Quality

JAVASCRIPT
// 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

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.

Handle Webhook Events for ActiveCampaign

JAVASCRIPT
// 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
}

Suppression Sync

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

Check Suppression Before Campaign Send

JAVASCRIPT
// 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);
}

Engagement Enrichment

Push validation health metrics into ActiveCampaign custom fields. Track deliverable rates and validation counts for internal reporting.

Fetch Validation Health Metrics

JAVASCRIPT
// 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);

Bulk List Validation

Validate your entire ActiveCampaign list before a campaign. Submit emails in batch, poll for results, and tag contacts based on outcomes.

Bulk Validate Contact List

JAVASCRIPT
// 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);

Full Platform: Deliverability Monitoring

Beyond list cleaning, MailOdds monitors sender health, DMARC compliance, and bounce patterns for the domains you send from in ActiveCampaign.

DMARC Monitoring

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

JAVASCRIPT
// 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

Sender Health

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 ActiveCampaign Domains

JAVASCRIPT
// 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

Bounce Cross-Reference

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

JAVASCRIPT
// 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

Inactive Contact Report

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 ActiveCampaign Contacts

JAVASCRIPT
// 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

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.