A session is a single cancellation attempt by one of your customers. Every time a customer triggers your cancel flow — whether through the in-app widget or your hosted cancel page — churn.io opens one session and tracks it from the first screen they see through to the final outcome. Sessions are the foundation of every number on your dashboard: save rate, revenue saved, offer performance, and cancellation reasons are all calculated from them. This article explains exactly when a session is created, the outcomes it can end in, and how sessions are counted across your analytics.
When a session is created
A new session is created the moment a customer enters one of your cancel flows:
When the cancel widget opens inside your app and a matching live flow is found for that customer.
When a customer lands on your hosted cancel page and a matching live page flow is found.
churn.io decides which flow to show based on your flow's audience targeting. If no live flow matches that customer, no session is created — so sessions only count real cancellation attempts that actually saw one of your flows.
💡 One session per attempt
Each cancellation attempt is its own session. If the same customer comes back later and tries to cancel again, that is a brand-new session.
The four session outcomes
Every session carries an outcome that describes how it ended. A session always starts as Pending and moves to a final state as the customer progresses:
Pending — The session is still open. The customer has started the flow but hasn't reached a final action yet.
Saved — The customer accepted a retention offer (a discount, pause, extended trial, free month, and so on) and kept their subscription.
Cancelled — The customer went through the flow and confirmed the cancellation.
Dismissed — The customer closed or abandoned the flow without cancelling or accepting an offer.
A session closes (gets a completion time) as soon as it reaches Saved, Cancelled, or Dismissed.
Pending vs. abandoned sessions
Some sessions never reach a clear ending — for example, a customer opens the flow and simply walks away. To keep your analytics honest, churn.io treats a session that stays Pending past a short grace period as abandoned.
This matters in two places:
On the dashboard, an In progress filter shows only sessions that are still genuinely active (Pending and started within the grace window).
In the session outcomes breakdown, the Abandoned bucket combines dismissed sessions with stale Pending sessions that passed the grace period. This is why the outcome flow always adds back up to your total session count.
How sessions are counted in analytics
Your Sessions total is simply the number of sessions created within the date range you've selected. From that total, the other headline metrics are derived:
Save rate is the share of sessions that ended as Saved — calculated as saved sessions divided by total sessions.
Revenue saved sums the monthly recurring revenue (MRR) of every Saved session.
Revenue churned sums the MRR of every Cancelled session.
Sessions are always counted against the date and time they were created — not when they finished. When you choose a date range, churn.io includes every session that started within those days. You can also narrow the count further using filters such as flow, outcome, cancellation reason, offer type, MRR range, and customer email search.
⚠️ Sessions need a connected billing provider and a live flow
No sessions are recorded until you've connected your billing provider (Stripe) and published at least one live flow. Until then, your dashboard shows a "connect" or "no data yet" state. If your numbers look empty, check that a flow is live and your integration is connected.
Viewing and exporting sessions
Your dashboard includes a session log where you can review individual sessions. For each one you can see the customer's email, the outcome, the cancellation reason, any accepted offer, the MRR, and how long the customer spent inside the flow. Opening a single session reveals its full step-by-step timeline — every screen shown, survey answer, offer viewed, and the final action.
You can also export the filtered session list to a CSV file to analyze it elsewhere. The export respects whatever filters and date range you currently have applied.
💡 Duration measures engagement, not idle time
A session's duration is the time between the customer's first and last activity inside the flow. For hosted cancel pages this means idle waiting before the customer opens the page isn't counted against the duration.
