Skip to main content

Customer.io

Server Source code Package Beta

Server-side event delivery to Customer.io via the official customerio-node SDK. Tracks events with TrackClient.track(), manages identities with identify(), and supports the full lifecycle: page views, device registration, suppress/unsuppress, profile merging, and transactional messaging via APIClient.sendEmail() / sendPush().

Where this fits

Customer.io is a server destination in the walkerOS flow:

Receives events server-side from the collector, resolves a `customerId` (or falls back to `anonymousId`), optionally fires `identify()`, then forwards the event to Customer.io for campaigns, broadcasts, and transactional messaging.

Installation

Loading...
Loading...

Configuration

This destination uses the standard destination config wrapper (consent, data, env, id, ...). For the shared fields see destination configuration. Package-specific fields live under config.settings and are listed below.

Settings

PropertyTypeDescriptionMore
siteId*stringCustomer.io Site ID. Find it in Settings > Workspace Settings > API Credentials.
apiKey*stringCustomer.io API Key. Find it in Settings > Workspace Settings > API Credentials.
appApiKeystringApp API Key for transactional messaging (sendEmail/sendPush). Find it in Settings > Workspace Settings > API Credentials > App API Keys.
region'us' | 'eu'Data center region. Must match where your Customer.io workspace was created. Default: us.
timeoutintegerHTTP request timeout in milliseconds. Default: 10000.
customerIdstringwalkerOS mapping value path to resolve customerId from each event (like user.id).
anonymousIdstringwalkerOS mapping value path to resolve anonymousId from each event (like user.session).
identifyanyDestination-level identity mapping. Resolves to { email?, first_name?, ... } attributes. Fires identify() on first push and re-fires when values change.
* Required fields

Mapping

Per-event rules under config.mapping. For the standard rule fields (consent, condition, data, batch, name, policy) see mapping.

PropertyTypeDescriptionMore
identifyanyPer-event identify attributes. Resolves to { email?, first_name?, ... }. Use with skip: true on login/identify events.
pageanyPer-event page view. Resolves to { url, ... }. Calls trackPageView(). Use with skip: true.
destroybooleanPermanently delete person from Customer.io. Set true on delete events with skip: true.
suppressbooleanSuppress person (stop messaging without deleting data). Set true with skip: true.
unsuppressbooleanUnsuppress person (resume messaging). Set true with skip: true.
addDeviceanyRegister push device. Resolves to { deviceId, platform, data? }. Use with skip: true.
deleteDeviceanyRemove push device. Resolves to { deviceId, platform }. Use with skip: true.
mergeanyMerge duplicate profiles. Resolves to { primaryType, primaryId, secondaryType, secondaryId }. Use with skip: true.
sendEmailanySend transactional email. Resolves to { to, transactional_message_id, message_data?, identifiers? }. Requires appApiKey. Use with skip: true.
sendPushanySend transactional push. Resolves to { transactional_message_id, message_data?, identifiers? }. Requires appApiKey. Use with skip: true.

Examples

anonymous track

Event
Out

default track

Event
Out

destination identify

Event
Out

destroy person

Event
Mapping
Out

mapped data

Event
Mapping
Out

mapped event name

Event
Mapping
Out

page view

Event
Mapping
Out

suppress person

Event
Mapping
Out

unsuppress person

Event
Mapping
Out

user login identify

Event
Mapping
Out

wildcard ignored

Event
Mapping
Out

Identity is resolved automatically from each event: customerId defaults to user.id and anonymousId defaults to user.session. Customer.io requires a customerId or anonymousId per event. When customerId is missing, the destination automatically falls back to trackAnonymous() so anonymous visitor data is preserved.

Customer lifecycle

Per-rule mapping settings control which lifecycle methods are called in addition to the default track():

Mapping SettingSDK CallUse For
identifyidentify()Login, signup, profile updates
pagetrackPageView()Page view events
destroydestroy()GDPR delete / user removal
suppresssuppress()Stop messaging (keep data)
unsuppressunsuppress()Resume messaging
addDeviceaddDevice()Register push notification token
deleteDevicedeleteDevice()Remove push token
mergemergeCustomers()Consolidate duplicate profiles

Use skip: true on the rule to fire only the lifecycle call without tracking a second track() event.

Transactional messaging

Set settings.appApiKey to enable sendEmail / sendPush via Customer.io's App API. These mappings resolve to the full request body expected by the SDK.

💡 Need implementation support?
elbwalker offers hands-on support: setup review, measurement planning, destination mapping, and live troubleshooting. Book a 2-hour session (€399)