Search all guides

Reference · Tools

Mailchimp integration

Manage Mailchimp audience members, member tags, list groups, and email campaigns.

Action Marketing v1

The Mailchimp node manages audiences and campaigns: adding and updating members, applying member tags, managing interest groups, and working with email campaigns. A typical build is syncing customers into an audience and tagging them by plan so campaigns can segment on it.

Works as
Action
Tool name
mailchimp
Parameters
45
Outputs
Output, Error
Credentials
Mailchimp API
Official docs
Mailchimp docs mailchimp.com

What you can build with Mailchimp

  • Add a subscriber to a Mailchimp audience list.
  • Get all members from a Mailchimp list.
  • Add tags to a Mailchimp subscriber.
  • Send a Mailchimp email campaign.
  • Get all campaigns from Mailchimp.

Overview

Connects to the Mailchimp Marketing API to manage audience list members (create, get, update, delete), member tags (add, remove), list interest groups, and email campaigns (get, list, delete, send, replicate, resend). Uses API key authentication with datacenter-aware URL construction. Supports offset-based pagination for list operations.

Node Type

Action — processes input items and produces output

Input / Output

DirectionPort(s)
InputInput
OutputOutput, Error

Credentials

This tool requires Mailchimp API credentials. See the Credentials Guide for setup instructions.

Resources

ResourceValue
Campaigncampaign
List GrouplistGroup
Membermember
Member TagmemberTag

Operations

Each resource has its own Operation list, and several resources reuse the same operation values (create, delete, get, getAll). Pick the resource first, then the operation.

ResourceOperationValueDescription
MemberCreatecreateCreate a new member on list
MemberDeletedeleteDelete a member on list
MemberGetgetGet a member on list
MemberGet ManygetAllGet many members on a list
MemberUpdateupdateUpdate a member on list
Member TagCreatecreateAdd tags to a list member
Member TagDeletedeleteRemove tags from a list member
List GroupGet ManygetAllGet many groups
CampaignDeletedeleteDelete a campaign
CampaignGetgetGet a campaign
CampaignGet ManygetAllGet many campaigns
CampaignReplicatereplicateReplicate a campaign
CampaignResendresendCreates a Resend to Non-Openers version of this campaign
CampaignSendsendSend a campaign

Parameters

Most operations need the List ID — Mailchimp calls it the Audience ID, and you find it under Audience > Settings > Audience name and defaults. The List ID, Email, Campaign ID and Group Category ID fields accept expressions, so they can come from the incoming item ({{ $json.email }}).

Member Create and Member Update each offer two ways to supply merge fields, location and interest groups: the structured form fields, or raw JSON objects. JSON Parameters picks between them, and the two paths are mutually exclusive.

Member: Create

ParameterTypeRequiredDefaultDescription
List ID (list)stringYes—The Mailchimp audience/list ID. Find in Mailchimp: Audience > Settings > Audience name and defaults > Audience ID.
EmailstringYes—Email address for the subscriber.
StatusoptionsYessubscribedSubscriber’s current status.
Options: cleaned, pending, subscribed, transactional, unsubscribed
JSON ParametersbooleanNofalseWhether to pass merge fields, location, and interest groups as raw JSON.
OptionscollectionNo{}Optional subscriber attributes.
— Email TypeoptionsNo—Type of email this member asked to get.
Options: html, text
— LanguagestringNo—If set/detected, the subscriber’s language.
— Opt-in IPstringNo—The IP address the subscriber used to confirm their opt-in status.
— Signup IPstringNo—IP address the subscriber signed up from.
— Signup TimestampdateTimeNo—The date and time the subscriber signed up for the list in ISO 8601 format.
— TagsstringNo—Tags to associate with the member, separated by commas.
— VIPbooleanNofalseWhether the subscriber is a VIP.
— Opt-in TimestampdateTimeNo—The date and time the subscriber confirmed their opt-in status in ISO 8601 format.
LocationfixedCollectionNo{}Subscriber location information. (shown when JSON Parameters is false)
— LatitudestringYes—The location latitude.
— LongitudestringYes—The location longitude.
Merge FieldsfixedCollectionNo{}An individual merge var and value for a member. Use merge field tags like FNAME, LNAME. (shown when JSON Parameters is false)
— Field NamestringYes—Merge field tag (e.g., FNAME, LNAME). Find in Mailchimp: Audience > Settings > Audience fields and MERGE tags.
— Field ValuestringYes—Merge field value.
Interest GroupsfixedCollectionNo{}Interest groups to set on the member. (shown when JSON Parameters is false)
— Category IDstringNo—Interest category ID.
— Interest IDstringNo—The specific interest/group ID within the category.
— ActivebooleanNofalseWhether the member belongs to this interest group.
Merge Fields (JSON)jsonNo—Merge fields as JSON object, e.g., {“FNAME”: “John”, “LNAME”: “Doe”}. (shown when JSON Parameters is true)
Location (JSON)jsonNo—Location as JSON object, e.g., {“latitude”: 40.7128, “longitude”: -74.0060}. (shown when JSON Parameters is true)
Interest Groups (JSON)jsonNo—Interest groups as JSON object, e.g., {“interestId1”: true, “interestId2”: false}. (shown when JSON Parameters is true)

