Overview
A unified recovered total, then one card per flow: Unpaid, Leaving, Win-back.
The recovered total, and one card per flow
Overview is the first item in the menu. A new workspace also shows a small Get started panel in the bottom-right: a progress bar and the next step, which expands into a checklist. Click a step to open the matching page. Closing it before you're done parks a circular progress above Documentation in the sidebar — click that to bring the panel back. Once every required step is done, the owner can hide it for the workspace. Finishing the list does not turn recovery on by itself.
A unified total shows what churnhook has recovered over the selected period, across every flow, with the breakdown right next to it. Below it, one card per flow — Unpaid, Leaving, Win-back — never mixed. Each card opens its list: Unpaid opens To handle → Unpaid, Leaving opens To handle → Leaving, Win-back opens To handle → Win-back.
The top-right badge is Active or Paused. Active needs both: the matching switch on in Settings → Churnhook, and a sequence you own that is Active for that flow. Catalog examples do not count. Hover the badge to see which of the two is missing.
The recovered total
The period selector (30 days / 90 days / all time) changes this total and all three cards — except the outcome block on the Win-back card, which always stays all time (see why below).
Churn rate
This is every customer who lost their last active subscription this period — the same definition Stripe's own dashboard uses. Active or past due only counts as active; trial and paused subscriptions don't count, and canceling or going unpaid both count as churn. What Leaving is doing about it already shows on the Leaving card below, so it isn't repeated here.
On all time, the rate shows as "−%" with an info icon instead — reconstructing who was active that far back isn't reliable past the sync's cancellation-history window, and for most tenants that gap never closes.
Unpaid
Subscriptions currently past due, unpaid, or incomplete.
At risk is the billing-cycle amount at stake, right now — a monthly €100 and a yearly €1,200 in the same currency add up to €1,300, not two separate lines. For a yearly subscription, that amount is due now. Coverage is the share of those subscriptions (by count, not by amount) that already had an Unpaid sequence at some point — even one that already finished without success.
Leaving
Every still-live subscription Stripe has marked to end at period close.
At risk is the full list of scheduled cancels, not just the next few days. For a yearly plan, that amount is the next cycle if they stay — not cash due today. Coverage is the share that already had a Leaving sequence at some point, even one that already finished.
Win-back
Canceled subscriptions still in a win-back window: a win-back is running, or they're still enrollable on the live sequence.
At risk is this same list (To handle → Win-back), not every subscription ever canceled. Coverage is the share that already had a win-back at some point, even one that already finished. The outcome block on this card stays all time, even if you change the period elsewhere on the page: a win-back often waits until next month before the first email, so a short window would almost always read as a 0% win rate.
Reading a card's numbers
Every card has three blocks: current exposure, coverage, then what happened over the period.
| Block | What it shows |
|---|---|
| At risk now | A right-now snapshot, never affected by the period selector. |
| Coverage | Of the subscriptions "at risk" right now, the share (by count) that already had a sequence of the same flow at some point — even one that already finished, won or not. |
| Never taken on | The "at risk" subscriptions that have never had a sequence at all. |
| Outcome for the period | What entered the flow within the selected window — not what's still open. A won case is no longer "at risk", but it still counts here. |
Inside the period's outcome:
- In progress are the runs still executing, with the cycle amount they're defending. After the last email, that includes 72 hours on the sequence's Closing step.
- No follow-up groups sequences that finished without success — cancelled, finished with no answer, or a technical failure — into one neutral bucket instead of three. It does not tick the moment the last email went out.
- Won means recovered: invoice paid, an offer accepted, a pause confirmed, a cancel undone, or a win-back Checkout paid.
- Win rate is Won ÷ (Won + No follow-up). Cases still in progress never enter this ratio.
Amounts are always the Stripe cycle price, never MRR — a yearly plan is not divided by 12. Different currencies stay separate (€1,300 · $500).
A case stays "covered" even after its sequence finished without a result — Coverage answers "have we ever tried," not "is something running now." Only "Never taken on" means no sequence has ever run on it.Failed runs
When a run fails on our side (a Stripe or email error, never a customer decision), a red line appears under the cards linking to Activity → Runs filtered on failures. It disappears once there are none.
The Overview refreshes live. Toasts also pop in real time — mute them in Settings → Churnhook → Notifications; lists keep refreshing even with toasts off. The full run history lives in Activity → Runs.
