ChurnZero
Delivers product-usage and lifecycle events to ChurnZero server-to-server through its HTTP API (trackEvent), keyed on the account and contact external IDs.
Why route ChurnZero through Datafly Signal
- Profiles are updated from the server, not the browser. Events reach ChurnZero even when a tracker blocker or a failed page unload would have dropped a client-side call, so the profile reflects what actually happened.
- One consent decision governs every destination. ChurnZero is gated by the same consent state as the rest of your stack, so a withdrawal applies everywhere at once.
Prerequisites
Find your AppKey
In ChurnZero, open Admin > AppKey. The key travels in the request URL, so keep it secret.
Know your region
US instances use analytics.churnzero.net; Europe and Asia instances use eu1analytics.churnzero.net.
Send the account and contact IDs
Call datafly.identify() with an account_external_id trait (the account’s ID in your CRM, as ChurnZero stores it) and, if your ChurnZero contacts are not keyed on your own user ID, a contact_external_id trait (the contact’s CRM ID). A group() call’s group ID also works as the account.
Configuration
| Field | Type | Required | Description |
|---|---|---|---|
app_key | secret | Yes | Your ChurnZero AppKey, found in ChurnZero under Admin > AppKey. Sent as a query parameter on every request: keep it secret. |
api_host | select | Yes | ChurnZero analytics host for your instance. Use analytics.churnzero.net for US accounts, or eu1analytics.churnzero.net for Europe/Asia accounts. The path is always /i. |
Signal setup
- Navigate to Integrations in the sidebar and open the Integration Library tab.
- Find ChurnZero, click Install and fill in the fields above.
- Pick the preset for your use, then review the mappings in the blueprint editor.
API endpoint
GET https://{api_host}/i?appKey={app_key}&action=trackEvent&accountExternalId=...&contactExternalId=...&eventName=...&eventDate=...Example request:
GET https://analytics.churnzero.net/i?accountExternalId=ACME-CRM-42&action=trackEvent&appKey=YOUR_APP_KEY
&contactExternalId=crm-user-7&description=Bulk+export&eventDate=2026-09-22T10%3A13%3A20Z&eventName=Feature+UsedThe presets turn on the strict output contract: only the fields the blueprint maps are sent.
Event mapping
SaaS / Customer Success preset (default)
SaaS lifecycle and product usage for ChurnZero ChurnScores, Plays and health scoring: page views, sign-up, login, onboarding, feature and report use, exports, integrations, plans, trials, the subscription lifecycle, support tickets, feedback and team growth, as trackEvent calls keyed on accountExternalId (account_external_id trait, else the group ID, else account_id) and contactExternalId (contact_external_id trait, else the Signal user ID), with an ISO 8601 eventDate. ChurnZero’s HTTP API carries every value in the URL, so the email is never sent: set the contact_external_id trait to the contact’s CRM ID if your ChurnZero contacts are not keyed on your user ID. Only events of an identified user with an account (the account_external_id trait, a group ID or account_id) are sent.
| Signal event | Sent to the vendor as | Enabled |
|---|---|---|
page | Page Viewed | yes |
sign_up | Signed Up | yes |
login | Logged In | yes |
onboarding_completed | Onboarding Completed | yes |
feature_used | Feature Used | yes |
report_viewed | Report Viewed | yes |
export_completed | Export Completed | yes |
integration_connected | Integration Connected | yes |
content_viewed | Content Viewed | yes |
search | Searched | yes |
plan_viewed | Plan Viewed | yes |
trial_started | Trial Started | yes |
trial_converted | Trial Converted | yes |
subscription_started | Subscription Started | yes |
subscription_upgraded | Subscription Upgraded | yes |
subscription_downgraded | Subscription Downgraded | yes |
subscription_cancelled | Subscription Cancelled | yes |
subscription_renewed | Subscription Renewed | yes |
support_ticket_created | Support Ticket Created | yes |
feedback_submitted | Feedback Submitted | yes |
invitation_sent | Invitation Sent | yes |
seat_added | Seat Added | yes |
Identity and personal data
accountExternalId is the account_external_id trait, else the group ID, else the account_id trait. contactExternalId is the contact_external_id trait, else the Signal user ID. ChurnZero’s HTTP API carries every value in the URL, and URLs are logged everywhere, so Signal never sends the email or any other personal data. If your ChurnZero contacts are keyed on email, set contact_external_id to the contact’s CRM ID instead. Only events of an identified user with an account ID (the account_external_id trait, a group ID or the account_id trait) are sent; without one the event is not sent.
Consent
Map ChurnZero to the consent category you use for product analytics (commonly analytics).
Known limitations
- Custom fields must be provisioned by ChurnZero before they can be sent, so the presets send none.
- ChurnZero’s HTTP API guide is behind the ChurnZero login; the request shape follows third-party clients of the HTTP API and the public REST reference, and needs a live test.
Troubleshooting
| Symptom | Cause and fix |
|---|---|
| Event not in ChurnZero | accountExternalId must match an existing ChurnZero account and contactExternalId a contact in it. |
401 / 403 | Wrong AppKey. |
404 | Wrong API host for your region. |