WPForms → ActiveCampaign Integration Guide

I see this broken in about 30% of the WordPress setups I audit. Either the integration was set up wrong and leads aren’t syncing, or worse — they’re creating duplicate contacts because someone didn’t understand how ActiveCampaign handles email deduplication. The worst case I’ve seen had 6,000 duplicate contacts because they were using Zapier without proper matching rules.

What You’ll Have Working By The End

Prerequisites

Step 1: Set Up the Native WPForms → ActiveCampaign Integration

WPForms Pro includes a native ActiveCampaign addon that’s more reliable than Zapier for most use cases. This is what I recommend 90% of the time.

In your WordPress admin, go to WPForms → Addons and install the ActiveCampaign addon if you haven’t already.

Navigate to WPForms → Settings → Integrations → ActiveCampaign. You’ll need your ActiveCampaign API credentials:

  1. In ActiveCampaign, go to Settings → Developer
  2. Copy your API URL (looks like https://youraccountname.api-us1.com)
  3. Copy your API Key

Back in WordPress, paste both credentials and hit Connect.

Now edit your form and go to Settings → Marketing → ActiveCampaign:

For custom field mapping, click Show Advanced Options:

The conditional logic section lets you only send certain submissions — useful if you have multi-purpose forms.

Step 2: Alternative Setup Using Zapier

If you’re on WPForms Lite or need more complex automation, use Zapier. I’ve set this up probably 200+ times.

Create a new Zap with WPForms as the trigger:

For the action, choose ActiveCampaign:

Critical mapping notes I wish more people knew:

Step 3: Webhook + API Approach (Advanced)

For maximum control, especially if you need custom logic or have complex forms, use webhooks. This requires some development work but gives you complete flexibility.

In WPForms, go to Settings → Marketing → Webhooks and add:

Here’s the PHP code for your webhook handler:

<?php
// Handle WPForms webhook
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $webhook_data = json_decode(file_get_contents('php://input'), true);
    
    // Extract form data
    $email = $webhook_data['fields'][0]['value']; // Adjust field ID
    $name = $webhook_data['fields'][1]['value'];  // Adjust field ID
    
    // ActiveCampaign API call
    $ac_data = [
        'contact' => [
            'email' => $email,
            'firstName' => $name,
            'fieldValues' => [
                ['field' => '1', 'value' => 'Website Lead'] // Custom field
            ]
        ]
    ];
    
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, 'https://youraccountname.api-us1.com/api/3/contacts');
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($ac_data));
    curl_setopt($ch, CURLOPT_HTTPHEADER, [
        'Content-Type: application/json',
        'Api-Token: YOUR_API_TOKEN'
    ]);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    
    $response = curl_exec($ch);
    curl_close($ch);
    
    // Log for debugging
    error_log('ActiveCampaign Response: ' . $response);
}
?>

Step 4: Set Up ActiveCampaign Automations

Once contacts are syncing, set up automations to handle new leads:

  1. In ActiveCampaign, go to Automations → New Automation
  2. Choose “Start from scratch”
  3. Set trigger to “Subscribes to list” or “Tag is added” (depending on your setup)
  4. Add actions like:
    • Send welcome email
    • Add to specific campaign sequences
    • Assign to sales rep
    • Create deal record

For form-specific automations, use tags. I usually tag with the form name like “Contact Page Form” so you can create targeted follow-up sequences.

Testing & Verification

Submit a test form with a unique email address (like test+wpforms@yourdomain.com).

Check in WPForms:

Check in ActiveCampaign:

Check automation triggers:

Acceptable sync delays:

If it takes longer than 15 minutes with any method, something’s broken.

Troubleshooting

Submissions aren’t appearing in ActiveCampaign at all → Check your API credentials first. In WPForms settings, disconnect and reconnect your ActiveCampaign integration. For Zapier, test your trigger step again.

Contact is created but custom fields are empty → ActiveCampaign custom field names are case-sensitive and must match exactly. Go to Lists → Manage Fields in ActiveCampaign to copy the exact field names, then update your mapping.

Duplicate contacts being created → You’re probably using “Create Contact” instead of “Create or Update Contact” in Zapier, or your native integration isn’t handling email deduplication. ActiveCampaign deduplicates by email address, so this usually means the email mapping is wrong.

Form submissions work but don’t trigger automations → Check that your automation trigger matches how contacts are being added. If you’re tagging contacts, make sure your automation triggers on that specific tag, not just list subscription.

Zapier says “Contact created” but nothing appears in ActiveCampaign → This usually means you’re sending to a list that doesn’t exist or your contact doesn’t meet list requirements. Check your list settings in ActiveCampaign for any restrictions.

Some form fields aren’t syncing → WPForms field IDs sometimes change when you edit forms. Check the webhook payload or Zapier test data to see the actual field structure, then update your mapping accordingly.

What To Do Next

Now that your basic integration is working, consider these related setups:

This guide is part of the ActiveCampaign Integration Hub — covering all the ways to get lead data into ActiveCampaign from forms, ads, and other tools.