Email Marketing Integrations

Connect your email marketing platforms to SkunkCRM to sync subscribers, track email engagement, and create unified customer profiles. Perfect for nurturing leads and tracking email performance.

Mailchimp Integration

Mailchimp provides webhooks for list events, making it easy to sync with SkunkCRM.

Setup Steps

  1. Create Webhook Token in SkunkCRM:

    • Go to SkunkCRM → Webhooks
    • In the Incoming Webhook Tokens section, click "Create Token"
    • Enter token name: "Mailchimp Integration"
    • Copy the complete webhook URL provided
  2. Configure Mailchimp Webhooks:

    • Log into your Mailchimp account
    • Go to Audience → Settings → Webhooks
    • Click "Create New Webhook"
    • Callback URL: https://yoursite.com/wp-json/skunkcrm/v1/webhook/{your-token}
  3. Select Events:

    • Subscribes - New subscriber added
    • Unsubscribes - Subscriber removed
    • Profile Updates - Subscriber info changed
    • Email Address Changes - Email updated
    • Cleaned - Email bounced/invalid

Webhook Processing

SkunkCRM automatically processes Mailchimp webhook events:

New Subscriber:

{
  "action": "create_contact",
  "data": {
    "name": "John Doe",
    "email": "john@example.com",
    "source": "mailchimp",
    "status": "subscriber",
    "mailchimp_list_id": "abc123",
    "subscribed_at": "2025-01-09 14:30:00"
  }
}

Profile Update:

{
  "action": "update_contact",
  "data": {
    "email": "john@example.com",
    "name": "John Smith",
    "phone": "+1234567890",
    "source": "mailchimp"
  }
}

Custom Mailchimp Handler

For advanced processing, create a custom webhook handler:

// Mailchimp webhook handler
add_action('rest_api_init', function() {
    register_rest_route('your-plugin/v1', '/mailchimp-webhook', [
        'methods' => 'POST',
        'callback' => 'handle_mailchimp_webhook'
    ]);
});

function handle_mailchimp_webhook($request) {
    $data = $request->get_json_params();
    
    switch ($data['type']) {
        case 'subscribe':
            $subscriber = $data['data'];
            
            $contact_data = [
                'contact' => [
                    'name' => $subscriber['merges']['FNAME'] . ' ' . $subscriber['merges']['LNAME'],
                    'email' => $subscriber['email'],
                    'source' => 'mailchimp',
                    'status' => 'subscriber',
                    'mailchimp_list_id' => $subscriber['list_id'],
                    'tags' => ['newsletter_subscriber']
                ]
            ];
            
            // Send to SkunkCRM
            sendToSkunkCRM($contact_data);
            break;
            
        case 'unsubscribe':
            $subscriber = $data['data'];
            
            $contact_data = [
                'action' => 'update_contact',
                'data' => [
                    'email' => $subscriber['email'],
                    'status' => 'unsubscribed',
                    'unsubscribed_at' => date('Y-m-d H:i:s')
                ]
            ];
            
            sendToSkunkCRM($contact_data);
            break;
    }
    
    return new WP_REST_Response(['status' => 'success'], 200);
}

ConvertKit Integration

ConvertKit offers webhooks for subscriber events and form submissions.

Setup Steps

  1. Create Webhook Token in SkunkCRM
  2. Configure ConvertKit Webhooks:
    • Go to ConvertKit → Account Settings → Webhooks
    • Add Webhook URL: https://yoursite.com/wp-json/skunkcrm/v1/webhook/{your-token}
    • Select Events: Subscriber activated, form subscribed, tag added

Webhook Events

Subscriber Activated:

{
  "action": "create_contact",
  "data": {
    "name": "Jane Smith",
    "email": "jane@example.com",
    "source": "convertkit",
    "status": "subscriber",
    "convertkit_subscriber_id": 12345
  }
}

Form Subscription:

{
  "action": "create_contact",
  "data": {
    "name": "John Doe",
    "email": "john@example.com",
    "source": "convertkit",
    "form_name": "Lead Magnet Download",
    "convertkit_form_id": 678
  }
}

ConvertKit Custom Fields

Map ConvertKit custom fields to SkunkCRM:

