ActiveCampaign combines email marketing, marketing automation, and CRM in one platform. Connecting InstantDM to ActiveCampaign automatically creates contacts from Instagram DM leads, adds them to lists, applies tags, and triggers automation workflows - giving you a complete marketing pipeline from Instagram comment to email sequence.
Why Connect InstantDM to ActiveCampaign?
- Powerful automations - ActiveCampaign's automation builder is one of the most advanced in email marketing
- Built-in CRM - track deals alongside email engagement
- Contact scoring - score leads based on Instagram interactions and email engagement
- Conditional content - send different email content based on DM flow responses
- Site tracking - see what Instagram leads do on your website after clicking email links
Common Use Cases
- Add Instagram DM leads to a list and trigger a welcome automation
- Score leads based on which flow they completed (high-intent vs. freebie)
- Create deals in ActiveCampaign's CRM from Instagram leads
- Tag contacts by campaign, interest, or flow for segmented email sequences
- Trigger different automations based on DM flow responses
What You'll Need
| Requirement | Details |
|---|---|
| InstantDM account | Trendsetter, Trendsetter Pro, or any Multi plan |
| ActiveCampaign account | Any plan (Lite, Plus, Professional, or Enterprise) |
| InstantDM API key | Found at Settings → API in your InstantDM dashboard |
| ActiveCampaign API URL and key | Found at Settings → Developer in ActiveCampaign |
Method 1: Via Make.com (Recommended)
Step 1: Set Up the Webhook
Follow Steps 1-4 in the Make.com integration guide to create a webhook scenario.
Step 2: Add an ActiveCampaign Module
- After the webhook trigger, add a Filter:
eventequalsflow_completed. - Click "+" and search for ActiveCampaign.
- Select Create/Update a Contact.
- Connect your ActiveCampaign account.
Step 3: Map Fields
| ActiveCampaign Field | Make.com Mapping |
|---|---|
{{data.response_variables.email}} | |
| First Name | {{data.response_variables.full_name}} |
| Phone | {{data.response_variables.phone}} |
| List | Select your target list |
| Tags | instagram-lead, {{data.flow_name}} |
Step 4: Add to an Automation (Optional)
- After the contact module, add ActiveCampaign → Add Contact to Automation.
- Select the automation (e.g., "Instagram Lead Welcome Sequence").
Step 5: Test and Activate
- Run once in Make.com.
- Trigger a test event from InstantDM.
- Check ActiveCampaign - the contact should appear with tags and list membership.
- Activate the scenario.
Method 2: Via Zapier
Step 1: Create the Zap
Follow the Zapier integration guide to set up a webhook trigger.
Step 2: Add ActiveCampaign Action
- Add a Filter:
eventexactly matchesflow_completed. - Add ActiveCampaign → Create or Update Contact.
- Connect your ActiveCampaign account.
- Map email, name, phone, list, and tags.
Step 3: Test and Activate
- Test with sample data.
- Verify in ActiveCampaign.
- Turn the Zap on.
Method 3: Direct API Integration
Step 1: Get Your API Credentials
- In ActiveCampaign, go to Settings → Developer.
- Copy your API URL (e.g.,
https://yourname.api-us1.com) and API Key.
Step 2: Build a Webhook Receiver
const express = require('express');
const app = express();
app.use(express.json());
const AC_API_URL = process.env.ACTIVECAMPAIGN_API_URL;
const AC_API_KEY = process.env.ACTIVECAMPAIGN_API_KEY;
async function acFetch(endpoint, method, body) {
const response = await fetch(`${AC_API_URL}/api/3/${endpoint}`, {
method,
headers: {
'Api-Token': AC_API_KEY,
'Content-Type': 'application/json',
},
body: body ? JSON.stringify(body) : undefined,
});
return response.json();
}
app.post('/instantdm-webhook', async (req, res) => {
const { event, data } = req.body;
if (event !== 'flow_completed' || !data.response_variables?.email) {
return res.status(200).json({ status: 'skipped' });
}
try {
// Step 1: Create or update contact
const contact = await acFetch('contact/sync', 'POST', {
contact: {
email: data.response_variables.email,
firstName: data.response_variables.full_name || '',
phone: data.response_variables.phone || '',
fieldValues: [
{ field: '1', value: data.username }, // Custom field ID for Instagram
{ field: '2', value: data.flow_name }, // Custom field ID for Flow Name
{ field: '3', value: data.response_variables.interest || '' }, // Interest
],
},
});
const contactId = contact.contact.id;
// Step 2: Add tag
const tagResult = await acFetch('contactTags', 'POST', {
contactTag: {
contact: contactId,
tag: '1', // Tag ID for "instagram-lead"
},
});
// Step 3: Add to list
await acFetch('contactLists', 'POST', {
contactList: {
list: '1', // List ID
contact: contactId,
status: 1, // 1 = subscribed
},
});
res.status(200).json({ status: 'created', contactId });
} catch (error) {
res.status(500).json({ status: 'error', message: error.message });
}
});
app.listen(3000);
Note: ActiveCampaign uses numeric IDs for tags, lists, and custom fields. Look up the IDs in your ActiveCampaign account or via the API before hardcoding them.
Custom Fields
Creating Custom Fields
- Go to Contacts → Manage Fields.
- Click Add Field.
- Create fields:
| Field Name | Type | Purpose |
|---|---|---|
| Instagram Username | Text | Their IG handle |
| Flow Name | Text | Which DM flow they completed |
| Interest | Text | What they're interested in |
| Instagram User ID | Text | For API callbacks |
- Note the Field ID for each (visible in the URL when editing the field).
Building Automations
ActiveCampaign's automation builder is where the real power is.
Welcome Sequence for Instagram Leads
- Go to Automations → Create an Automation.
- Trigger: Tag is added →
instagram-lead. - Steps:
- Send email: Welcome + promised content
- Wait: 1 day
- If/Else: Check if email was opened
- Yes: Send follow-up with more value
- No: Send re-engagement email with different subject line
- Wait: 2 days
- Send email: Offer or CTA
- Goal: Contact clicks the CTA link
Lead Scoring
- Go to Contacts → Scoring.
- Add rules:
- Tag
instagram-leadadded: +10 points - Tag
high-intentadded: +20 points - Opens welcome email: +5 points
- Clicks link in email: +10 points
- Tag
- When score reaches 50, trigger a "Sales Ready" automation.
CRM Deal Creation
- In an automation, add CRM → Add a Deal.
- Set:
- Pipeline: Instagram Leads
- Stage: New
- Title:
Instagram Lead: {{contact.firstName}} - Value: Based on interest or flow
Troubleshooting
| Issue | Solution |
|---|---|
| Contact not appearing | Check the API response for errors. Verify the API URL and key. Ensure the email is valid. |
| Tag not applied | Use the tag ID (number), not the tag name, in API calls. Look up tag IDs via the API or in ActiveCampaign settings. |
| Custom fields empty | Use the field ID (number) in the fieldValues array. Field IDs are different from field names. |
| Contact not on list | The contactLists API call requires both the list ID and contact ID. Ensure both are correct. |
| Automation not triggering | Check that the automation is active and the trigger matches (tag added, list subscribed, etc.). |
| API returning 403 | Your API key may not have the required permissions. Check your ActiveCampaign plan - some API features require Plus or higher. |
| Duplicate contacts | The contact/sync endpoint handles duplicates by updating existing contacts with the same email. |
Frequently Asked Questions
How does ActiveCampaign compare to Mailchimp for InstantDM?
ActiveCampaign has more powerful automations, built-in CRM, and lead scoring. Mailchimp is simpler and has a more generous free tier. If you need advanced automation workflows and sales pipeline tracking, ActiveCampaign is the better choice. If you just need basic email list management, Mailchimp is sufficient.
Can I use ActiveCampaign's CRM with InstantDM leads?
Yes. ActiveCampaign's CRM (available on Plus plan and above) lets you create Deals from Instagram leads. Use an automation to create a Deal when a contact is tagged with instagram-lead.
Does the contact/sync endpoint handle duplicates?
Yes. It creates a new contact if the email doesn't exist, or updates the existing contact if it does. This is the recommended endpoint for InstantDM integration.
Can I trigger a DM from ActiveCampaign?
Yes. Use ActiveCampaign's webhook action in an automation to call a Make.com/Zapier scenario that sends a DM via the InstantDM API. For example, send a DM when a contact reaches a certain lead score.
What's Next
- Set up Brevo for a budget-friendly email marketing alternative.
- Connect to Klaviyo if you're in e-commerce.
- Read the ConvertKit guide for a creator-focused alternative.
- Build a Custom AI Agent to qualify leads before adding them to your list.
- Explore the full API docs at instantdm.com/instagram-api-docs.