ChurnZero

Datafly Signal delivers events to ChurnZero server-to-server using ChurnZero’s analytics tracking API. Product-usage and lifecycle events captured by Datafly.js are forwarded to ChurnZero from your own infrastructure and attached to the right account and contact, feeding ChurnScores, Plays, journeys, and health scoring — with no client-side ChurnZero script on your pages.

Prerequisites

Before configuring ChurnZero in Signal, you need:

  • A ChurnZero account with admin access.
  • Your ChurnZero AppKey (found in Admin > AppKey).
  • Knowledge of which ChurnZero region your instance runs in (US or Europe/Asia).
  • A stable account external ID for each customer account, matching the identifier you use in your CRM. ChurnZero attaches every event to an account using this value.

ChurnZero identifies records by the external IDs you already hold in your CRM — it does not use hashed PII or device identifiers. You are responsible for sending a consistent account_external_id and contact email (or contact external ID) on identified events.

Configuration

Configuration Fields

FieldRequiredDescription
app_keyYesYour ChurnZero AppKey, from Admin > AppKey. Sent as a query parameter on every request — treat it as a secret.
api_hostYesChurnZero analytics host. Use analytics.churnzero.net for US accounts or eu1analytics.churnzero.net for Europe/Asia accounts.

Configure in Signal

Add the integration

In the Management UI, go to Integrations > Add Integration > ChurnZero.

Enter your credentials

Paste your App Key and select your API Host (US or EU/Asia).

ChurnZero is a first-party customer-success tool. Map it to the consent category your organisation uses for product analytics (commonly analytics).

Save

Click Save. Signal begins delivering mapped events to ChurnZero immediately.

API Endpoint

ChurnZero’s tracking API accepts every write as an HTTP GET with all fields in the URL query string. Signal sends one request per event:

GET https://analytics.churnzero.net/i?appKey={app_key}&action=trackEvent
    &accountExternalId={account}&contactExternalId={contact}
    &eventName={event}&eventDate={iso8601}

For Europe/Asia accounts the host is eu1analytics.churnzero.net. The path is always /i and the action is always trackEvent.

ParameterRequiredDescription
appKeyYesYour ChurnZero AppKey (auth).
actionYesAlways trackEvent.
accountExternalIdYesThe account/company external ID as it appears in your CRM.
contactExternalIdYesThe contact’s external ID — typically the contact’s email address.
eventNameYesName of the event. ChurnZero creates the event on the fly if the name is new.
eventDateNoISO 8601 timestamp of when the event occurred.
quantityNoNumeric value associated with the event.
descriptionNoFree-text description of the event.
⚠️

Custom fields (customfields) must be pre-provisioned in your ChurnZero instance before you send them — ChurnZero cannot create custom fields on the fly. Request new fields from your ChurnZero Implementation Specialist first.

Identity Signals

ChurnZero keys every event on the (accountExternalId, contactExternalId) composite. There is no hashing, fingerprinting, or device identity — matching depends entirely on the external IDs you supply.

SignalChurnZero parameterSource
Account IDaccountExternalIdaccount_external_id trait (set via datafly.identify())
Contact IDcontactExternalIdemail trait (set via datafly.identify())

Call datafly.identify() when a user logs in or is otherwise known, passing the account identifier and the contact’s email:

datafly.identify("user-123", {
  email: "jane.doe@acme.example",
  account_external_id: "ACME-CRM-0042"
});

Events without both an account_external_id and a contact email are dropped before delivery, because ChurnZero cannot attach an event without its composite key.

Event Mapping

The SaaS / Customer Success preset maps Signal events to ChurnZero events:

Signal eventChurnZero eventName
pagePage Viewed
Signed UpSigned Up
Logged InLogged In
Feature UsedFeature Used
Content ViewedContent Viewed
Products SearchedSearched
Plan ViewedPlan Viewed
Trial StartedTrial Started
Subscription StartedSubscription Started
Subscription CancelledSubscription Cancelled
Support Ticket CreatedSupport Ticket Created

All other events are dropped. To track additional events, add them to the integration’s Field Mappings in the Management UI.

Example: Feature Used event

Datafly.js call:

datafly.identify("user-123", {
  email: "jane.doe@acme.example",
  account_external_id: "ACME-CRM-0042"
});
 
datafly.track("Feature Used", {
  feature_name: "Export to CSV",
  count: 1
});

Request sent by Signal:

GET https://analytics.churnzero.net/i
    ?appKey=YOUR_APP_KEY
    &action=trackEvent
    &accountExternalId=ACME-CRM-0042
    &contactExternalId=jane.doe%40acme.example
    &eventName=Feature%20Used
    &eventDate=2026-06-06T10:32:00Z
    &description=Export%20to%20CSV
    &quantity=1

Testing

  1. Trigger an identified event on your site (for example, log in then use a tracked feature).
  2. In Signal’s Event Debugger, confirm the event was delivered to ChurnZero with a 200 response and that accountExternalId, contactExternalId, and eventName are populated.
  3. In ChurnZero, open the matching Account and check the contact’s activity timeline — the event should appear within a minute, with the eventName you mapped.

Troubleshooting

ProblemSolution
Event not appearing in ChurnZeroConfirm the accountExternalId matches an existing ChurnZero account and the contact exists (or can be matched by email). ChurnZero silently ignores events for unknown accounts.
401 / 403 responseThe AppKey is wrong or missing. Re-copy it from Admin > AppKey.
404 responseWrong API host. US accounts use analytics.churnzero.net; Europe/Asia accounts use eu1analytics.churnzero.net.
400 responseA required parameter is missing — usually accountExternalId, contactExternalId, or eventName. Check that datafly.identify() supplied both the account ID and email.
Custom field values ignoredThe custom field has not been provisioned in ChurnZero. Request it from your ChurnZero Implementation Specialist before sending.