Churn & dormancy
Weekly Growth review · ISO week undefined · undefined undefined · undefined · Generated undefined
Resellers pay per lead, not by subscription — so we lose them silently: they buy less, then stop, and drift out the back with no cancellation to count. This page is built around one decision: who do I intervene with now to protect revenue, is recovery working, and is there a cheaper way to hit the number by winning them back rather than buying new?
Fact · Cause · Action
AI-generated — stub. £4,740 of monthly revenue is at risk out the back, some of it high-value — and it's cheaper to win it back than to replace it. Two of this month's new-lapsers fell from the high-frequency band (£900 of the risk); recovery is running but the rate is slipping; and at £25 a save against £160 new CAC, the pool is a cheaper route to the revenue number than more acquisition — if it's big enough.
| Section | Fact | Cause | Proposed action |
|---|---|---|---|
| Who to save now | 2 of 11 resellers newly lapsed this month fell from the High-frequency band and carry ~£900 of the £1,860 at risk — from just two accounts. | A high-frequency reseller going quiet is abnormal — a service, satisfaction or competitor problem, not natural decay. | Personally save the 2 ex-High lapsers this week; each is worth roughly fifteen once-a-month ones. |
| Are interventions working | Recovery rate on worked lapsers has slipped to 40%, below the 50% bar, even as we work more of them. | The at-risk pool is growing faster than we can reach it, so we're catching resellers colder. | Work the lapsed list earlier and faster, starting with the early-lapsed tier where saves are cheapest. |
| Reactivate vs acquire | A reactivation costs ~£25 against ~£160 new CAC, and the pool holds £4,740 of recoverable monthly revenue. | Winning back a warm, already-onboarded reseller is far cheaper than acquiring a cold new one. | Divert budget from new acquisition into working the pool while it's this cheap and this full — if it can carry the revenue target. |
| Leading indicators | The share of active resellers with declining logins has risen from 10% to 22% — disengagement building before any purchase gap shows. | Product usage falls before ordering does; the purchase-gap metric lags by weeks. | Treat a login-decline flag as an early lapsing trigger — intervene before day 30, not after 90. |
Who to save now — revenue at risk
This week. The money is at the top: High is 2 accounts worth £900, Medium 3 worth £600, Low 6 worth £360 (expected decay). The two ex-High accounts are still early-lapsed (34 and 41 days) — high-value and still warm. · AI stub
Catalog Error: Table with name base_churn_savelist does not exist!
Did you mean "information_schema.key_column_usage"?
LINE 3: from demo.base_churn_savelist order by band_order, resellers...
^State movement — who moved where
This week. The machine runs the wrong way. ~4 active resellers slide to lapsed each week (the red) against ~2 recovered back (green); lapsed deepens into dormant faster than it recovers; hard cancels are the thin dark tail. Recovery is real but outpaced by the slide. · AI stub
Catalog Error: Table with name base_churn_flow does not exist!
Did you mean "pg_catalog.pg_tables"?
LINE 2: ... FROM (select week_start::date as week_start, flow, value from demo.base_churn_flow where state = 'Active' order by flow_o...
^Catalog Error: Table with name base_churn_flow does not exist!
Did you mean "pg_catalog.pg_tables"?
LINE 2: ... FROM (select week_start::date as week_start, flow, value from demo.base_churn_flow where state = 'Lapsed' order by flow_o...
^Catalog Error: Table with name base_churn_flow does not exist!
Did you mean "pg_catalog.pg_tables"?
LINE 2: ... FROM (select week_start::date as week_start, flow, value from demo.base_churn_flow where state = 'Dormant' order by flow_...
^The slide to dormant
This week. Active is up (42 → 54), but the at-risk pool has grown faster — lapsed + dormant from 22 to 40. A rising share of the base is drifting quiet while acquisition fills the front. · AI stub
Catalog Error: Table with name base_churn_states does not exist!
Did you mean "information_schema.key_column_usage"?
LINE 2: ... (select week_start::date as week_start, state, count from demo.base_churn_states order by state_order, week_start
^Reactivation burndown — and the acquisition trade-off
This week. The pool holds £4,740 of recoverable monthly revenue across 40 resellers. Early and mid lapsed reactivate for ~£15–£30 — far under the £160 new CAC; dormant costs ~£180, above the CAC line. The pool is growing, not burning down. · AI stub
Catalog Error: Table with name base_churn_pool does not exist!
Did you mean "pg_catalog.pg_description"?
LINE 2: ... FROM (select week_start::date as week_start, tier, count from demo.base_churn_pool order by tier_order, week_start
^Catalog Error: Table with name base_churn_tier_cost does not exist!
Did you mean "information_schema.character_sets"?
LINE 2: ...* FROM (select week_start::date as week_start, tier, cost from demo.base_churn_tier_cost order by tier, week_start
^Where to invest — the pool by tier
This week. Early-lapsed resellers carry £1,920 of recoverable revenue at ~£15 a save — by far the best return — down to dormant at £180 a save. The churned tier is a hail-mary: 7 remain contactable within the GDPR window. · AI stub
Catalog Error: Table with name base_churn_tiers does not exist!
Did you mean "information_schema.table_constraints"?
LINE 2: ..., resellers, recoverable_rev, cost_to_recover, verdict from demo.base_churn_tiers order by tier_order
^Leading indicators — before the purchase gap
This week. 22% of active resellers show declining logins, up from 10% — a growing pool disengaging while still nominally active, before any purchase gap opens. · AI stub
Catalog Error: Table with name base_churn_leading does not exist!
Did you mean "information_schema.table_constraints"?
LINE 2: ... week_start::date as week_start, pct_active_at_risk from demo.base_churn_leading order by week_start
^
