Mailchimp remains one of the most widely used email marketing platforms, and n8n's Mailchimp node lets you read and write contacts, manage list membership, fire campaigns, and sync subscriber data without any manual dashboard work. This guide covers every operation, the gotchas, and three workflow patterns ready to import.
What the Mailchimp Node Does
The n8n Mailchimp node exposes four core resources:
| Resource | Operations |
|---|---|
| List/Audience | Create, Delete, Get, Get All |
| Member | Create, Delete, Get, Get All, Update, Create or Update (upsert) |
| Member Note | Create, Delete, Get, Get All, Update |
| Member Tag | Add, Remove |
Authentication uses a Mailchimp API key. Generate one at Mailchimp → Account → Extras → API Keys.
Setting Up the Credential
- Log into Mailchimp → click your account name (top-right) → Account & Billing → Extras → API Keys
- Click Create A Key, name it (e.g. "n8n-operator"), copy it
- Note your data center prefix: it's in the API key after the dash — e.g.
abc123def456-us14means your data center isus14. n8n detects this automatically. - In n8n, add a Mailchimp API credential and paste the full key
Key Operations
Member (Subscriber) Operations
Create or Update Member (recommended over Create alone) — upserts a subscriber by email. If the email exists, it updates; if not, it creates. Key fields:
-
email_address: required -
status:subscribed,unsubscribed,pending(triggers double opt-in),cleaned -
merge_fields: object for first name, last name, and custom fields (e.g.{"FNAME": "Ada", "LNAME": "Lovelace"}) -
tags: array of tag names (use the Member Tag operations to add/remove separately)
Get All Members — supports filtering by status, before_last_changed, since_last_changed, count (max 1000 per call). Combine with the Code node for pagination.
Update Member — change status, merge fields, tags, or marketing permissions. Useful for lifecycle transitions (trial → paid → cancelled → re-engagement).
Member Tags
Tags let you segment without creating new lists. The Tag Add/Remove operations take listId, email, and a tags array:
{
"listId": "abc123def",
"email": "user@example.com",
"tags": [
{ "name": "trial-started", "status": "active" },
{ "name": "onboarding-incomplete", "status": "active" }
]
}
To remove a tag, set "status": "inactive".
6 Gotchas
List ID, not list name. Every Mailchimp operation needs the
listId(audience ID), not the human-readable name. Find it in Mailchimp → Audience → All Contacts → Settings → Audience name and defaults. It looks likea1b2c3d4e5.pendingstatus triggers double opt-in. If your audience has double opt-in enabled and you setstatus: "subscribed", Mailchimp may override it withpendinguntil the subscriber confirms. Test with a real email to verify the flow.Merge field keys are ALLCAPS. Mailchimp merge tags are uppercase by convention (
FNAME,LNAME,PHONE). Custom fields use whatever key you defined in the audience settings. Mismatched case causes silent failures — the field is ignored without an error.Email hashing for direct API calls. The Mailchimp API uses an MD5 hash of the lowercase email as the subscriber identifier. n8n handles this for you in the node, but if you fall back to HTTP Request for unsupported operations (campaigns, automations), you'll need to compute the hash manually in a Code node:
require('crypto').createHash('md5').update(email.toLowerCase()).digest('hex').Rate limits: 10 requests/second per API key. For bulk operations (syncing thousands of contacts), use the Batch Operations API via HTTP Request node (POST to
/3.0/batches) rather than looping through members one by one. The n8n node doesn't expose batch operations natively.Campaigns can't be created and sent in one step via the node. The node supports List/Member/Note/Tag operations but NOT creating or sending campaigns. For campaign automation, use the HTTP Request node with Mailchimp's campaigns endpoint. The most common workaround: use Mailchimp's built-in automation journeys triggered by tag application, and use n8n only to apply the tags.
3 Workflow Patterns
Pattern 1: Stripe Payment → Mailchimp Tag + Sequence
When a customer pays, apply a tag in Mailchimp to trigger the appropriate post-purchase email sequence.
Trigger: Webhook Trigger (Stripe payment_intent.succeeded event)
Steps:
- Parse
customer.emailfrom Stripe payload - Mailchimp node → Create or Update Member: status =
subscribed, tag =stripe-customer - Mailchimp node (Member Tag) → Add Tag:
paid-{product_name}(use Code node to build tag name from metadata) - Mailchimp automation in Mailchimp UI → trigger sequence when
paid-{product_name}tag is applied
Value: Every payment automatically starts the correct onboarding or upsell sequence without manual list management.
Pattern 2: Weekly Subscriber Sync from Google Sheets
For teams that collect leads in Google Sheets (trade shows, manual intake, webinar signups), sync to Mailchimp on a schedule.
Trigger: Schedule Trigger — every Monday 8 AM
Steps:
- Google Sheets node → Get Rows: pull all rows where
Syncedcolumn is empty - Loop Over Items — for each row:
a. Mailchimp node → Create or Update Member with email, FNAME, LNAME, custom merge fields
b. Google Sheets node → Update Row: set
Synced= today's date - Slack node → summary: "Synced {n} contacts to Mailchimp"
Pattern 3: Unsubscribe Propagation (Mailchimp → CRM)
When Mailchimp processes an unsubscribe, mirror it in your CRM to prevent other teams from contacting the person.
Trigger: Mailchimp Webhook (set in Mailchimp → Audience → Manage Audience → Settings → Webhooks, event type: unsubscribe). Point to n8n Webhook Trigger URL.
Steps:
- Webhook Trigger receives
{"type": "unsubscribe", "data": {"email": "...", ...}} - HTTP Request → HubSpot/Salesforce/Pipedrive API to find contact by email
- HTTP Request → update contact: set
email_opt_out = trueor equivalent - Google Sheets → log the unsubscribe with timestamp for compliance records
Why this matters: Unsubscribes must be honored across all systems, not just the email platform. This workflow closes that gap automatically.
Free Workflow JSON
Here's a starter workflow combining Patterns 1 and 3 (Stripe payment tag + Mailchimp unsubscribe logger):
{
"name": "Mailchimp Starter: Stripe Tag + Unsubscribe Logger",
"nodes": [
{
"name": "Stripe Webhook",
"type": "n8n-nodes-base.webhook",
"parameters": { "path": "stripe-payment", "httpMethod": "POST" }
},
{
"name": "Mailchimp Tag Member",
"type": "n8n-nodes-base.mailchimp",
"parameters": {
"resource": "memberTag",
"operation": "add",
"listId": "YOUR_LIST_ID",
"email": "={{ $json.data.object.customer_email }}",
"tags": [{ "name": "stripe-customer", "status": "active" }]
}
},
{
"name": "Mailchimp Unsubscribe Webhook",
"type": "n8n-nodes-base.webhook",
"parameters": { "path": "mailchimp-unsub", "httpMethod": "POST" }
},
{
"name": "Log Unsubscribe to Sheets",
"type": "n8n-nodes-base.googleSheets",
"parameters": {
"operation": "append",
"spreadsheetId": "YOUR_SHEET_ID",
"range": "Unsubscribes!A:C",
"values": [
["={{ $json.data.email }}", "={{ $json.data.reason }}", "={{ $now.toISO() }}"]
]
}
}
]
}
Import into n8n via Workflows → Import from JSON, swap in your List ID and Sheet ID, activate, and you're live.
Related Articles
- n8n Google Sheets Node: Read, Write, and Sync Spreadsheet Data
- n8n HubSpot Node: Sync Contacts, Deals, and Companies
- n8n Airtable Node: Advanced Patterns for CRM Sync
Need this built for your stack? I offer a done-for-you n8n workflow build — you describe what you need, I build and test it, you import and run it. $99 flat. → Book here
Or grab the n8n Workflow Pack (30+ pre-built automations): → pirateprentice.gumroad.com/l/sxcoe ($29)
Top comments (1)
Are you using the Mailchimp node to sync subscribers from Stripe payments, trigger tag-based automation journeys, or propagate unsubscribes to your CRM? Drop your use case below — I'd love to see how people are connecting Mailchimp with n8n.