Kissmetrics

Datafly Signal delivers events to Kissmetrics server-to-server using the Kissmetrics tracking API. Kissmetrics is a person-based product-analytics platform for funnels, cohorts, and retention. Because Signal sends events directly from your server, tracking is not affected by ad blockers or browser tracking prevention, and you do not need the Kissmetrics JavaScript library on your site.

Prerequisites

Before configuring Kissmetrics in Signal, you need a Kissmetrics account and your product API key.

Create or open your Kissmetrics product

Sign in to Kissmetrics and select the product (site/app) you want to track into. If you do not have a product yet, create one from your account dashboard.

Find your API key

  1. Go to Settings for the product.
  2. Locate the API key for that product.
  3. Copy the key — Signal sends it as the reserved _k parameter on every request.

Kissmetrics issues one API key per product. Use the key for the exact product whose funnels and reports should receive these events.

Configure in Signal

Configuration Fields

FieldRequiredDescription
api_keyYesYour Kissmetrics product API key. Found under the product’s Settings. Sent as the reserved _k parameter.

Management UI Setup

  1. Go to Integrations > Add Integration > Kissmetrics.
  2. Choose the Default variant (page views plus core product, account, and conversion events).
  3. Paste your API Key.
  4. Attach the integration to a pipeline and save.

API Endpoint

Signal delivers each event as an HTTP GET to the Kissmetrics record-event endpoint, with all data on the query string:

GET https://trk.kissmetrics.io/e
ParameterMeaning
_kYour API key (from the integration config).
_pThe person identifier the event is recorded against.
_nThe event name.
_tThe event timestamp, in epoch seconds.
_dAlways 1 — tells Kissmetrics to use the supplied _t timestamp (back-dating the event to when it actually happened).

Any other query-string parameter is stored by Kissmetrics as a custom property on the event, keyed by its (human-readable) name.

The Kissmetrics tracking endpoint queues events asynchronously and returns 200 for any well-formed request, so a 200 response does not by itself confirm the event was accepted. Validate landed events in the Kissmetrics UI (see Testing).

Identity Signals

Kissmetrics treats people as the unit of measure, so every event must be recorded against a stable person identifier (_p).

The blueprint maps _p to your logged-in user_id, falling back to Signal’s anonymous_id for visitors who have not yet identified themselves. When a visitor logs in, you should also call Kissmetrics’ alias capability to merge their anonymous history into the known person — this is outside the scope of the event blueprint.

Kissmetrics stores identities and traits in the clear (it is a first-party product-analytics tool, not an advertising match-key API), so Signal does not hash email or phone for this integration. The blueprint forwards email and name traits as the Email and Name properties.

Event Mapping

Signal uses GA4-style snake_case event names internally and maps them to readable Kissmetrics event names. The Default variant maps:

Signal eventKissmetrics event
pagePage Viewed
Signed UpSigned Up
Logged InLogged In
Products SearchedSearched
Product ViewedProduct Viewed
Product AddedAdded to Cart
Checkout StartedCheckout Started
Order CompletedPurchased
Order RefundedRefunded

Events not in the map are dropped (defaults.action: drop).

Example

A Order Completed event from Datafly.js:

datafly.track('Order Completed', {
  order_id: 'ORD-1042',
  revenue: 89.99,
  currency: 'USD',
  tax: 7.20,
  coupon: 'WELCOME10'
});

Signal delivers it to Kissmetrics as:

GET https://trk.kissmetrics.io/e?_k=YOUR_API_KEY
  &_p=user_8842
  &_n=Purchased
  &_t=1749200400
  &_d=1
  &Order%20ID=ORD-1042
  &Revenue=89.99
  &Currency=USD
  &Tax=7.20
  &Coupon=WELCOME10

(Line breaks added for readability; the real request is a single URL-encoded query string.)

Testing

  1. Send a test event through the pipeline (for example, trigger Order Completed on a staging site, or use Signal’s Event Debugger).
  2. In Kissmetrics, open the person matching the _p value (their user_id or anonymous_id).
  3. Confirm the event appears in their activity timeline with the expected name and properties.
  4. Check the relevant funnel or report to confirm the event counts toward your metrics.
⚠️

Because the endpoint returns 200 even for events it later discards, always confirm landing in the Kissmetrics UI rather than relying on the HTTP status.

Troubleshooting

SymptomLikely causeFix
No events appear in KissmetricsWrong or revoked API key (_k)Re-copy the API key from the correct product’s Settings and update the integration.
Events appear under the wrong/duplicate people_p not stable, or anonymous and known sessions not aliasedEnsure user_id is set on identified users; alias anonymous history to the known person at login.
Events recorded at the wrong timeTimestamp unit mismatch_t must be epoch seconds with _d=1; confirm the pipeline emits seconds, not milliseconds.
Custom properties missing or mis-namedProperty names not mapped, or unexpected event nameProperties use human-readable Kissmetrics names; check the blueprint mappings for the event.
Event dropped entirelyEvent name not in the blueprintOnly mapped events are delivered (defaults.action: drop); add the event to the blueprint if needed.