Kustomer

Datafly Signal delivers events to Kustomer server-to-server using the tracking identity + event API. Each event both identifies the customer (creating or updating their record by email or external ID) and records a named tracking event on their Kustomer timeline, giving support agents first-party behavioural context with no client-side script.

Prerequisites

Before configuring Kustomer in Signal you need your Kustomer organization name and an API key with the tracking role.

Find your organization name

Your Kustomer URL is https://<org_name>.kustomerapp.com. The <org_name> portion (for example acme) is your organization name. It also forms your API host: https://<org_name>.api.kustomerapp.com.

Create an API key

  1. In Kustomer, go to Settings > Security > API Keys.
  2. Click Add API Key.
  3. Give it a name (e.g. “Datafly Signal”).
  4. Assign the org.tracking role. If you want events to be able to create or update customer records, also assign org.user.customer.
  5. Click Save and copy the generated key (a JWT). It is shown once.
⚠️

Store the API key securely. It grants write access to your Kustomer tracking and customer data. If you lose it, revoke it and create a new one.

Configuration

FieldRequiredDescription
org_nameYesYour Kustomer organization subdomain. Forms the API host https://<org_name>.api.kustomerapp.com.
api_keyYesA Kustomer API key with the org.tracking role (and org.user.customer for customer upsert). Sent as Authorization: Bearer <api_key>.

Configure in Signal

  1. Go to Integrations > Add Integration > Kustomer.
  2. Select the Default variant.
  3. Enter your org_name and api_key.
  4. Select consent categories (typically marketing). Kustomer’s tracking API has no consent field, so Signal gates delivery on the visitor’s consent at the pipeline level.
  5. Click Save.

API Endpoint

POST https://<org_name>.api.kustomerapp.com/v1/tracking/identityEvent
Authorization: Bearer <api_key>
Content-Type: application/json

A successful request returns 201 Created. The body carries an identity object (used to match or create the customer) and an event object (the tracking event recorded on the timeline).

Identity Signals

Kustomer matches each event to a customer using the identity object. When both email and externalId are provided, Kustomer resolves on email first and falls back to externalId, so supplying both gives the highest match and dedup rate.

SignalFieldSourceDescription
Emailidentity.emaildatafly.identify() traitsThe customer’s email. Trimmed and lowercased before sending. Primary match key.
External IDidentity.externalIddatafly.identify() user IDYour own user/customer ID. Secondary match key, and the key Kustomer creates the record under when no email matches.
Nameidentity.namedatafly.identify() traitsThe customer’s display name, used when creating a new record.

Kustomer is a CRM: it must read email, phone, and name to deduplicate customers and surface them to support agents. Unlike advertising connectors, Signal sends these identity fields to Kustomer in clear text rather than hashed. Only enable this integration for consent categories your customer is comfortable sharing as first-party CRM data.

How to send identity data

Call datafly.identify() when a user logs in, registers, or submits a form:

datafly.identify("user-123", {
  email: "jane.doe@example.com",
  name: "Jane Doe"
});

Signal carries these traits onto every subsequent event so each tracking event arrives already attached to the right customer.

Event Mapping

Signal’s GA4-style event names map to Kustomer tracking event names, and event properties land under event.meta.

Default preset

Signal eventKustomer event
pagePage Viewed
Signed UpSigned Up
Logged InLogged In
Products SearchedProducts Searched
Product ViewedProduct Viewed
Product AddedProduct Added
Checkout StartedCheckout Started
Order CompletedOrder Completed

Meta key conventions

Kustomer enforces naming rules on event.meta keys, which the blueprint follows:

  • Numeric values use keys ending in Num (e.g. revenueNum, priceNum, quantityNum).
  • Date-time string values use keys ending in At (e.g. occurredAt).
  • All other custom properties are free-form strings.

To customise, edit the integration’s Field Mappings in the Management UI — but keep the Num / At suffixes, or Kustomer will reject the event with 400.

Example: Order Completed event

Datafly.js call:

datafly.identify("user-123", {
  email: "jane.doe@example.com",
  name: "Jane Doe"
});
 
datafly.track("Order Completed", {
  order_id: "ORD-001",
  revenue: 129.99,
  currency: "USD",
  tax: 8.50,
  shipping: 4.99,
  coupon: "SUMMER10"
});

Kustomer payload sent by Signal:

{
  "identity": {
    "email": "jane.doe@example.com",
    "externalId": "user-123",
    "name": "Jane Doe"
  },
  "event": {
    "name": "Order Completed",
    "meta": {
      "orderId": "ORD-001",
      "revenueNum": 129.99,
      "currency": "USD",
      "taxNum": 8.50,
      "shippingNum": 4.99,
      "coupon": "SUMMER10",
      "anonymousId": "a1b2c3d4-...",
      "occurredAt": "2026-06-06T10:00:00Z"
    }
  }
}

Testing

  1. Configure the integration with your org_name and api_key.
  2. Trigger an Order Completed (or any mapped) event on your site after calling datafly.identify().
  3. In Kustomer, open the customer by the email or external ID you sent. Their timeline should show the new tracking event within a few seconds.
  4. Use Signal’s Event Debugger to inspect the exact payload Signal sent and the 201 response from Kustomer.

Troubleshooting

ProblemSolution
401 / 403 UnauthorizedThe API key is wrong or lacks the org.tracking role. For customer upsert, also add org.user.customer. Regenerate the key in Settings > Security > API Keys.
404 Not FoundThe org_name in the host is wrong. Confirm it matches your Kustomer subdomain.
400 Bad RequestA meta key violates the naming rules — numeric values need a Num suffix, date-time strings need an At suffix. Check the failing field in the Event Debugger.
Event arrives but no customer attachedNo identity.email or identity.externalId was present. Make sure datafly.identify() runs before the tracked event so traits are carried through.
Duplicate customer recordsSend both email and externalId so Kustomer can match an existing record instead of creating a new one.