Involuntary Churn Strategy

Turning your ESG into a competitive advantage

Involuntary Churn Strategy

Turning your ESG into a competitive advantage

Wind turbines on mountain ridges during sunset — representing renewable energy and clean infrastructure
Wind turbines on mountain ridges during sunset — representing renewable energy and clean infrastructure

Why Your Razorpay Dashboard Shows Healthy Churn While Collection Revenue Leaks

A Mumbai-based B2B SaaS founder pulled up their Razorpay Subscriptions dashboard last quarter and saw the number that mattered: cancellations were low, active subscriptions were climbing, and new signups were arriving on schedule.

MRR should have been growing. Instead it had been flat for two months.

The answer wasn't in the cancellation report. It was in the failed payment log — ₹2.8L in subscription attempts that had not cleared, sitting across expired mandates, gateway failures, and retry exhaustion. The subscriptions were active. The customers were still using the product. The money was not in the bank.

What Razorpay shows you vs what it doesn't

Razorpay Subscriptions tracks two things in parallel: subscription state and payment state. The dashboard prioritises subscription state.

A subscription marked "Active" means the mandate exists and the billing schedule is running. It does not mean the last invoice cleared. A mandate with confirmed status means the customer agreed to recurring debit at setup. It does not mean the next debit will succeed.

This separation matters because the failure modes in India are specific to the payment rail — and each rail creates a different recovery problem.

Payment rail

How it fails

What the Razorpay dashboard shows

UPI Autopay

Insufficient funds, revoked mandate, pre-debit notification not sent

Subscription still "Active" until retry window exhausts

eNACH / card mandate

Bank-side decline, tokenization failure, card expired

payment.failed webhook fires; subscription state may lag

Card recurring (tokenized)

Soft decline vs hard decline — require different responses

Failure code (GATEWAY_ERROR vs BAD_REQUEST_ERROR) in event log, not the main dashboard

The failure code is the routing input for recovery. Most founders never look at it.

Why UPI Autopay creates a specific blind spot

When a UPI Autopay debit fails, the pre-debit notification was already sent 24 hours earlier — that's an RBI requirement. The customer may have seen the notification. They may not have. The debit failed regardless.

Razorpay has no built-in obligation to notify the customer after failure. The subscription.pending webhook fires. The subscription stays visible as recoverable. Without an action — retry, WhatsApp message, or payment update link — the subscription waits.

For transactions above ₹15,000, RBI's AFA requirement means the customer must authenticate again even if the mandate was previously confirmed. Retrying without asking the customer to act will fail again.

This is the part most founders discover after three or four identical retry failures on the same invoice.

The six questions that measure actual collection health

A cancellation report tells you who chose to leave. It cannot tell you how much committed MRR was attempted, how much failed, which failures were retryable, and how much was recovered before anyone counted it as lost.

For every billing cycle, the right diagnostic is:

Question

Why it matters

How much MRR was scheduled for collection?

Establishes the real collection base — not expected MRR from plan pricing

How much cleared on first attempt?

Shows baseline payment health across your mandate mix

How much failed?

Identifies the recovery pool — this is the number that should sit next to cancellation MRR

Which failures were retryable without customer action?

Prevents exhausting retry attempts on hard declines or revoked mandates

Which failures needed customer action?

Separates gateway retry from WhatsApp message from payment update link

How much was recovered before the billing cycle closed?

Shows whether your current recovery flow is working or just logging

Running this reconciliation monthly — even in a spreadsheet pulling from Razorpay's export and webhook logs — shows the collection gap directly. Most founders who do this for the first time find 8–15% of attempted MRR sitting unrecovered, uncounted, and never separated from their active subscription count.

Collection churn vs cancellation churn

Western dunning writing separates voluntary churn (customer cancelled) from involuntary churn (payment failed). That distinction is useful but incomplete for India.

In India, involuntary churn has sub-categories that require different responses:

  • Mandate churn: UPI Autopay mandate revoked or expired after a bank account change — the customer may still want the product

  • Payment-state churn: Subscription is active in Razorpay but no payment has cleared in the current cycle — a "zombie active" subscription

  • Delinquent churn: The retry window has exhausted and the customer was never reached — involuntary at the start, voluntary by the end

Each of these requires a different next action. Mandate churn needs a re-registration link. Payment-state churn needs a payment update or WhatsApp nudge before the retry window closes. Delinquent churn needs a re-engagement sequence before the customer is counted as lost.

A single "failed payments" number does not distinguish them. The Razorpay dashboard does not distinguish them by default. Without reading the failure code and the mandate state together, the correct action for each customer is invisible.

Where SubsShield fits

SubsShield sits between the Razorpay webhook and the customer communication layer. When payment.failed fires, SubsShield reads the failure code and mandate state, routes the event to the right recovery path — retry, WhatsApp action, email, or mandate re-registration — and tracks whether the payment cleared.

It is not a replacement for Razorpay. It is the layer that handles what happens after the gateway reports a failure — because the gateway's job ends there.

If you pulled your Razorpay failed payment log for the last 30 days and separated mandate failures from gateway declines from retry exhaustion — how many of those failure states have a distinct recovery action in your current stack, and how many are being retried the same way regardless of failure type?