// ConvertKit webhook handler
function process_convertkit_webhook($data) {
    if ($data['event'] === 'subscriber.subscriber_activate') {
        $subscriber = $data['subscriber'];
        
        $contact_data = [
            'contact' => [
                'name' => $subscriber['first_name'] . ' ' . $subscriber['last_name'],
                'email' => $subscriber['email_address'],
                'source' => 'convertkit',
                'convertkit_id' => $subscriber['id']
            ]
        ];
        
        // Map custom fields
        if (!empty($subscriber['fields'])) {
            foreach ($subscriber['fields'] as $field_name => $field_value) {
                $contact_data['contact']['custom_' . $field_name] = $field_value;
            }
        }
        
        sendToSkunkCRM($contact_data);
    }
}

ActiveCampaign Integration

ActiveCampaign provides comprehensive webhook support for contact and campaign events.

Setup Process

  1. Create Webhook Token in SkunkCRM
  2. Configure ActiveCampaign Webhooks:
    • Go to ActiveCampaign → Settings → Developer
    • Add Webhook: https://yoursite.com/wp-json/skunkcrm/v1/webhook/{your-token}
    • Events: Contact added, updated, tagged

Event Processing

Contact Added:

{
  "action": "create_contact",
  "data": {
    "name": "Sarah Johnson",
    "email": "sarah@example.com",
    "phone": "+1234567890",
    "source": "activecampaign",
    "activecampaign_id": 789
  }
}

Contact Tagged:

{
  "action": "update_contact",
  "data": {
    "email": "sarah@example.com",
    "tags": ["high_value_lead"],
    "source": "activecampaign"
  }
}

Constant Contact Integration

Constant Contact supports webhooks for account activity.

Configuration

  1. Create Webhook in Constant Contact:

    • Go to Account → Webhooks
    • Callback URL: https://yoursite.com/wp-json/skunkcrm/v1/webhook/{your-token}
    • Topic: contact.created, contact.updated
  2. Process Events:

function handle_constant_contact_webhook($data) {
    if ($data['topic'] === 'contact.created') {
        $contact = $data['contact'];
        
        $contact_data = [
            'contact' => [
                'name' => $contact['first_name'] . ' ' . $contact['last_name'],
                'email' => $contact['email_addresses'][0]['email_address'],
                'source' => 'constant_contact',
                'cc_contact_id' => $contact['contact_id']
            ]
        ];
        
        sendToSkunkCRM($contact_data);
    }
}

Drip Integration

Drip offers webhooks for subscriber lifecycle events.

Setup

  1. Configure Drip Webhooks:
    • Go to Drip → Settings → Webhooks
    • Add Webhook: https://yoursite.com/wp-json/skunkcrm/v1/webhook/{your-token}
    • Events: Subscriber created, workflow completed

Event Handling

Subscriber Created:

{
  "action": "create_contact",
  "data": {
    "email": "user@example.com",
    "name": "New Subscriber",
    "source": "drip",
    "drip_subscriber_id": "abc123",
    "custom_fields": {
      "lead_score": 50,
      "interest": "webinar"
    }
  }
}

Email Campaign Tracking

Email Opens and Clicks

Track email engagement from your email service provider:

// Email engagement webhook handler
function handle_email_engagement($data) {
    switch ($data['event']) {
        case 'email_opened':
            $engagement_data = [
                'action' => 'create_activity',
                'data' => [
                    'contact_email' => $data['email'],
                    'type' => 'email_opened',
                    'content' => 'Opened email: ' . $data['campaign_name'],
                    'source' => 'email_service'
                ]
            ];
            break;
            
        case 'email_clicked':
            $engagement_data = [
                'action' => 'create_activity',
                'data' => [
                    'contact_email' => $data['email'],
                    'type' => 'email_clicked',
                    'content' => 'Clicked link: ' . $data['url'],
                    'source' => 'email_service'
                ]
            ];
            break;
    }
    
    sendToSkunkCRM($engagement_data);
}

Bounce and Unsubscribe Handling

