DEV Community

Pirate Prentice
Pirate Prentice

Posted on

n8n Mailchimp Node: Sync Lists, Automate Campaigns, and Manage Subscribers [Free Workflow JSON]

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

  1. Log into Mailchimp → click your account name (top-right) → Account & Billing → Extras → API Keys
  2. Click Create A Key, name it (e.g. "n8n-operator"), copy it
  3. Note your data center prefix: it's in the API key after the dash — e.g. abc123def456-us14 means your data center is us14. n8n detects this automatically.
  4. 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" }
  ]
}
Enter fullscreen mode Exit fullscreen mode

To remove a tag, set "status": "inactive".


6 Gotchas

  1. 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 like a1b2c3d4e5.

  2. pending status triggers double opt-in. If your audience has double opt-in enabled and you set status: "subscribed", Mailchimp may override it with pending until the subscriber confirms. Test with a real email to verify the flow.

  3. 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.

  4. 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').

  5. 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.

  6. 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:

  1. Parse customer.email from Stripe payload
  2. Mailchimp node → Create or Update Member: status = subscribed, tag = stripe-customer
  3. Mailchimp node (Member Tag) → Add Tag: paid-{product_name} (use Code node to build tag name from metadata)
  4. 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:

  1. Google Sheets node → Get Rows: pull all rows where Synced column is empty
  2. 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
  3. 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:

  1. Webhook Trigger receives {"type": "unsubscribe", "data": {"email": "...", ...}}
  2. HTTP Request → HubSpot/Salesforce/Pipedrive API to find contact by email
  3. HTTP Request → update contact: set email_opt_out = true or equivalent
  4. 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() }}"]
        ]
      }
    }
  ]
}
Enter fullscreen mode Exit fullscreen mode

Import into n8n via Workflows → Import from JSON, swap in your List ID and Sheet ID, activate, and you're live.


Related Articles


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)

Collapse
 
pirateprentice profile image
Pirate Prentice

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.