Member: Delete

ParameterTypeRequiredDefaultDescription
List ID (list)stringYes—The Mailchimp audience/list ID.
EmailstringYes—Member’s email address.

Member: Get

ParameterTypeRequiredDefaultDescription
List ID (list)stringYes—The Mailchimp audience/list ID.
EmailstringYes—Member’s email address.
OptionscollectionNo{}Response shaping options.
— FieldsstringNo—A comma-separated list of fields to return.
— Exclude FieldsstringNo—A comma-separated list of fields to exclude.

Member: Get Many

ParameterTypeRequiredDefaultDescription
List ID (list)stringYes—The Mailchimp audience/list ID.
Return AllbooleanNofalseWhether to return all results or only up to a given limit.
LimitnumberNo500Max number of results to return. (shown when Return All is false)
OptionscollectionNo{}Filters applied to the member list.
— Before Last ChangeddateTimeNo—Restrict results to subscribers whose information changed before the set timeframe.
— Before Timestamp OptdateTimeNo—Restrict results to subscribers who opted-in before the set timeframe.
— Email TypeoptionsNo—Type of email this member asked to get.
Options: html, text
— StatusoptionsNo—Subscriber’s current status.
Options: cleaned, pending, subscribed, transactional, unsubscribed
— Since Last ChangeddateTimeNo—Restrict results to subscribers whose information changed after the set timeframe.

Member: Update

ParameterTypeRequiredDefaultDescription
List ID (list)stringYes—The Mailchimp audience/list ID.
EmailstringYes—Email address of the subscriber.
JSON ParametersbooleanNofalseWhether to pass merge fields, location, and interest groups as raw JSON.
Update FieldscollectionNo{}The member properties to change. Only the fields you add are sent.
— Email TypeoptionsNo—Type of email this member asked to get.
Options: html, text
— Interest GroupsfixedCollectionNo{}Interest groups to set on the member. (shown when JSON Parameters is false)
— — Category IDstringNo—Interest category ID.
— — Interest IDstringNo—The specific interest/group ID.
— — ActivebooleanNofalseWhether the member belongs to this interest group.
— LanguagestringNo—If set/detected, the subscriber’s language.
— Merge FieldsfixedCollectionNo{}An individual merge var and value for a member. (shown when JSON Parameters is false)
— — Field NamestringYes—Merge field tag (e.g., FNAME, LNAME).
— — Field ValuestringYes—Merge field value.
— Opt-in IPstringNo—The IP address the subscriber used to confirm their opt-in status.
— Signup IPstringNo—IP address the subscriber signed up from.
— Signup TimestampdateTimeNo—The date and time the subscriber signed up for the list in ISO 8601 format.
— Skip Merge ValidationbooleanNofalseWhether member data will be accepted without merge field values, even if the merge field is usually required.
— StatusoptionsNo—Subscriber’s current status.
Options: cleaned, pending, subscribed, transactional, unsubscribed
— VIPbooleanNofalseWhether the subscriber is a VIP.
— LocationfixedCollectionNo{}Subscriber location information. (shown when JSON Parameters is false)
— — LatitudestringYes—The location latitude.
— — LongitudestringYes—The location longitude.
— Opt-in TimestampdateTimeNo—The date and time the subscriber confirmed their opt-in status in ISO 8601 format.
Merge Fields (JSON)jsonNo—Merge fields as JSON object. (shown when JSON Parameters is true)
Location (JSON)jsonNo—Location as JSON object. (shown when JSON Parameters is true)
Interest Groups (JSON)jsonNo—Interest groups as JSON object. (shown when JSON Parameters is true)

