---
title: "Sessions"
description: "Track each interaction that a customer has with your Cancel Flows"
navigation: true
---

Sessions track every customer's interaction with your Cancel Flow, from initial trigger to final decision. Sessions are the primary data structure Churnkey uses to track, analyze, and report on customer retention efforts.

## How it works
Whenever a customer starts the Cancel Flow, a session will be created to store the customer's information and their interactions, for example, their Survey Cancellation response. The result of a session, called **Session Outcomes**, will be used to generate metrics such as the Save Rate, Offer Performance, and help in understanding cancellation reasons.

## Activity Stream
The **Activity Stream** at the bottom of the [Cancellation Analytics](https://app.churnkey.co/cancellation/analytics) page is the per-session log. Each row represents a single session: who the customer was, when they came through, what flow they ran, the outcome, and any survey or follow-up answers they left along the way. It is the right place to investigate a single customer's experience or to pull a CSV for a teammate.

Sessions are returned newest first and the page loads ten at a time. Use the **Load More** button at the bottom to keep going.

![activity-stream-record](/img/metrics/activity-stream-record.png)

::callout
If the customer does not reach the Cancellation Survey or the Freeform Feedback, their session won't have any of this data.
::

### Toolbar
The toolbar above the list groups every control you need to narrow the view.

- **Search** input. Matches against customer email, customer ID, and survey or feedback text. Trigger it with the magnifying glass button or by hitting Enter. While a search is active, the date range and filter dropdown are temporarily disabled.
- **Date range picker**. Defaults to the last 90 days. Quick options: Last 7 days, Last 30 days, Last 90 days, Last 6 months, Last Year. Custom start and end dates are accepted.
- **Filters dropdown**. Multi-select. Defaults to **All Sessions**.
- **Export** button. Pulls the currently filtered list as a CSV. Hidden behind a permission gate (see [Exporting data](#exporting-data)).

### Filters
The filter dropdown is populated from values that have actually appeared in your account, so you only see options that will return results. The available groups are:

- **Offer Accepted** <br/> Sessions where the customer accepted a specific offer. Values: Support, Discount, Pause, Trial Extension, Switch Plan, Redirect URL.
- **Billing Interval** <br/> The billing interval of the customer's subscription. Values: Daily, Weekly, Monthly, Annual.
- **Subscription Age (Years)** <br/> How old the customer's subscription was when they ran the flow, in one-year ranges (`0 - 1 year(s)`, `1 - 2 year(s)`, and so on).
- **Segment** <br/> Which Cancel Flow segment the customer matched. Sessions that ran through the Primary Flow (no segment) appear under a dedicated entry at the top of the list.
- **Plan ID** <br/> The price or plan identifier from your billing provider, with the human-readable plan description shown alongside the ID.
- **Response** <br/> Survey response, listing every distinct answer your customers have selected.
- **Subscription Status** <br/> **On Trial** (customer was on a trial when the session ran) or **Active Subscription**.
- **Session Outcome** <br/> Currently exposes a single value, **Abandoned**, which limits the list to sessions where the customer opened the flow but closed it without completing any path. The group only appears for organizations that actually have abandoned sessions on file.

### Per-session row
Each row carries the customer, the outcome, supporting badges, and any feedback the customer left.

- **Recording playback** <br/> Each row begins with a play icon. If a session recording was captured, the icon is highlighted; clicking it opens the in-app session viewer. If recording was disabled or no recording is available, the icon is greyed out.
- **Customer** <br/> The customer's email is the primary label. If the email is missing, the customer ID is shown instead. A small clipboard icon copies the value to your clipboard. For accounts with the Customer Profile feature enabled, clicking the email opens the customer's profile page in Churnkey.
- **Test Mode** or **Sandbox** badge <br/> Shows whenever the session was created outside of live mode.
- **Flow name** badge <br/> The Cancel Flow the customer ran through. Reads **Primary Flow** when no segment matched, otherwise the segment name. Click the badge to open the exact published version of the flow that the customer saw, even if you have rotated A/B variants since.
- **Language** badge <br/> Shows the detected language of the customer when the flow was rendered, with an icon overlay indicating whether the content was translated automatically, translated using your manual override, or left in the default language because translation was unavailable. Hover the badge to read the full status.
- **Override Present** badge <br/> Indicates that the customer's session ran through a custom callback in your embed code (for example, your own `handleCancel` or `handlePause`). The tooltip lists which actions were overridden.
- **Outcome label** <br/> Single label summarizing how the session ended: Cancelled, Paused, Contacted Support, Redirected, Discount, Extended Trial, Plan Change, or Abandoned. Alongside the outcome you will see how long ago the session ran (hover for the exact timestamp), the customer's subscription price and billing interval when available, and an **On Trial** marker for customers who ran the flow during a trial.
- **Click-to-Cancel detail** <br/> For sessions that hit the Cancel Now button, a second line appears under the outcome with the matched region (jurisdiction) and a compliance label (**Single-Click Compliance** or **Maximal US Compliance**).
- **Survey choice and follow-up** <br/> The customer's survey choice is shown to the right of the row (truncated to fit). Below the row, the follow-up question is repeated in bold along with the customer's choice or freeform answer. A separate **Feedback:** block surfaces any free-text response the customer left in the flow.
- **Bounce indicator** <br/> A small upward-arrow icon appears on the right of the row when the session was effectively replaced by a more recent or more relevant session for the same customer within 24 hours. Hover for the explanatory tooltip.
- **Subscription age** <br/> For sessions where the underlying subscription has a creation date, the right side of the row shows how long the customer had been subscribed before they ran the flow.

### Exporting data
Click **Export Data** to pull the currently filtered list of sessions as a CSV.

- Up to 5,000 records: the file downloads in your browser immediately. Progress is shown live.
- More than 5,000 records: Churnkey queues the export, prepares the CSV in the background, and emails you a download link when it is ready. You will see a confirmation toast: **"Export is being prepared. You will receive an email with a download link shortly."** The link is valid for 24 hours.

There is no longer a hard cap on how many sessions you can export. Datasets up to roughly one million sessions have been tested.

::callout
**Export Data is restricted to the Owner and Admin roles.** Members and viewers see the button disabled, with a tooltip explaining the required role. The same restriction is enforced on the API, so it cannot be bypassed by URL.
::

If you click Export Data while a previous export is still being prepared, the second click is rejected with a notice that an export is already in progress. Wait for the email and try again from there.

## Session Outcomes
The Session Outcome is the customer's resulting action of a session. As mentioned in the Save Rate, the outcomes can be separated into two major groups: Cancelled and Saved.

The Saved Customers are distributed in more detailed results as Abandoned, Paused, Discount, Contact Support, and Redirected.

### Cancelled

<p align="center">
  <iframe src="/video/session-outcome-cancelled.mp4" frameborder="0" width="560" height="315"></iframe>
</p>

<p align="center">
  The customer went through all the steps of the flow and opted to cancel their subscription
</p>

### Abandoned

<p align="center">
  <iframe src="/video/session-outcome-abandoned.mp4" frameborder="0" width="560" height="315"></iframe>
</p>

<p align="center">
  The customer started the Cancel Flow but closed it without taking any action.
</p>

### Paused

<p align="center">
  <iframe src="/video/session-outcome-paused.mp4" frameborder="0" width="560" height="315"></iframe>
</p>

<p align="center">
  The customer accepted to pause their subscription for a certain period.
</p>

### Discount

<p align="center">
  <iframe src="/video/session-outcome-discount.mp4" frameborder="0" width="560" height="315"></iframe>
</p>

<p align="center">
  The customer accepted a coupon offer. 
</p>

### Contact Support
It's mandatory to have the [handleSupportRequest](/further-configuration#example-support-request-callback-connect-with-intercom-crisp-etc) integration. Your implemented support tool will be called once the customer clicks the button.

<p align="center">
  <iframe src="/video/session-outcome-contact-support.mp4" frameborder="0" width="560" height="315"></iframe>
</p>

### Redirected
This is the result of "Send to Custom Page". After clicking the button, the customer will be redirected within the same browser's tab to the configured link.

<p align="center">
  <iframe src="/video/session-outcome-redirected.mp4" frameborder="0" width="560" height="315"></iframe>
</p>

## Bounced Sessions

Customers may start multiple Cancel Flows in a short period of time. With multiple sessions, Churnkey only takes into consideration the most relevant session for the metrics. Sessions that are not relevant are tagged as **Bounced** and are not considered in your metrics.

The timeframe to mark a session as bounced is 24 hours. This means that the difference between the bounced and most relevant session can be a maximum of 24h.

### Example of a Bounced Session

Consider a customer with an active subscription who created two sessions within a timeframe of 5 minutes:

1. Started a Cancel Flow at 9:00 AM
2. The customer did not take any action and closed the Cancel Flow
3. Session recorded and marked as **Abandoned**
4. The Abandoned Session **increases the Save Rate**
5. After 5 minutes at 9:05 AM, the customer starts the Cancel Flow again
6. Now, they opt to **Cancel** their subscription
7. New session is generated with **Cancelled** as the outcome
8. Previous **Abandoned** session is marked as **Bounced**
9. The **Save Rate decreases** because of the Cancelled Session

::callout{icon="i-heroicons-light-bulb"}
The customer generated an Abandoned Session by step 2. Until this moment, we counted this session as a Save in the Save Rate. When they opted to Cancel by step 4, we marked their previous session as Bounced and removed it from the metrics. From here, we only consider the Cancelled Session for the Metrics.
::

![session-bounced](/img/metrics/bounced-session.png)
