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
-
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
-
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}
-
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
- Create Webhook Token in SkunkCRM
- 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
- Create Webhook Token in SkunkCRM
- 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
-
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
-
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
- 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
- Use test accounts with your email service
- Test subscriber actions - subscribe, unsubscribe, update profile
- Check webhook logs in both systems
- Verify contact creation in SkunkCRM
Email Deliverability Testing
- Test with real email addresses
- Check spam folders
- Monitor bounce rates
- Verify unsubscribe handling
Troubleshooting
Missing Subscribers
- Check webhook configuration - Ensure all events are selected
- Verify webhook URL - Test URL accessibility
- Review logs - Check delivery status in email service
- Field mapping - Ensure required fields are present
Duplicate Contacts
- Email deduplication - Enable automatic duplicate prevention
- Update existing - Use update actions for known subscribers
- Sync timing - Handle race conditions between systems
Sync Issues
- Rate limiting - Check API limits on email service
- Authentication - Verify webhook tokens are correct
- Data format - Ensure data formats match expected schemas
Best Practices
Data Privacy
- GDPR compliance - Handle unsubscribes and data deletion requests
- Permission tracking - Record how contacts opted in
- Data minimization - Only sync necessary contact data
Performance
- Batch processing - Handle high-volume webhook events efficiently
- Queue webhooks - Use background processing for webhook handling
- Error handling - Implement retry logic for failed webhooks
Monitoring
- Webhook health - Monitor delivery success rates
- Sync accuracy - Regular audits of contact sync accuracy
- 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.