Churnor
Track customer events for SaaS churn monitoring
Send product activity to Churnor from your backend with the Events API. Start with stable customer IDs and event names that describe meaningful actions in your own product.
Choose useful product events
Start with actions that reflect customer activity in your product, such as signing in, exporting a report, or completing a workflow. Those event names are examples, not a required Churnor taxonomy. Churnor evaluates recorded product activity and looks for changes over time; it does not learn a custom prediction model from your event names.
Events whose names include terms such as export, report, workflow, sync, integration, download, query, analysis, or api_call can contribute core-feature evidence. You can also mark a core event with properties.is_core or properties.important. Set properties.is_product_activity to false for events that should not count as product activity.
Send events from your server
Use a product environment’s API key in a server-side request. Keep it out of browser code and public repositories. A Churnor SDK is not required.
curl -X POST https://churnor.vercel.app/api/v1/events \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"customer_id":"example_customer","event":"report_exported","idempotency_key":"example_event_1","properties":{"format":"csv"}}'The ID and payload above are illustrative. The API accepts customer_id or user_id, an event name up to 100 characters, and optional timestamp, properties, and delivery ID fields. If both customer identifiers are supplied, customer_id takes precedence.
Use timestamps and stable retry IDs
Supply a parseable timestamp when sending historical activity. For retries of the same event, reuse the same idempotency_key or event_id so Churnor can recognize duplicate deliveries. Batch ingestion accepts 1–1,000 events per request.
Inspect each response and handle validation, authentication, and rate-limit errors in your application. Churnor does not choose when your application retries a request.
Separate usage events from billing events
Send product actions to the Events API. Connect Stripe, Paddle, or Dodo Payments separately for supported subscription and payment changes. Billing events provide subscription context and do not count as behavioral product activity.
Match product and billing customer IDs · Browse billing integration guides.