Reduce Involuntary Churn
Recover failed-payment churn — prompt subscribers to update billing with a push + in-app screen during the grace/retry window.
Reduce Involuntary Churn is a Rules template that recovers subscribers who are about to be lost to a failed payment — not because they chose to leave, but because a card expired or a charge was declined. It fires on the billing_issue event, sends a push, and presents an in-app screen prompting the user to update their payment method.
This is some of the easiest revenue to save. A meaningful share of cancellations are involuntary — failed payments, not deliberate cancellations — and most of it is recoverable with a timely nudge, at zero acquisition cost.
Find it under Templates on the Rules page → Billing issue notification.
Why involuntary churn matters
- It's a large, hidden slice of churn that looks like users leaving but is really expired cards and failed charges.
- It's recoverable — the user wants to keep their subscription; they just need to update a card.
- The in-app prompt is the highest-leverage touch — an on-device prompt to fix billing recovers far more than a push alone, which is exactly the mechanic this template uses.
How the stores handle a failed renewal
When a renewal fails, the platform doesn't cancel immediately — it opens a recovery window:
- Apple: the subscription enters Billing Retry (daily retries for up to ~60 days). If Billing Grace Period is enabled, the user keeps full access while Apple retries. See Handling the App Store billing grace period.
- Google: a grace period (configurable, up to ~30 days) keeps access during retries; after it, Account Hold suspends access while retries continue.
Apphud's billing_issue event fires when the user enters this window — i.e. exactly when a nudge is still worth sending.
Enable grace period firstA billing-issue rule recovers far more revenue when the store's grace period is enabled, because the user keeps access (and goodwill) while you prompt them. Without it, recovery falls back to platform defaults.
How the template works
| Piece | Default |
|---|---|
| Trigger | billing_issue — fires when a renewal fails and enters retry/grace. |
| Push | A default push you can edit per locale. |
| In-app action | A built-in billing-issue screen prompting the user to update their payment method. |
Bound the screen with an expiration timeThe in-app screen is shown on the next app open while the rule's notification is still pending. Apphud does not automatically check whether the billing issue was resolved in the meantime — a recovered user can still see it. To avoid a stale prompt, set a Screen expiration time (TTL) on the rule's Configuration tab so the pending screen is only valid for a limited window, or gate it in your app with the
apphudShouldShowScreenSDK delegate.
Set it up
- Open Templates on the Rules page and Add rule on Billing issue notification.
- Configuration — confirm the
billing_issuetrigger and pick an audience if needed. - Push notification — write a helpful, non-alarming message (per locale) — see the tone note below.
- In-app action — the built-in billing-issue screen is attached automatically.
- Save, then Enable.
Recovery sequence
A single push rarely recovers a payment — you want to nudge across the whole grace window. That takes two rules working together:
1. Immediate nudge — event-triggered
A rule on billing_issue sends the first push the moment the issue is detected: "There was a problem renewing your subscription. Tap to update your payment method and keep your access." → in-app screen with a one-tap path to the store's payment settings. This fires once per billing issue.
2. Ongoing reminders — scheduled
To keep nudging over the multi-day grace window, add a separate Scheduled (repeating) rule whose audience is Subscription status = grace — users currently in a billing-issue grace period. On your chosen cadence (e.g. daily) it re-prompts everyone still unresolved. Users who fix their payment leave the grace status and automatically stop receiving it; when the grace period ends, they leave the audience too.
Why two rulesAn event-triggered rule fires only once per
billing_issue— it can't space reminders across several days. The scheduled rule does the multi-day follow-up by sweeping thegrace-status audience on a cadence. See Use Cases.
Best practices
- Be helpful, not alarming. The user didn't do anything wrong — an expired card isn't a failure on their part. Accusatory copy hurts recovery.
- Make it one tap. Don't dead-end users on a "billing issue" message — give a direct path to update payment.
- Repeat within the window. Front-load the first touch and add reminders before the grace period ends; recovery needs repetition.
- Enable grace period on both stores — it's the biggest single multiplier on recovery.
FAQ
When exactly does billing_issue fire?
billing_issue fire?When a scheduled renewal fails and the subscription enters the store's retry/grace window — not when the user actively cancels. See Event Types → Billing issue.
Does the user keep access during a billing issue?
If the store's grace period is enabled, yes — they keep full access while the platform retries. If not, access depends on platform defaults (Apple retry / Google Account Hold).
What happens if the payment recovers before the user opens the app?
The pending screen isn't withdrawn automatically — Apphud doesn't re-check the billing state before presenting, so a recovered user can still see it. Limit this by setting a Screen expiration time (TTL) on the rule (so the prompt is only valid for a short window), or gate presentation in your app with the apphudShouldShowScreen SDK delegate.
How do I run reminders over several days?
You don't schedule off the billing_issue event — an event-triggered rule fires only once. Add a separate Scheduled (repeating) rule whose audience is Subscription status = grace (users currently in a billing-issue grace period). It re-prompts everyone still unresolved on your cadence (e.g. daily); users who fix their payment leave the grace status and stop receiving it. See Use Cases.
How do I measure recovery?
Track billing-recovery metrics in Renewals Performance and use the Rule filter on revenue charts in Reports.
Updated 27 days ago
