Reference · Tools

Iterable

Manage users, track events, and manage list subscriptions on the Iterable growth marketing platform

Action Communication v1

The Iterable node manages user profiles, tracks events and updates mailing-list subscriptions on the Iterable platform, carrying custom data fields on both users and events. A typical build is tracking a product milestone as an event so an Iterable campaign can react to it.

Node type
Action
Parameters
24
Outputs
Output, Error
Credentials
Iterable API

Iterable

Manage users, track events, and manage list subscriptions on Iterable

Overview

Iterable is a cross-channel marketing platform. This tool can create/update/delete/get users, track custom events, and add/remove users from lists. Authentication is via API key sent as an Api_Key header. Supports US and EU data center regions.

Category: Communication
Tool Name: iterable
Version: 1

Appearance: Icon: lucide-Mail | Color: #5CC8C8

Node Type

Action — processes input items and produces output

Input / Output

DirectionPort(s)
InputInput
OutputOutput, Error

Credentials

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

Resources

ResourceValue
Eventevent
Useruser
User ListuserList

Operations

OperationValueDescription
TracktrackRecord the actions a user performs (Event resource)
Create or UpdateupsertCreate a new user, or update the current one if it already exists (User resource)
DeletedeleteDelete a user (User resource)
GetgetGet a user (User resource)
AddaddAdd user to list (User List resource)
RemoveremoveRemove a user from a list (User List resource)

Parameters

Event: Track

ParameterTypeRequiredDefaultDescription
Event NamestringYesThe name of the event to track. Supports expressions like {{ $json.eventName }}.
Additional FieldscollectionNo{}Optional event attributes. Add only the ones you need.
— Campaign IDstringNoCampaign tied to conversion.
— Created AtstringNoTime the event happened (ISO 8601 datetime string). Will be converted to Unix timestamp.
— Data FieldsfixedCollectionNo{}Custom key/value data stored with the event. Add one entry per field.
— — KeystringNoThe key for the event data field.
— — ValuestringNoThe value for the event data field.
— EmailstringNoEither email or userId must be passed in to identify the user. If both are passed in, email takes precedence.
— Event IDstringNoOptional event ID. If an event exists with that ID, the event will be updated. If none is specified, a new ID will automatically be generated.
— Template IDstringNoTemplate ID associated with this event.
— User IDstringNouserId that was passed into the updateUser call.

User: Create or Update

ParameterTypeRequiredDefaultDescription
IdentifieroptionsYesemailIdentifier to be used.
Options: email, userId
ValuestringYesThe email address or user ID value. Supports expressions like {{ $json.email }}.
Create If Doesn’t ExistbooleanYestrueWhether to create a new user if the identifier does not exist. (shown when Identifier is userId)
Additional FieldscollectionNo{}Optional user attributes. Add only the ones you need.
— Data FieldsfixedCollectionNo{}Custom key/value data stored on the user profile. Add one entry per field.
— — KeystringNoThe key for the user data field.
— — ValuestringNoThe value for the user data field.
— Merge Nested ObjectsbooleanNofalseWhether to merge top level objects instead of overwriting (default: false). For example, if user profile has data: {mySettings:{mobile:true}} and the update has data: {mySettings:{email:true}}, the result will be: {mySettings:{mobile:true,email:true}}.

User: Delete

ParameterTypeRequiredDefaultDescription
ByoptionsYesemailIdentifier to be used.
Options: email, userId
EmailstringYesEmail for the user to delete. Supports expressions. (shown when By is email)
User IDstringYesUnique identifier for the user to delete. Supports expressions. (shown when By is userId)

User: Get

ParameterTypeRequiredDefaultDescription
ByoptionsYesemailIdentifier to be used.
Options: email, userId
EmailstringYesEmail for the user to retrieve. Supports expressions. (shown when By is email)
User IDstringYesUnique identifier for the user to retrieve. Supports expressions. (shown when By is userId)

User List: Add

ParameterTypeRequiredDefaultDescription
List IDstringYesThe numeric ID of the list. Find list IDs via the Iterable dashboard under Audience > Lists, or by calling GET /api/lists.
IdentifieroptionsYesemailIdentifier to be used.
Options: email, userId
ValuestringYesThe email address or user ID to add to the list. Supports expressions.

User List: Remove

ParameterTypeRequiredDefaultDescription
List IDstringYesThe numeric ID of the list. Find list IDs via the Iterable dashboard under Audience > Lists, or by calling GET /api/lists.
IdentifieroptionsYesemailIdentifier to be used.
Options: email, userId
ValuestringYesThe email address or user ID to remove from the list. Supports expressions.
Additional FieldscollectionNo{}Optional unsubscribe attributes.
— Campaign IDnumberNo0Attribute unsubscribe to a specific campaign.
— Channel UnsubscribebooleanNofalseWhether to unsubscribe email from list’s associated channel - essentially a global unsubscribe.

All Operations