Member Tag: Create

ParameterTypeRequiredDefaultDescription
List ID (list)stringYes—The Mailchimp audience/list ID.
EmailstringYes—Email address of the subscriber.
TagsstringYes—Comma-separated list of tag names to add or remove.
OptionscollectionNo{}Optional tagging behavior.
— Is SyncingbooleanNofalseWhether automations based on the tags in the request will not fire.

Member Tag: Delete

ParameterTypeRequiredDefaultDescription
List ID (list)stringYes—The Mailchimp audience/list ID.
EmailstringYes—Email address of the subscriber.
TagsstringYes—Comma-separated list of tag names to add or remove.
OptionscollectionNo{}Optional tagging behavior.
— Is SyncingbooleanNofalseWhether automations based on the tags in the request will not fire.

List Group: Get Many

ParameterTypeRequiredDefaultDescription
List ID (list)stringYes—The Mailchimp audience/list ID.
Group Category IDstringYes—The interest category ID. Find by calling the Mailchimp API: GET /lists/{list_id}/interest-categories.
Return AllbooleanNofalseWhether to return all results or only up to a given limit.
LimitnumberNo500Max number of results to return. (shown when Return All is false)

Campaign: Get Many

ParameterTypeRequiredDefaultDescription
Return AllbooleanNofalseWhether to return all results or only up to a given limit.
LimitnumberNo10Max number of results to return. (shown when Return All is false)
OptionscollectionNo{}Filters and response shaping for the campaign list.
— Before Create TimedateTimeNo—Restrict the response to campaigns created before the set time.
— Before Send TimedateTimeNo—Restrict the response to campaigns sent before the set time.
— Exclude FieldsstringNo—Comma-separated list of fields to exclude from the response.
— FieldsstringNocampaigns.id,campaigns.status,campaigns.tracking,campaigns.settings.from_name,campaigns.settings.reply_to,campaigns.settings.titleComma-separated list of fields to return. Use * for all fields.
— List ID (listId)stringNo—Filter campaigns by the audience/list ID.
— Since Create TimedateTimeNo—Restrict the response to campaigns created after the set time.
— Since Send TimedateTimeNo—Restrict the response to campaigns sent after the set time.
— Sort DirectionoptionsNo—Determines the order direction for sorted results.
Options: ASC, DESC
— Sort FieldoptionsNo—Returns files sorted by the specified field.
Options: create_time, send_time
— StatusoptionsNo—The status of the campaign.
Options: save, sending, sent, schedule

Campaign: Get

ParameterTypeRequiredDefaultDescription
Campaign IDstringYes—The ID of the campaign.

Campaign: Delete

ParameterTypeRequiredDefaultDescription
Campaign IDstringYes—The ID of the campaign.

Campaign: Replicate

ParameterTypeRequiredDefaultDescription
Campaign IDstringYes—The ID of the campaign.

Campaign: Resend

ParameterTypeRequiredDefaultDescription
Campaign IDstringYes—The ID of the campaign.

Campaign: Send

ParameterTypeRequiredDefaultDescription
Campaign IDstringYes—The ID of the campaign.

All Operations

