Mailchimp is one of the most widely used email marketing platforms. Connecting InstantDM to Mailchimp automatically adds Instagram DM leads to your audience - when someone shares their email through a DM flow, they're added to your Mailchimp list with tags, merge fields, and automation triggers intact.
Why Connect InstantDM to Mailchimp?
- Auto-add to audience - Instagram leads join your Mailchimp list instantly
- Tag contacts - segment by Instagram campaign, flow, or interest
- Trigger automations - start welcome series or drip campaigns automatically
- Merge fields - store name, phone, Instagram handle alongside the email
- Massive ecosystem - Mailchimp integrates with everything else in your stack
Common Use Cases
- Add someone to your Mailchimp audience when they share their email via DM
- Tag contacts based on which Instagram post or flow they came from
- Start a welcome automation when a new Instagram lead is added
- Segment your audience by Instagram campaign for targeted emails
- Sync phone numbers and Instagram handles as merge fields
What You'll Need
| Requirement | Details |
|---|---|
| InstantDM account | Trendsetter, Trendsetter Pro, or any Multi plan |
| Mailchimp account | Free or paid plan |
| InstantDM API key | Found at Settings → API in your InstantDM dashboard |
| Mailchimp API key | Found at Account → Extras → API keys |
| Automation platform (optional) | Make.com or Zapier for no-code setup |
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 a Mailchimp Module
- After the webhook trigger, add a Filter:
eventequalsflow_completed. - Click "+" and search for Mailchimp.
- Select Add/Update a Subscriber.
- Connect your Mailchimp account.
- Select your Audience (list).
Step 3: Map Fields
| Mailchimp Field | Make.com Mapping |
|---|---|
| Email Address | {{data.response_variables.email}} |
| Status | subscribed (or pending for double opt-in) |
| FNAME (merge field) | {{data.response_variables.full_name}} |
| PHONE (merge field) | {{data.response_variables.phone}} |
| Tags | instagram-lead, {{data.flow_name}} |
Note: Use
subscribedfor immediate subscription orpendingto trigger Mailchimp's double opt-in confirmation email.
Step 4: Test and Activate
- Run once in Make.com.
- Trigger a test event from InstantDM.
- Check Mailchimp - the contact should appear in your audience with tags.
- 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 Mailchimp Action
- Add a Filter:
eventexactly matchesflow_completed. - Add Mailchimp → Add/Update Subscriber.
- Connect your Mailchimp account.
- Select your audience.
- Map email, name, and other fields.
- Add tags in the Tags field.
Step 3: Test and Activate
- Test with sample data.
- Verify in Mailchimp.
- Turn the Zap on.
Method 3: Direct API Integration
Step 1: Get Your Mailchimp API Key and Server
- In Mailchimp, go to Account → Extras → API keys.
- Create a new API key and copy it.
- Note your server prefix - it's the
usXpart of your Mailchimp URL (e.g.,us21). - Get your Audience ID: go to Audience → Settings → Audience name and defaults and find the Audience ID.
Step 2: Build a Webhook Receiver
const express = require('express');
const crypto = require('crypto');
const app = express();
app.use(express.json());
const MC_API_KEY = process.env.MAILCHIMP_API_KEY;
const MC_SERVER = 'us21'; // Your server prefix
const AUDIENCE_ID = 'abc123def4';
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' });
}
const email = data.response_variables.email.toLowerCase();
const subscriberHash = crypto.createHash('md5').update(email).digest('hex');
const subscriber = {
email_address: email,
status_if_new: 'subscribed',
merge_fields: {
FNAME: data.response_variables.full_name || '',
PHONE: data.response_variables.phone || '',
},
tags: ['instagram-lead', data.flow_name || 'unknown-flow'],
};
try {
const response = await fetch(
`https://${MC_SERVER}.api.mailchimp.com/3.0/lists/${AUDIENCE_ID}/members/${subscriberHash}`,
{
method: 'PUT', // PUT creates or updates
headers: {
'Authorization': `apikey ${MC_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify(subscriber),
}
);
const result = await response.json();
res.status(200).json({ status: result.status, id: result.id });
} catch (error) {
res.status(500).json({ status: 'error', message: error.message });
}
});
app.listen(3000);
Why PUT instead of POST? The
PUTmethod on the member endpoint creates the subscriber if they don't exist, or updates them if they do. This handles duplicates automatically.
Setting Up Merge Fields
Merge fields store additional data on each subscriber.
Creating Merge Fields in Mailchimp
- Go to Audience → Settings → Audience fields and |MERGE| tags.
- Add fields:
| Field Label | Merge Tag | Type |
|---|---|---|
| First Name | FNAME | Text (usually exists by default) |
| Phone | PHONE | Phone |
INSTA | Text | |
| Interest | INTEREST | Text |
| Flow Name | FLOWNAME | Text |
Mapping Merge Fields
In the API:
{
"merge_fields": {
"FNAME": "John Doe",
"PHONE": "+1234567890",
"INSTA": "@johndoe",
"INTEREST": "Premium Plan",
"FLOWNAME": "Lead Capture Flow"
}
}
Triggering Email Automations
Classic Automations
- Go to Automations → Classic Automations → Create.
- Select Tag-based trigger.
- Trigger when the tag
instagram-leadis added. - Build your email sequence.
Customer Journeys (Recommended)
- Go to Automations → Customer Journeys → Create.
- Set the starting point: Tag is added →
instagram-lead. - Add journey steps:
- Send email: Welcome message with promised content
- Wait: 1 day
- Send email: Follow-up with value
- If/Else: Check if they opened the first email
- Send email: Different content based on engagement
Segmentation for Targeted Campaigns
Create segments based on tags:
instagram-leadANDinterest-pricing→ Send pricing-focused emailsinstagram-leadANDflow-name-freebie→ Send nurture sequenceinstagram-leadAND NOTopened-email→ Send re-engagement
Troubleshooting
| Issue | Solution |
|---|---|
| Subscriber not appearing | Check that the email is valid. Verify the Audience ID is correct. Check if double opt-in is enabled (subscriber may be in "pending" status). |
| Tags not applied | Mailchimp's API applies tags separately from the member upsert in some cases. Use a second API call to add tags if they're not appearing. |
| "Member exists" error | Use PUT instead of POST to upsert. Or use status_if_new instead of status to only set status for new subscribers. |
| Merge fields empty | Ensure the merge tags match exactly (e.g., FNAME, not fname or First Name). Create the merge fields in Mailchimp first. |
| API returning 401 | Verify your API key. The Authorization header format is apikey YOUR_KEY (not Bearer). |
| Automation not triggering | Check that the automation is active and the trigger matches (tag added, form submitted, etc.). |
| Compliance warning | Mailchimp enforces anti-spam compliance. Ensure you have consent to email the subscriber. Using pending status triggers double opt-in. |
Frequently Asked Questions
Should I use "subscribed" or "pending" status?
Use subscribed if your DM flow already includes consent (e.g., "Would you like to receive emails from us?"). Use pending if you want Mailchimp to send a double opt-in confirmation email. For GDPR compliance, pending is safer.
Does Mailchimp handle duplicate emails?
Yes, when you use the PUT method on the member endpoint. It updates the existing subscriber with new tags and merge fields instead of creating a duplicate.
Can I add leads to multiple audiences?
Yes, but Mailchimp recommends using a single audience with tags and segments instead of multiple audiences. This avoids counting the same subscriber multiple times against your plan limit.
What's the difference between tags and groups?
Tags are applied by you (or your automation) and are invisible to subscribers. Groups are subscriber-facing categories they can choose. For InstantDM integration, use tags.
How many contacts can I have on the free plan?
Mailchimp's free plan allows up to 500 contacts and 1,000 email sends per month. For higher volume, upgrade to the Essentials plan.
What's Next
- Set up ConvertKit if you prefer a creator-focused email platform.
- Connect to ActiveCampaign for advanced automation.
- Read the Make.com guide for more automation scenarios.
- Build a Custom AI Agent to qualify leads before subscribing them.
- Explore the full API docs at instantdm.com/instagram-api-docs.