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
| Field | Required | Description |
|---|---|---|
app_key | Yes | Your ChurnZero AppKey, from Admin > AppKey. Sent as a query parameter on every request — treat it as a secret. |
api_host | Yes | ChurnZero 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).
Select consent categories
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.
| Parameter | Required | Description |
|---|---|---|
appKey | Yes | Your ChurnZero AppKey (auth). |
action | Yes | Always trackEvent. |
accountExternalId | Yes | The account/company external ID as it appears in your CRM. |
contactExternalId | Yes | The contact’s external ID — typically the contact’s email address. |
eventName | Yes | Name of the event. ChurnZero creates the event on the fly if the name is new. |
eventDate | No | ISO 8601 timestamp of when the event occurred. |
quantity | No | Numeric value associated with the event. |
description | No | Free-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.
| Signal | ChurnZero parameter | Source |
|---|---|---|
| Account ID | accountExternalId | account_external_id trait (set via datafly.identify()) |
| Contact ID | contactExternalId | email 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 event | ChurnZero eventName |
|---|---|
page | Page Viewed |
Signed Up | Signed Up |
Logged In | Logged In |
Feature Used | Feature Used |
Content Viewed | Content Viewed |
Products Searched | Searched |
Plan Viewed | Plan Viewed |
Trial Started | Trial Started |
Subscription Started | Subscription Started |
Subscription Cancelled | Subscription Cancelled |
Support Ticket Created | Support 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=1Testing
- Trigger an identified event on your site (for example, log in then use a tracked feature).
- In Signal’s Event Debugger, confirm the event was delivered to ChurnZero with a
200response and thataccountExternalId,contactExternalId, andeventNameare populated. - In ChurnZero, open the matching Account and check the contact’s activity timeline — the event should appear within a minute, with the
eventNameyou mapped.
Troubleshooting
| Problem | Solution |
|---|---|
| Event not appearing in ChurnZero | Confirm 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 response | The AppKey is wrong or missing. Re-copy it from Admin > AppKey. |
404 response | Wrong API host. US accounts use analytics.churnzero.net; Europe/Asia accounts use eu1analytics.churnzero.net. |
400 response | A required parameter is missing — usually accountExternalId, contactExternalId, or eventName. Check that datafly.identify() supplied both the account ID and email. |
| Custom field values ignored | The custom field has not been provisioned in ChurnZero. Request it from your ChurnZero Implementation Specialist before sending. |