ParameterTypeRequiredDefaultDescription
Max ConcurrencynumberNo10Maximum number of items to process concurrently.

Output Data

The Mailchimp response is merged onto the input item’s JSON at the top level — the returned fields sit alongside the fields the item already carried, so downstream nodes address them directly ({{ $json.email_address }}). A response field with the same name as an existing item field overwrites it. Binary data on the input item is forwarded.

OperationsOutput
Member Get Many, Campaign Get Many, List Group Get ManyOne output item per record — 500 members become 500 output items from a single input item. A response with no records produces no output items for that input.
Member Create, Member Get, Member Update, Campaign Get, Campaign Replicate, Campaign ResendOne output item carrying the returned member or campaign object.
Member Delete, Member Tag Create, Member Tag Delete, Campaign Delete, Campaign SendOne output item carrying success: true — these calls confirm the change instead of returning a record.

A member object looks like this:

{
  "id": "8a25ff1d98",
  "email_address": "subscriber@example.com",
  "unique_email_id": "1e8d6ba0d2",
  "status": "subscribed",
  "merge_fields": { "FNAME": "John", "LNAME": "Doe" },
  "interests": { "interest123": true },
  "stats": { "avg_open_rate": 0.42, "avg_click_rate": 0.11 },
  "tags": [{ "id": 1234, "name": "customer" }],
  "list_id": "abc123def4",
  "last_changed": "2026-01-15T10:30:00+00:00"
}

When the audience requires double opt-in, Mailchimp returns the new member with status: "pending" even though you asked for subscribed. Member: Create flags that case so it is not mistaken for success:

{
  "status": "pending",
  "_doubleOptInPending": true,
  "_message": "Audience requires double opt-in — member is pending confirmation"
}

Campaign lists return only the fields named by the Fields option, which defaults to a compact set (campaigns.id, campaigns.status, campaigns.tracking and three settings fields); ask for * to get the full campaign object.

Member operations address the subscriber by the hash of their email address, so Member: Create behaves as an upsert — running it for an address that already exists updates that member rather than failing. Use it when you want “add or update” semantics, and Member: Update when the member must already exist.

Member: Delete archives the subscriber rather than erasing them, so the address stays in the audience’s archived list and can be re-subscribed later.

Example Configuration

Add a subscriber with merge fields, location and interest groups filled in through the form fields:

{
  "type": "mailchimp",
  "parameters": {
    "resource": "member",
    "operation": "create",
    "list": "abc123def4",
    "email": "subscriber@example.com",
    "status": "subscribed",
    "jsonParameters": false,
    "options": {
      "emailType": "html",
      "language": "en",
      "tags": "newsletter,customer",
      "vip": true
    },
    "mergeFieldsUi": {
      "mergeFieldsValues": [
        { "name": "FNAME", "value": "John" },
        { "name": "LNAME", "value": "Doe" }
      ]
    },
    "locationFieldsUi": {
      "locationFieldsValues": {
        "latitude": "40.7128",
        "longitude": "-74.0060"
      }
    },
    "groupsUi": {
      "groupsValues": [
        {
          "categoryId": "interest123",
          "categoryFieldId": "group456",
          "value": true
        }
      ]
    }
  }
}

Add the same subscriber with raw JSON instead — handy when the data already arrives as objects:

{
  "type": "mailchimp",
  "parameters": {
    "resource": "member",
    "operation": "create",
    "list": "abc123def4",
    "email": "{{ $json.email }}",
    "status": "subscribed",
    "jsonParameters": true,
    "options": {
      "emailType": "html",
      "vip": false
    },
    "mergeFieldsJson": "{\"FNAME\":\"John\",\"LNAME\":\"Doe\",\"COMPANY\":\"Example Corp\"}",
    "locationJson": "{\"latitude\":40.7128,\"longitude\":-74.0060}",
    "groupJson": "{\"interest123\":true,\"interest456\":false}"
  }
}

Change a member’s status and name:

