Save Big: Bundle all Skunk products and save up to 57%

Docs/Integrations/Email Marketing

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:

json
1{
2  "action": "create_contact",
3  "data": {
4    "name": "John Doe",
5    "email": "john@example.com",
6    "source": "mailchimp",
7    "status": "subscriber",
8    "mailchimp_list_id": "abc123",
9    "subscribed_at": "2025-01-09 14:30:00"
10  }
11}

Profile Update:

json
1{
2  "action": "update_contact",
3  "data": {
4    "email": "john@example.com",
5    "name": "John Smith",
6    "phone": "+1234567890",
7    "source": "mailchimp"
8  }
9}

Custom Mailchimp Handler

For advanced processing, create a custom webhook handler:

functions.phpphp
1// Mailchimp webhook handler
2add_action('rest_api_init', function() {
3    register_rest_route('your-plugin/v1', '/mailchimp-webhook', [
4        'methods' => 'POST',
5        'callback' => 'handle_mailchimp_webhook'
6    ]);
7});
8
9function handle_mailchimp_webhook($request) {
10    $data = $request->get_json_params();
11    
12    switch ($data['type']) {
13        case 'subscribe':
14            $subscriber = $data['data'];
15            
16            $contact_data = [
17                'contact' => [
18                    'name' => $subscriber['merges']['FNAME'] . ' ' . $subscriber['merges']['LNAME'],
19                    'email' => $subscriber['email'],
20                    'source' => 'mailchimp',
21                    'status' => 'subscriber',
22                    'mailchimp_list_id' => $subscriber['list_id'],
23                    'tags' => ['newsletter_subscriber']
24                ]
25            ];
26            
27            // Send to SkunkCRM
28            sendToSkunkCRM($contact_data);
29            break;
30            
31        case 'unsubscribe':
32            $subscriber = $data['data'];
33            
34            $contact_data = [
35                'action' => 'update_contact',
36                'data' => [
37                    'email' => $subscriber['email'],
38                    'status' => 'unsubscribed',
39                    'unsubscribed_at' => date('Y-m-d H:i:s')
40                ]
41            ];
42            
43            sendToSkunkCRM($contact_data);
44            break;
45    }
46    
47    return new WP_REST_Response(['status' => 'success'], 200);
48}

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:

json
1{
2  "action": "create_contact",
3  "data": {
4    "name": "Jane Smith",
5    "email": "jane@example.com",
6    "source": "convertkit",
7    "status": "subscriber",
8    "convertkit_subscriber_id": 12345
9  }
10}

Form Subscription:

json
1{
2  "action": "create_contact",
3  "data": {
4    "name": "John Doe",
5    "email": "john@example.com",
6    "source": "convertkit",
7    "form_name": "Lead Magnet Download",
8    "convertkit_form_id": 678
9  }
10}

ConvertKit Custom Fields

Map ConvertKit custom fields to SkunkCRM:

functions.phpphp
1// ConvertKit webhook handler
2function process_convertkit_webhook($data) {
3    if ($data['event'] === 'subscriber.subscriber_activate') {
4        $subscriber = $data['subscriber'];
5        
6        $contact_data = [
7            'contact' => [
8                'name' => $subscriber['first_name'] . ' ' . $subscriber['last_name'],
9                'email' => $subscriber['email_address'],
10                'source' => 'convertkit',
11                'convertkit_id' => $subscriber['id']
12            ]
13        ];
14        
15        // Map custom fields
16        if (!empty($subscriber['fields'])) {
17            foreach ($subscriber['fields'] as $field_name => $field_value) {
18                $contact_data['contact']['custom_' . $field_name] = $field_value;
19            }
20        }
21        
22        sendToSkunkCRM($contact_data);
23    }
24}

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:

json
1{
2  "action": "create_contact",
3  "data": {
4    "name": "Sarah Johnson",
5    "email": "sarah@example.com",
6    "phone": "+1234567890",
7    "source": "activecampaign",
8    "activecampaign_id": 789
9  }
10}

Contact Tagged:

json
1{
2  "action": "update_contact",
3  "data": {
4    "email": "sarah@example.com",
5    "tags": ["high_value_lead"],
6    "source": "activecampaign"
7  }
8}

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:

functions.phpphp
1function handle_constant_contact_webhook($data) {
2    if ($data['topic'] === 'contact.created') {
3        $contact = $data['contact'];
4        
5        $contact_data = [
6            'contact' => [
7                'name' => $contact['first_name'] . ' ' . $contact['last_name'],
8                'email' => $contact['email_addresses'][0]['email_address'],
9                'source' => 'constant_contact',
10                'cc_contact_id' => $contact['contact_id']
11            ]
12        ];
13        
14        sendToSkunkCRM($contact_data);
15    }
16}

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:

