churn-winback-retention

Pushlane: Involuntary vs Voluntary Churn Push

Separate billing-failure recovery from intentional cancellation with distinct RevenueCat events, copy, exits and outcomes for subscription push flows.

Involuntary and voluntary churn need different push notification tactics. A failed charge is an account problem the subscriber may want to fix. Turning off auto-renew is a decision that can occur while access remains active.

Pushlane receives verified RevenueCat lifecycle events, but the safest flow uses the event it actually exposes rather than guessing a cancellation reason. Build billing recovery from revenuecat.billing_issue, and keep cancellation messaging cause-neutral unless your own trusted state supplies more detail.

Name the customer state precisely

Use four distinct states:

  1. Billing issue: a charge attempt failed, but access may continue during a retry or grace period.
  2. Auto-renew off: the subscription is canceled for renewal purposes, but current access may remain.
  3. Expired: entitlement access ended.
  4. Recovered or resubscribed: a verified renewal or purchase restored the paid path.

Do not collapse all four into "churned." That label produces false copy and broken stop rules.

RevenueCat's event reference states that BILLING_ISSUE does not mean the subscription expired. It also distinguishes cancellation from expiration.

Use the billing issue event for involuntary churn

Pushlane bridges BILLING_ISSUE as revenuecat.billing_issue. That is the clearest entry for a payment-recovery flow.

revenuecat.billing_issue
  -> branch: is_production is true
  -> branch: reachable, consent-eligible iOS device
  -> send neutral account help
  -> wait through the justified retry window
  -> exit on revenuecat.renewal
  -> exit or transfer on revenuecat.expiration

Use the destination the store and app actually support. A generic app home screen is not enough. If the app cannot deep link directly to billing management, open a clear account-help screen with accurate steps.

The billing issue guide covers grace periods and recovery exits.

Keep billing copy factual

Your payment needs attention

Review your App Store billing details to keep premium access uninterrupted.

Do not say access is gone when the subscription remains active. Do not claim the card was declined if the event does not expose that detail. Do not expose a payment method or balance on the lock screen.

Stop immediately on verified renewal. Store retries can succeed without a notification tap, so the state event matters more than engagement telemetry.

Treat voluntary cancellation as a decision

A CANCELLATION event can occur before expiration. RevenueCat's common webhook flows shows that the customer can retain entitlement access until the period ends.

Pushlane currently bridges revenuecat.cancellation but does not expose cancel_reason as a flow property. A generic Pushlane branch cannot reliably label every cancellation voluntary. Use cause-neutral copy or maintain a validated server attribute when cause-specific behavior is essential.

Useful message jobs while access remains include:

  • confirm the actual access window on a secure destination;
  • help the user complete remaining premium work;
  • provide a preference or support path;
  • stop ordinary promotional pressure;
  • exit on revenuecat.uncancellation.

Avoid an immediate comeback discount. The person may still be using what they paid for and may have canceled for reasons a discount cannot solve.

Start win-back only after expiration

Expiration changes the job. The former subscriber no longer has the same access state, and a credible return offer can be evaluated separately.

revenuecat.expiration
  -> branch: prior meaningful premium value exists
  -> wait for a real return reason
  -> send current value, not a cancellation reminder
  -> exit on revenuecat.initial_purchase or revenuecat.renewal

Use the win-back playbook for expired users. Do not send win-back copy between cancellation and expiration.

Define precedence across the three flows

Billing recovery, cancellation support and win-back can overlap unless precedence is explicit.

  1. Renewal or purchase stops all three.
  2. Billing issue pauses generic cancellation messaging while account help is active.
  3. Uncancellation stops cancellation support.
  4. Expiration ends remaining-access messaging and may begin win-back.
  5. Opt-out, logout and lost reachability stop delivery everywhere.

If lifecycle events arrive close together, compare their event timestamps or reconcile current entitlement state. Do not rely only on arrival order.

Test the state transitions, not just each message

Use one sandbox identity to exercise a billing issue, recovery, cancellation, uncancellation and expiration where the stores allow it. Record the raw RevenueCat event, the Pushlane event name, the flow decision and the final customer state for every step.

The important test is what does not send. A renewal should cancel a pending payment reminder. An uncancellation should remove the user from cancellation support. Expiration should prevent copy that promises remaining paid access. Repeat the sequence after a delayed webhook and after an app reinstall so identity and event order cannot quietly create a contradictory push.

Keep this evidence with the flow version. A green delivery test proves the device received a message, not that lifecycle precedence is correct.

Measure a different outcome for each job

For billing recovery, measure verified renewal after the issue. For cancellation support, measure uncancellation only when that is the stated goal, and include useful product action or support resolution separately. For win-back, measure restored paid access after expiration.

Track opt-outs, contradictory messages, suppressions and destination failures as guardrails. A high open rate does not rescue a false account claim.

When volume supports a holdout, assign it within the same lifecycle state. A billing-issue cohort and a voluntarily canceled cohort do not share the same baseline.

Separate support from persuasion

Involuntary churn calls for accurate account help. Voluntary cancellation calls for respect and clear remaining access. Expiration creates a later opportunity to win back.

Use the verified event, write only what it proves and let every recovery event stop the message sequence immediately.

Pushlane: Involuntary vs Voluntary Churn Push