{
  "type": "mailchimp",
  "parameters": {
    "resource": "member",
    "operation": "update",
    "list": "abc123def4",
    "email": "subscriber@example.com",
    "jsonParameters": false,
    "updateFields": {
      "status": "subscribed",
      "vip": true,
      "mergeFieldsUi": {
        "mergeFieldsValues": [
          { "name": "FNAME", "value": "Jane" }
        ]
      },
      "locationFieldsUi": {
        "locationFieldsValues": {
          "latitude": "41.8781",
          "longitude": "-87.6298"
        }
      }
    }
  }
}

Read one member back:

{
  "type": "mailchimp",
  "parameters": {
    "resource": "member",
    "operation": "get",
    "list": "abc123def4",
    "email": "subscriber@example.com",
    "options": {
      "fields": "id,email_address,status,merge_fields"
    }
  }
}

List recently changed subscribers, one item each:

{
  "type": "mailchimp",
  "parameters": {
    "resource": "member",
    "operation": "getAll",
    "list": "abc123def4",
    "returnAll": false,
    "limit": 50,
    "options": {
      "status": "subscribed",
      "sinceLastChanged": "2026-01-01T00:00:00Z"
    }
  }
}

Remove a subscriber from the audience:

{
  "type": "mailchimp",
  "parameters": {
    "resource": "member",
    "operation": "delete",
    "list": "abc123def4",
    "email": "{{ $json.email }}"
  }
}

Tag a subscriber:

{
  "type": "mailchimp",
  "parameters": {
    "resource": "memberTag",
    "operation": "create",
    "list": "abc123def4",
    "email": "subscriber@example.com",
    "tags": "customer,vip,newsletter",
    "options": {
      "isSyncing": false
    }
  }
}

List the interests inside one group category:

{
  "type": "mailchimp",
  "parameters": {
    "resource": "listGroup",
    "operation": "getAll",
    "list": "abc123def4",
    "groupCategory": "cat123456",
    "returnAll": true
  }
}

Fetch one campaign:

{
  "type": "mailchimp",
  "parameters": {
    "resource": "campaign",
    "operation": "get",
    "campaignId": "campaign123"
  }
}

Find recently created campaigns, newest first:

{
  "type": "mailchimp",
  "parameters": {
    "resource": "campaign",
    "operation": "getAll",
    "returnAll": false,
    "limit": 25,
    "options": {
      "status": "sent",
      "sinceCreateTime": "2026-01-01T00:00:00Z",
      "sortField": "create_time",
      "sortDirection": "DESC",
      "fields": "campaigns.id,campaigns.settings.title,campaigns.status"
    }
  }
}

Send a campaign:

{
  "type": "mailchimp",
  "parameters": {
    "resource": "campaign",
    "operation": "send",
    "campaignId": "{{ $json.id }}"
  }
}

Error Handling

ModeBehavior
stopHalts workflow on first error
continueSkips failed items, passes successful ones through
errorPortRoutes failed items to Error output port

Tips

This tool manages Mailchimp audience members, their tags, list groups, and email campaigns. It is ideal for operations like adding subscribers, sending campaigns, or updating member information, rather than for general CRM or social media management. It produces changes to Mailchimp resources, such as new audience members, updated campaign statuses, or retrieved lists of campaigns and groups.

Frequently asked questions

What can it manage besides subscribers?

Member tags, list interest groups and email campaigns, so segmentation and sending are both reachable from the same node.

How do tags differ from interest groups?

Tags are free-form labels you apply to members; interest groups are structured categories defined on the audience. Both are supported, and which you use depends on how the audience was set up in Mailchimp.

How do I react to subscriber changes?

Use the Mailchimp Trigger, which fires on subscribe, unsubscribe, profile update and other list events.

Which credential does it need?

A Mailchimp API credential, shared with the Mailchimp Trigger.

Build with Mailchimp

Drop it into a workflow, wire it to an agent, or call it on a schedule. You'll need Mailchimp API credentials first.

Open BusyBot

Last reviewed . Spotted something wrong? Tell us.