// Handle email bounces and unsubscribes
function handle_email_status($data) {
    switch ($data['event']) {
        case 'email_bounced':
            $status_data = [
                'action' => 'update_contact',
                'data' => [
                    'email' => $data['email'],
                    'email_status' => 'bounced',
                    'notes' => 'Email bounced: ' . $data['reason']
                ]
            ];
            break;
            
        case 'unsubscribed':
            $status_data = [
                'action' => 'update_contact',
                'data' => [
                    'email' => $data['email'],
                    'email_status' => 'unsubscribed',
                    'status' => 'unsubscribed',
                    'unsubscribed_at' => date('Y-m-d H:i:s')
                ]
            ];
            break;
    }
    
    sendToSkunkCRM($status_data);
}

Bi-directional Sync

Send SkunkCRM Contacts to Email Service

Use SkunkCRM outgoing webhooks to sync contacts to your email service:

// Send new SkunkCRM contacts to Mailchimp
add_action('skunkcrm_contact_created', function($contact) {
    if ($contact['email'] && $contact['email_status'] !== 'unsubscribed') {
        
        // Add to Mailchimp list
        $mailchimp_data = [
            'email_address' => $contact['email'],
            'status' => 'subscribed',
            'merge_fields' => [
                'FNAME' => $contact['first_name'],
                'LNAME' => $contact['last_name'],
                'PHONE' => $contact['phone'],
                'COMPANY' => $contact['company']
            ]
        ];
        
        // Send to Mailchimp API
        addToMailchimpList($mailchimp_data);
    }
});

Segmentation and Tagging

Automatic Tagging Based on Behavior

// Tag contacts based on email engagement
function tag_engaged_contacts($data) {
    if ($data['event'] === 'email_clicked') {
        $tag_data = [
            'action' => 'add_tag',
            'data' => [
                'contact_email' => $data['email'],
                'tag' => 'email_engaged'
            ]
        ];
        
        sendToSkunkCRM($tag_data);
    }
    
    // Tag high-engagement contacts
    $click_count = getContactClickCount($data['email']);
    if ($click_count >= 5) {
        $tag_data = [
            'action' => 'add_tag',
            'data' => [
                'contact_email' => $data['email'],
                'tag' => 'highly_engaged'
            ]
        ];
        
        sendToSkunkCRM($tag_data);
    }
}

Testing Email Integrations

Webhook Testing

  1. Use test accounts with your email service
  2. Test subscriber actions - subscribe, unsubscribe, update profile
  3. Check webhook logs in both systems
  4. Verify contact creation in SkunkCRM

Email Deliverability Testing

  1. Test with real email addresses
  2. Check spam folders
  3. Monitor bounce rates
  4. Verify unsubscribe handling

Troubleshooting

Missing Subscribers

  1. Check webhook configuration - Ensure all events are selected
  2. Verify webhook URL - Test URL accessibility
  3. Review logs - Check delivery status in email service
  4. Field mapping - Ensure required fields are present

Duplicate Contacts

  1. Email deduplication - Enable automatic duplicate prevention
  2. Update existing - Use update actions for known subscribers
  3. Sync timing - Handle race conditions between systems

Sync Issues

  1. Rate limiting - Check API limits on email service
  2. Authentication - Verify webhook tokens are correct
  3. Data format - Ensure data formats match expected schemas

Best Practices

Data Privacy

  1. GDPR compliance - Handle unsubscribes and data deletion requests
  2. Permission tracking - Record how contacts opted in
  3. Data minimization - Only sync necessary contact data

Performance

  1. Batch processing - Handle high-volume webhook events efficiently
  2. Queue webhooks - Use background processing for webhook handling
  3. Error handling - Implement retry logic for failed webhooks

Monitoring

  1. Webhook health - Monitor delivery success rates
  2. Sync accuracy - Regular audits of contact sync accuracy
  3. Performance metrics - Track webhook processing times

Next Steps

  • Test your integration - Subscribe/unsubscribe to verify sync works
  • Set up monitoring - Watch webhook delivery logs
  • Create segments - Use SkunkCRM tags and segments for email targeting
  • Automate workflows - Set up SkunkCRM automations based on email engagement

::rest-api-banner::

Need help with an email service not listed here? Check our incoming webhooks guide for general webhook setup instructions.

Was this page helpful?