Sergey Kopanev: you sleep — agents ship

Go Back
B2C Funnel Systems · Part 11

They Did Not Cancel. The Bank Did.


Users stopped paying.

I assumed they quit.

Half of them did not quit. Their card got declined.

I saw this after splitting churn into two buckets in a B2C health funnel. Voluntary churn looked like a product problem. Involuntary churn looked like a billing problem.

They were not the same problem. They did not have the same fix.

The Default Assumption

When a subscription lapses, the default story is: the user left.

Product adds a retention feature. Marketing sends a win-back email. Growth runs a discount campaign.

None of that helps when the user never chose to leave.

The bank said no. The charge failed. The subscription expired.

The user might still be opening the app. They just stopped paying because nobody told them their card declined.

Why Health Funnels Get Hit Harder

Health and fitness subscriptions sit in a high-risk merchant category for banks.

Decline rates in this category are higher than most teams expect. Not edge cases. Structural.

Ramp-up pricing makes it worse. A user signs up at a low introductory price. The renewal jumps. The bank sees a charge increase from an already-suspicious category. Decline.

Weekly plans fail first. Short billing cycles mean more decline opportunities per month. Each failed charge is a churn event the user did not initiate.

What I Measured

I split one metric into two.

churn_voluntary — user canceled, refunded, or let the subscription expire after explicit action.

churn_involuntary — payment declined, card expired, insufficient funds, bank block.

The ratio surprised me.

Involuntary churn was not a rounding error. It was a significant share of total churn. In some weekly cohorts, it was the majority.

The Dunning Fix

I added three layers.

  • automatic retry schedule: retry the charge at increasing intervals over seven days
  • user notification: plain email telling the user their payment failed and linking to update billing
  • grace period: keep access active during the retry window instead of cutting off immediately

The retry schedule alone recovered a measurable share of failed charges without the user doing anything. The card worked on the second or third attempt. Temporary hold. Daily limit. Timing issue.

The notification email recovered another slice. Users updated their card. They did not know it had failed.

What Did Not Work

Win-back campaigns sent to involuntary churners.

The user did not leave. Sending “we miss you” to someone whose card declined is noise. They do not need re-engagement. They need a working payment method.

Discount offers for declined users made it worse. Lower charge amount sometimes triggered different bank rules. The discount expired. The full charge hit. Another decline.

Segment the message by churn type. Voluntary churners might respond to a win-back. Involuntary churners need a billing update link.

The Scorecard Change

I added two lines to the channel scorecard.

  • involuntary_churn_rate
  • recovery_rate_from_dunning

If involuntary_churn_rate rises on a channel, the problem is not product-market fit. It is payment-method quality of that traffic segment.

If recovery_rate_from_dunning drops, the retry schedule or notification flow needs work. Not the product.

Different root cause. Different dashboard. Different owner.

Trade-Off

Dunning infrastructure takes engineering time. Retry logic. Email flows. Grace period handling. Edge cases around partial payments and plan changes.

It is not glamorous work.

It recovers revenue that was already earned.

That math is simple.

Takeaway

Split churn into voluntary and involuntary before diagnosing anything.

If the bank is the problem, product fixes will not help.

Fix the billing. Then measure what is left. That remainder is the real product churn.


This concludes the B2C Funnel Systems series.