Guide

Track Cancellation Outcomes: Event Model for Voluntary Cancel

You cannot improve a cancel flow you do not instrument. A minimal event model ties each voluntary session to a final outcome (canceled, saved via offer, or abandoned) and enough context to segment by plan — without shipping email addresses or card data to analytics tools.

Save rate definitions: cancellation save rate. Hub: cancellation flow analytics.

Last updated October 23, 2026

Session lifecycle events

EventWhen
flow_startedCustomer opens cancel entry point
reason_selectedPicker or validated free text submitted
offer_shownRetention offer rendered (type + id)
offer_accepted / offer_declinedCustomer action on offer step
flow_completedTerminal state: canceled or still subscribed

Properties to attach

  • Anonymous session or subscription id — not email in third-party analytics
  • Plan, interval, and MRR or price id at session time
  • Flow variant or segment id when using multiple experiences
  • Reason code aligned with your reporting taxonomy

Reconcile with Stripe

Webhook events confirm subscription status after the flow. Pair in-app events with subscription cancellation webhooks so “saved” in UI matches Stripe’s subscription object.

Privacy and scope

  • Voluntary cancel only — do not merge failed-payment funnels into save rate
  • Do not log full survey essays in product analytics; store in your app database

Outcome logging built in

ChurnIntel records voluntary sessions, reasons, and offer results for export.