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 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 → Canceled.
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).
Unpaid
Subscriptions currently past due, unpaid, or incomplete.
At risk is the billing-cycle amount at stake — 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 that already have a running dunning sequence.
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 has a running save.
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 → Canceled), not every subscription ever canceled. Coverage is the share that already has a running win-back. The outcome block on this card stays all time, even if you change the period elsewhere on the page: the default sequence waits 30 days before its first email, so a short window would almost always read as a 0% win rate.
Reading a card's numbers
Every card has two blocks: current exposure, then what happened over the period.
| Block | What it shows |
|---|---|
| At risk | A right-now snapshot, never affected by the period selector. |
| In progress | Runs executing right now, with the cycle amount they're defending. |
| Coverage | The share of "at risk" subscriptions that already have a running sequence of the same flow, capped at 100%. |
| 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:
- No follow-up groups everything that didn't land — never covered, a cancelled sequence, one that finished without success, or a technical failure — deliberately merged into one neutral bucket instead of four.
- 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.00 · $500.00).
A case never touched before you connected Stripe only shows up under "No follow-up" on the "All time" period — a 30d or 90d window has no arrival date to give it, so it stays invisible until the window is wide enough.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.
Recent activity
The last five runs, live: status, customer, trigger type, sequence name, start time. Click a row to open it. Toasts also pop in real time — mute them in Settings → General → Notifications; lists keep refreshing even with toasts off.
