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
- Go to Settings for the product.
- Locate the API key for that product.
- Copy the key — Signal sends it as the reserved
_kparameter 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
| Field | Required | Description |
|---|---|---|
api_key | Yes | Your Kissmetrics product API key. Found under the product’s Settings. Sent as the reserved _k parameter. |
Management UI Setup
- Go to Integrations > Add Integration > Kissmetrics.
- Choose the Default variant (page views plus core product, account, and conversion events).
- Paste your API Key.
- 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| Parameter | Meaning |
|---|---|
_k | Your API key (from the integration config). |
_p | The person identifier the event is recorded against. |
_n | The event name. |
_t | The event timestamp, in epoch seconds. |
_d | Always 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 event | Kissmetrics event |
|---|---|
page | Page Viewed |
Signed Up | Signed Up |
Logged In | Logged In |
Products Searched | Searched |
Product Viewed | Product Viewed |
Product Added | Added to Cart |
Checkout Started | Checkout Started |
Order Completed | Purchased |
Order Refunded | Refunded |
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
- Send a test event through the pipeline (for example, trigger
Order Completedon a staging site, or use Signal’s Event Debugger). - In Kissmetrics, open the person matching the
_pvalue (theiruser_idoranonymous_id). - Confirm the event appears in their activity timeline with the expected name and properties.
- 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
| Symptom | Likely cause | Fix |
|---|---|---|
| No events appear in Kissmetrics | Wrong 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 aliased | Ensure user_id is set on identified users; alias anonymous history to the known person at login. |
| Events recorded at the wrong time | Timestamp unit mismatch | _t must be epoch seconds with _d=1; confirm the pipeline emits seconds, not milliseconds. |
| Custom properties missing or mis-named | Property names not mapped, or unexpected event name | Properties use human-readable Kissmetrics names; check the blueprint mappings for the event. |
| Event dropped entirely | Event name not in the blueprint | Only mapped events are delivered (defaults.action: drop); add the event to the blueprint if needed. |