<!-- BusyBot node reference — https://busybot.net/tools/mailchimp/ -->

> Node: Mailchimp (`mailchimp`) · Action · v1
> Category: Marketing · Credentials: Mailchimp API (`mailchimpApi`)
> Updated: 2026-08-16

# Mailchimp

> Manage Mailchimp audience members, tags, groups, and campaigns.

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

**Category:** Marketing  
**Tool Name:** `mailchimp`  
**Version:** 1

**Appearance:** Icon: `si-mailchimp` | Color: `#FFE01B`

## Node Type

**Action** — processes input items and produces output

## Input / Output

| Direction | Port(s) |
|-----------|--------|
| Input | `Input` |
| Output | `Output`, `Error` |

## Credentials

This tool requires **Mailchimp API** credentials.
See the [Credentials Guide](https://busybot.net/credentials/mailchimp-api/) for setup instructions.

### Resources

| Resource | Value |
|----------|-------|
| Campaign | `campaign` |
| List Group | `listGroup` |
| Member | `member` |
| Member Tag | `memberTag` |

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

| Resource | Operation | Value | Description |
|----------|-----------|-------|-------------|
| Member | Create | `create` | Create a new member on list |
| Member | Delete | `delete` | Delete a member on list |
| Member | Get | `get` | Get a member on list |
| Member | Get Many | `getAll` | Get many members on a list |
| Member | Update | `update` | Update a member on list |
| Member Tag | Create | `create` | Add tags to a list member |
| Member Tag | Delete | `delete` | Remove tags from a list member |
| List Group | Get Many | `getAll` | Get many groups |
| Campaign | Delete | `delete` | Delete a campaign |
| Campaign | Get | `get` | Get a campaign |
| Campaign | Get Many | `getAll` | Get many campaigns |
| Campaign | Replicate | `replicate` | Replicate a campaign |
| Campaign | Resend | `resend` | Creates a Resend to Non-Openers version of this campaign |
| Campaign | Send | `send` | Send 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

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| List ID (`list`) | `string` | Yes | — | The Mailchimp audience/list ID. Find in Mailchimp: Audience > Settings > Audience name and defaults > Audience ID. |
| Email | `string` | Yes | — | Email address for the subscriber. |
| Status | `options` | Yes | `subscribed` | Subscriber's current status. |
| | | | | Options: `cleaned`, `pending`, `subscribed`, `transactional`, `unsubscribed` |
| JSON Parameters | `boolean` | No | `false` | Whether to pass merge fields, location, and interest groups as raw JSON. |
| Options | `collection` | No | `{}` | Optional subscriber attributes. |
| — Email Type | `options` | No | — | Type of email this member asked to get. |
| | | | | Options: `html`, `text` |
| — Language | `string` | No | — | If set/detected, the subscriber's language. |
| — Opt-in IP | `string` | No | — | The IP address the subscriber used to confirm their opt-in status. |
| — Signup IP | `string` | No | — | IP address the subscriber signed up from. |
| — Signup Timestamp | `dateTime` | No | — | The date and time the subscriber signed up for the list in ISO 8601 format. |
| — Tags | `string` | No | — | Tags to associate with the member, separated by commas. |
| — VIP | `boolean` | No | `false` | Whether the subscriber is a VIP. |
| — Opt-in Timestamp | `dateTime` | No | — | The date and time the subscriber confirmed their opt-in status in ISO 8601 format. |
| Location | `fixedCollection` | No | `{}` | Subscriber location information. _(shown when JSON Parameters is `false`)_ |
| — Latitude | `string` | Yes | — | The location latitude. |
| — Longitude | `string` | Yes | — | The location longitude. |
| Merge Fields | `fixedCollection` | No | `{}` | An individual merge var and value for a member. Use merge field tags like FNAME, LNAME. _(shown when JSON Parameters is `false`)_ |
| — Field Name | `string` | Yes | — | Merge field tag (e.g., FNAME, LNAME). Find in Mailchimp: Audience > Settings > Audience fields and MERGE tags. |
| — Field Value | `string` | Yes | — | Merge field value. |
| Interest Groups | `fixedCollection` | No | `{}` | Interest groups to set on the member. _(shown when JSON Parameters is `false`)_ |
| — Category ID | `string` | No | — | Interest category ID. |
| — Interest ID | `string` | No | — | The specific interest/group ID within the category. |
| — Active | `boolean` | No | `false` | Whether the member belongs to this interest group. |
| Merge Fields (JSON) | `json` | No | — | Merge fields as JSON object, e.g., {"FNAME": "John", "LNAME": "Doe"}. _(shown when JSON Parameters is `true`)_ |
| Location (JSON) | `json` | No | — | Location as JSON object, e.g., {"latitude": 40.7128, "longitude": -74.0060}. _(shown when JSON Parameters is `true`)_ |
| Interest Groups (JSON) | `json` | No | — | Interest groups as JSON object, e.g., {"interestId1": true, "interestId2": false}. _(shown when JSON Parameters is `true`)_ |

#### Member: Delete

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| List ID (`list`) | `string` | Yes | — | The Mailchimp audience/list ID. |
| Email | `string` | Yes | — | Member's email address. |

#### Member: Get

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| List ID (`list`) | `string` | Yes | — | The Mailchimp audience/list ID. |
| Email | `string` | Yes | — | Member's email address. |
| Options | `collection` | No | `{}` | Response shaping options. |
| — Fields | `string` | No | — | A comma-separated list of fields to return. |
| — Exclude Fields | `string` | No | — | A comma-separated list of fields to exclude. |

#### Member: Get Many

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| List ID (`list`) | `string` | Yes | — | The Mailchimp audience/list ID. |
| Return All | `boolean` | No | `false` | Whether to return all results or only up to a given limit. |
| Limit | `number` | No | `500` | Max number of results to return. _(shown when Return All is `false`)_ |
| Options | `collection` | No | `{}` | Filters applied to the member list. |
| — Before Last Changed | `dateTime` | No | — | Restrict results to subscribers whose information changed before the set timeframe. |
| — Before Timestamp Opt | `dateTime` | No | — | Restrict results to subscribers who opted-in before the set timeframe. |
| — Email Type | `options` | No | — | Type of email this member asked to get. |
| | | | | Options: `html`, `text` |
| — Status | `options` | No | — | Subscriber's current status. |
| | | | | Options: `cleaned`, `pending`, `subscribed`, `transactional`, `unsubscribed` |
| — Since Last Changed | `dateTime` | No | — | Restrict results to subscribers whose information changed after the set timeframe. |

#### Member: Update

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| List ID (`list`) | `string` | Yes | — | The Mailchimp audience/list ID. |
| Email | `string` | Yes | — | Email address of the subscriber. |
| JSON Parameters | `boolean` | No | `false` | Whether to pass merge fields, location, and interest groups as raw JSON. |
| Update Fields | `collection` | No | `{}` | The member properties to change. Only the fields you add are sent. |
| — Email Type | `options` | No | — | Type of email this member asked to get. |
| | | | | Options: `html`, `text` |
| — Interest Groups | `fixedCollection` | No | `{}` | Interest groups to set on the member. _(shown when JSON Parameters is `false`)_ |
| — — Category ID | `string` | No | — | Interest category ID. |
| — — Interest ID | `string` | No | — | The specific interest/group ID. |
| — — Active | `boolean` | No | `false` | Whether the member belongs to this interest group. |
| — Language | `string` | No | — | If set/detected, the subscriber's language. |
| — Merge Fields | `fixedCollection` | No | `{}` | An individual merge var and value for a member. _(shown when JSON Parameters is `false`)_ |
| — — Field Name | `string` | Yes | — | Merge field tag (e.g., FNAME, LNAME). |
| — — Field Value | `string` | Yes | — | Merge field value. |
| — Opt-in IP | `string` | No | — | The IP address the subscriber used to confirm their opt-in status. |
| — Signup IP | `string` | No | — | IP address the subscriber signed up from. |
| — Signup Timestamp | `dateTime` | No | — | The date and time the subscriber signed up for the list in ISO 8601 format. |
| — Skip Merge Validation | `boolean` | No | `false` | Whether member data will be accepted without merge field values, even if the merge field is usually required. |
| — Status | `options` | No | — | Subscriber's current status. |
| | | | | Options: `cleaned`, `pending`, `subscribed`, `transactional`, `unsubscribed` |
| — VIP | `boolean` | No | `false` | Whether the subscriber is a VIP. |
| — Location | `fixedCollection` | No | `{}` | Subscriber location information. _(shown when JSON Parameters is `false`)_ |
| — — Latitude | `string` | Yes | — | The location latitude. |
| — — Longitude | `string` | Yes | — | The location longitude. |
| — Opt-in Timestamp | `dateTime` | No | — | The date and time the subscriber confirmed their opt-in status in ISO 8601 format. |
| Merge Fields (JSON) | `json` | No | — | Merge fields as JSON object. _(shown when JSON Parameters is `true`)_ |
| Location (JSON) | `json` | No | — | Location as JSON object. _(shown when JSON Parameters is `true`)_ |
| Interest Groups (JSON) | `json` | No | — | Interest groups as JSON object. _(shown when JSON Parameters is `true`)_ |

#### Member Tag: Create

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| List ID (`list`) | `string` | Yes | — | The Mailchimp audience/list ID. |
| Email | `string` | Yes | — | Email address of the subscriber. |
| Tags | `string` | Yes | — | Comma-separated list of tag names to add or remove. |
| Options | `collection` | No | `{}` | Optional tagging behavior. |
| — Is Syncing | `boolean` | No | `false` | Whether automations based on the tags in the request will not fire. |

#### Member Tag: Delete

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| List ID (`list`) | `string` | Yes | — | The Mailchimp audience/list ID. |
| Email | `string` | Yes | — | Email address of the subscriber. |
| Tags | `string` | Yes | — | Comma-separated list of tag names to add or remove. |
| Options | `collection` | No | `{}` | Optional tagging behavior. |
| — Is Syncing | `boolean` | No | `false` | Whether automations based on the tags in the request will not fire. |

#### List Group: Get Many

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| List ID (`list`) | `string` | Yes | — | The Mailchimp audience/list ID. |
| Group Category ID | `string` | Yes | — | The interest category ID. Find by calling the Mailchimp API: GET /lists/{list_id}/interest-categories. |
| Return All | `boolean` | No | `false` | Whether to return all results or only up to a given limit. |
| Limit | `number` | No | `500` | Max number of results to return. _(shown when Return All is `false`)_ |

#### Campaign: Get Many

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Return All | `boolean` | No | `false` | Whether to return all results or only up to a given limit. |
| Limit | `number` | No | `10` | Max number of results to return. _(shown when Return All is `false`)_ |
| Options | `collection` | No | `{}` | Filters and response shaping for the campaign list. |
| — Before Create Time | `dateTime` | No | — | Restrict the response to campaigns created before the set time. |
| — Before Send Time | `dateTime` | No | — | Restrict the response to campaigns sent before the set time. |
| — Exclude Fields | `string` | No | — | Comma-separated list of fields to exclude from the response. |
| — Fields | `string` | No | `campaigns.id,campaigns.status,campaigns.tracking,campaigns.settings.from_name,campaigns.settings.reply_to,campaigns.settings.title` | Comma-separated list of fields to return. Use * for all fields. |
| — List ID (`listId`) | `string` | No | — | Filter campaigns by the audience/list ID. |
| — Since Create Time | `dateTime` | No | — | Restrict the response to campaigns created after the set time. |
| — Since Send Time | `dateTime` | No | — | Restrict the response to campaigns sent after the set time. |
| — Sort Direction | `options` | No | — | Determines the order direction for sorted results. |
| | | | | Options: `ASC`, `DESC` |
| — Sort Field | `options` | No | — | Returns files sorted by the specified field. |
| | | | | Options: `create_time`, `send_time` |
| — Status | `options` | No | — | The status of the campaign. |
| | | | | Options: `save`, `sending`, `sent`, `schedule` |

#### Campaign: Get

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Campaign ID | `string` | Yes | — | The ID of the campaign. |

#### Campaign: Delete

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Campaign ID | `string` | Yes | — | The ID of the campaign. |

#### Campaign: Replicate

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Campaign ID | `string` | Yes | — | The ID of the campaign. |

#### Campaign: Resend

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Campaign ID | `string` | Yes | — | The ID of the campaign. |

#### Campaign: Send

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Campaign ID | `string` | Yes | — | The ID of the campaign. |

#### All Operations

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Max Concurrency | `number` | No | `10` | Maximum 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.

| Operations | Output |
|------------|--------|
| Member Get Many, Campaign Get Many, List Group Get Many | **One 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 Resend | One output item carrying the returned member or campaign object. |
| Member Delete, Member Tag Create, Member Tag Delete, Campaign Delete, Campaign Send | One output item carrying `success: true` — these calls confirm the change instead of returning a record. |

A member object looks like this:

```json
{
  "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:

```json
{
  "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.

## Usage Examples

- 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

## Example Configuration

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

```json
{
  "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:

```json
{
  "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:

```json
{
  "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:

```json
{
  "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:

```json
{
  "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:

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

Tag a subscriber:

```json
{
  "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:

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

Fetch one campaign:

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

Find recently created campaigns, newest first:

```json
{
  "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:

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

### Error Handling

| Mode | Behavior |
|------|----------|
| **stop** | Halts workflow on first error |
| **continue** | Skips failed items, passes successful ones through |
| **errorPort** | Routes failed items to Error output port |

## Tips

Use Mailchimp to manage email marketing audience members, tags, interest groups, and campaigns via the Mailchimp Marketing API.