ParameterTypeRequiredDefaultDescription
Max ConcurrencynumberNo10Maximum number of items to process concurrently.

Output Data

One output item per input item — no operation fans out. The Iterable API response is merged into the incoming item JSON at the top level, so the fields you sent in pass through and binary data is forwarded. If the API returns something that is not an object, it lands on a result property instead.

OperationWhat lands on the item
trackIterable’s acknowledgement of the tracked event.
upsertIterable’s update response. A response body that reports a non-success code is raised as an item error rather than passed through.
deleteIterable’s delete response, likewise checked for a success code.
getThe user record itself — the surrounding user wrapper is unwrapped before output. A user that does not exist raises a User not found item error, so a successful item always has a real profile on it.
add / removeIterable’s subscribe / unsubscribe response.

Usage Examples

  • Create or update a user in Iterable by email
  • Track a custom event for an Iterable user
  • Subscribe users to an Iterable mailing list
  • Delete a user from Iterable by user ID
  • Get user details from Iterable by email

Example Configuration

Track a custom event with data fields:

{
  "type": "iterable",
  "parameters": {
    "resource": "event",
    "operation": "track",
    "name": "purchase_completed",
    "additionalFields": {
      "email": "{{ $json.email }}",
      "campaignId": "campaign_abc",
      "dataFieldsUi": {
        "dataFieldValues": [
          { "key": "product_id", "value": "prod_123" },
          { "key": "amount", "value": "29.99" }
        ]
      }
    }
  }
}

Create or update a user identified by email:

{
  "type": "iterable",
  "parameters": {
    "resource": "user",
    "operation": "upsert",
    "identifier": "email",
    "value": "newuser@example.com",
    "additionalFields": {
      "dataFieldsUi": {
        "dataFieldValues": [
          { "key": "firstName", "value": "John" },
          { "key": "lastName", "value": "Doe" }
        ]
      },
      "mergeNestedObjects": true
    }
  }
}

Create or update by user ID, creating the profile when it is new:

{
  "type": "iterable",
  "parameters": {
    "resource": "user",
    "operation": "upsert",
    "identifier": "userId",
    "value": "user_12345",
    "preferUserId": true,
    "additionalFields": {
      "dataFieldsUi": {
        "dataFieldValues": [
          { "key": "subscription_tier", "value": "premium" }
        ]
      }
    }
  }
}

Fetch a user by user ID:

{
  "type": "iterable",
  "parameters": {
    "resource": "user",
    "operation": "get",
    "by": "userId",
    "userId": "user_67890"
  }
}

Delete a user by email:

{
  "type": "iterable",
  "parameters": {
    "resource": "user",
    "operation": "delete",
    "by": "email",
    "email": "user.to.delete@example.com"
  }
}

Subscribe an address to a list:

{
  "type": "iterable",
  "parameters": {
    "resource": "userList",
    "operation": "add",
    "listId": "123456",
    "identifier": "email",
    "value": "{{ $json.email }}"
  }
}

Unsubscribe with campaign attribution and a channel-wide opt-out:

{
  "type": "iterable",
  "parameters": {
    "resource": "userList",
    "operation": "remove",
    "listId": "123456",
    "identifier": "userId",
    "value": "user_99999",
    "additionalFields": {
      "campaignId": 789,
      "channelUnsubscribe": true
    }
  }
}

Error Handling

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

Tips

Use Iterable to manage users, track events, and manage mailing list subscriptions on the Iterable marketing platform.

Data Fields Pattern

When using dataFieldsUi in additionalFields, always structure as:

{
  "dataFieldsUi": {
    "dataFieldValues": [
      {
        "key": "field_name",
        "value": "field_value"
      }
    ]
  }
}

This structure allows you to pass custom data fields that will be stored with the user or event in Iterable.

Notes

  • Identify the user on every event. Track sends the identifiers you put in Additional Fields — supply Email or User ID. When both are present, email takes precedence.
  • Create If Doesn’t Exist only appears for User ID. Upserting by email always creates the profile when it is missing; the flag exists because a bare user ID would otherwise be ambiguous.
  • Merge Nested Objects changes update semantics. Off, a nested object on the profile is replaced wholesale by the one you send; on, the two are merged key by key.
  • List ID is numeric. Take it from Audience > Lists in the Iterable dashboard, not the list name.

Frequently asked questions

How do I attach custom data fields?

Through `dataFieldsUi` inside Additional Fields, structured as a `dataFieldValues` array of key/value objects. That shape is what carries custom data onto the user or event.

Why is my event not attaching to a user?

Track sends the identifiers you place in Additional Fields, so the user has to be identified on every event. Without an identifier the event has nothing to attach to.

Can it manage list membership?

Yes — subscribing and unsubscribing users from mailing lists is supported alongside user management and event tracking.

Which credential does it need?

An Iterable API credential covering users, events and list operations.

Build with the Iterable node

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

Open BusyBot

Last updated . Spotted something wrong? Tell us.