json
1{
2  "action": "create_contact",
3  "data": {
4    "email": "user@example.com",
5    "name": "New Subscriber",
6    "source": "drip",
7    "drip_subscriber_id": "abc123",
8    "custom_fields": {
9      "lead_score": 50,
10      "interest": "webinar"
11    }
12  }
13}

Email Campaign Tracking

Email Opens and Clicks

Track email engagement from your email service provider:

functions.phpphp
1// Email engagement webhook handler
2function handle_email_engagement($data) {
3    switch ($data['event']) {
4        case 'email_opened':
5            $engagement_data = [
6                'action' => 'create_activity',
7                'data' => [
8                    'contact_email' => $data['email'],
9                    'type' => 'email_opened',
10                    'content' => 'Opened email: ' . $data['campaign_name'],
11                    'source' => 'email_service'
12                ]
13            ];
14            break;
15            
16        case 'email_clicked':
17            $engagement_data = [
18                'action' => 'create_activity',
19                'data' => [
20                    'contact_email' => $data['email'],
21                    'type' => 'email_clicked',
22                    'content' => 'Clicked link: ' . $data['url'],
23                    'source' => 'email_service'
24                ]
25            ];
26            break;
27    }
28    
29    sendToSkunkCRM($engagement_data);
30}

Bounce and Unsubscribe Handling

functions.phpphp
1// Handle email bounces and unsubscribes
2function handle_email_status($data) {
3    switch ($data['event']) {
4        case 'email_bounced':
5            $status_data = [
6                'action' => 'update_contact',
7                'data' => [
8                    'email' => $data['email'],
9                    'email_status' => 'bounced',
10                    'notes' => 'Email bounced: ' . $data['reason']
11                ]
12            ];
13            break;
14            
15        case 'unsubscribed':
16            $status_data = [
17                'action' => 'update_contact',
18                'data' => [
19                    'email' => $data['email'],
20                    'email_status' => 'unsubscribed',
21                    'status' => 'unsubscribed',
22                    'unsubscribed_at' => date('Y-m-d H:i:s')
23                ]
24            ];
25            break;
26    }
27    
28    sendToSkunkCRM($status_data);
29}

Bi-directional Sync

Send SkunkCRM Contacts to Email Service

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

functions.phpphp
1// Send new SkunkCRM contacts to Mailchimp
2add_action('skunkcrm_contact_created', function($contact) {
3    if ($contact['email'] && $contact['email_status'] !== 'unsubscribed') {
4        
5        // Add to Mailchimp list
6        $mailchimp_data = [
7            'email_address' => $contact['email'],
8            'status' => 'subscribed',
9            'merge_fields' => [
10                'FNAME' => $contact['first_name'],
11                'LNAME' => $contact['last_name'],
12                'PHONE' => $contact['phone'],
13                'COMPANY' => $contact['company']
14            ]
15        ];
16        
17        // Send to Mailchimp API
18        addToMailchimpList($mailchimp_data);
19    }
20});

Segmentation and Tagging

Automatic Tagging Based on Behavior

functions.phpphp
1// Tag contacts based on email engagement
2function tag_engaged_contacts($data) {
3    if ($data['event'] === 'email_clicked') {
4        $tag_data = [
5            'action' => 'add_tag',
6            'data' => [
7                'contact_email' => $data['email'],
8                'tag' => 'email_engaged'
9            ]
10        ];
11        
12        sendToSkunkCRM($tag_data);
13    }
14    
15    // Tag high-engagement contacts
16    $click_count = getContactClickCount($data['email']);
17    if ($click_count >= 5) {
18        $tag_data = [
19            'action' => 'add_tag',
20            'data' => [
21                'contact_email' => $data['email'],
22                'tag' => 'highly_engaged'
23            ]
24        ];
25        
26        sendToSkunkCRM($tag_data);
27    }
28}

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

Powerful REST API Ready for Integration

SkunkCRM provides a comprehensive REST API designed for seamless integrations and external access. Build powerful integrations with full CRUD operations, secure authentication, and real-time webhook support.

🔧
Full CRUD Operations

Complete control over contacts, deals, and activities

🔐
Secure Authentication

WordPress Application Passwords with permission controls

Rate Limiting

Built-in protection and performance optimization

📡
JSON API

Clean, RESTful endpoints with consistent responses

🎯
Webhook Support

Real-time integrations and event notifications

📖 Explore Complete API Documentation →

Get started with examples, authentication guides, and interactive endpoint testing.

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

Was this page helpful?