Dunning Optimization

Dunning Optimization for Fitness Apps

How to fix failed payments for fitness apps. Practical dunning optimization strategies tailored for fitness app product and growth teams.

RD
Ronald Davenport
March 31, 2026
Table of Contents

Fitness apps lose an average of 9–12% of their active subscriber base every year to involuntary churn — failed payments that had nothing to do with the member's intent to cancel. That number compounds fast. If your app has 50,000 paid subscribers at $15/month, a 10% involuntary churn rate costs you $900,000 annually before you've lost a single intentional cancellation.

The frustrating part: most of that revenue is recoverable. Industry data from Recurly's subscription benchmarks puts average payment recovery rates between 70–80% when dunning is handled correctly. The average app with no structured retry logic recovers less than 40%.

Dunning optimization is the system you build to close that gap.

What Dunning Optimization Actually Means

Dunning is the process of communicating with subscribers after a payment fails to recover the transaction. Dunning optimization means making that process systematic — timing retries strategically, segmenting your outreach by user behavior, and combining pre-failure alerts with post-failure recovery sequences.

In fitness apps specifically, the problem has a seasonal shape. Payment failures spike in January when users sign up impulsively, hit their card limit, and then ignore recovery emails because they've already mentally quit. They spike again in late Q3 when summer motivation fades. Your dunning system needs to account for this behavior pattern, not treat every failed payment the same way.

There are two categories of dunning work:

  • Pre-dunning: Proactive alerts sent before a payment fails — typically when a card is about to expire or when a billing attempt is upcoming
  • Reactive dunning: The retry logic and communication sequence that fires after a payment actually fails

Both matter. Most apps only build the reactive side and wonder why recovery rates stay low.

The 5-Step Dunning Framework for Fitness Apps

Step 1: Audit Your Current Retry Logic

Before building anything new, map what you already have. Pull your payment processor data (Stripe, Braze, or your billing layer) and answer three questions:

  1. How many retry attempts do you make per failed payment, and at what intervals?
  2. What is your current recovery rate by retry attempt number?
  3. What percentage of failed payments have zero follow-up communication attached?

Most fitness apps retry on Day 1, Day 3, and Day 7 — and stop there. The data consistently shows that a Day 14 and Day 21 retry recovers an additional 8–12% of initially failed transactions. Cards get updated. Paychecks land. Users remember they actually like your app.

Set a baseline. You cannot optimize what you haven't measured.

Step 2: Build Pre-Dunning Card Expiry Alerts

Card expiry is preventable failure. Visa and Mastercard provide updated card data through account updater services, but that doesn't catch everything — particularly debit cards and prepaid cards common in fitness app demographics.

Build an automated alert that fires 30 days before a card expires, then again at 14 days. Keep these messages transactional and frictionless:

  • Surface the expiry date clearly
  • Deep-link directly to the payment update screen inside the app — not a web page, not the account settings landing screen
  • Frame it around continuity of their progress ("Your streak data, workout history, and custom plans stay intact when you update before [date]")

Tools like Customer.io or Braze handle this trigger well when connected to your billing layer. Set the segment filter to `card_expiry_date <= 30 days from now AND subscription_status = active` and build a two-message sequence from there.

Recovery rate improvement from pre-dunning alone: typically 15–25% reduction in expiry-related failures.

Step 3: Design a Tiered Post-Failure Sequence

Not every failed payment deserves the same response. Segment your recovery communication by user engagement level at the time of failure.

High-engagement users (logged a workout in the last 14 days): These users didn't mean to churn. Lead with urgency and continuity messaging. "Your account is on hold — update your payment to keep your streak alive." Push notification first, email second, SMS third if you have consent. Move fast — retry the payment within 24 hours.

Low-engagement users (no activity in 30+ days): These users may have already mentally left. A hard payment recovery pitch will be ignored. Lead with re-engagement first. "We noticed you haven't logged in — here's what's new in [App Name]" with a secondary CTA to update billing. You're selling the product again before you ask for money.

New subscribers (under 60 days): Failed payments in this window are often card-limit issues from people who signed up during a promotion. Move fast, offer a grace period, and consider a one-click payment update flow. First 60 days are when habit formation happens — losing someone here costs more than the immediate revenue.

A baseline sequence looks like this:

  1. Day 0 (failure): In-app banner + push notification
  2. Day 1: Email with direct payment update link
  3. Day 3: Retry payment + follow-up push if no update
  4. Day 7: Email with stronger urgency language
  5. Day 14: Final retry + email with optional downgrade offer
  6. Day 21: Last attempt + offboarding trigger if no recovery

Need help with dunning optimization?

Get a free lifecycle audit. I'll map your user journey and show you exactly where revenue is leaking.

Iterable handles this kind of multi-channel orchestration cleanly, especially when you need to branch logic by engagement segment.

Step 4: Reduce Friction at the Payment Update Step

Your recovery rate is only as good as your payment update experience. Most fitness apps lose 20–30% of recovering users at the update screen because the flow requires too many steps.

Fix the obvious things:

  • Accept Apple Pay and Google Pay on the update screen — reducing keystrokes recovers measurable revenue
  • Auto-retry on update: When a user updates their card, retry the payment immediately. Don't make them submit a separate action.
  • Clear error messaging: "Your card was declined" tells a user nothing. "Your card was declined — this is often a temporary hold. Try a different card or contact your bank." gives them a path forward.

Step 5: Measure Recovery Rate by Cohort, Not Overall Average

Your overall recovery rate hides the real story. Segment your measurement by:

  • Acquisition channel (organic vs. paid users have different recovery behaviors)
  • Subscription tier (annual subscribers recover at higher rates — they have more skin in the game)
  • Failure type (soft decline vs. hard decline vs. expired card require different responses)

Benchmark targets to aim for by 90 days of optimization work:

  • Overall recovery rate: 65–75%
  • High-engagement user recovery rate: 80%+
  • Card expiry-related failures recovered pre-dunning: 30%+ reduction

The Scenario: January Churn Spike

A fitness app running a New Year promotion brings in 8,000 new paid subscribers in the first two weeks of January. By February 1st, 640 of those subscribers (8%) have a failed first payment — many from prepaid cards and debit cards that hit their limit after holiday spending.

Without a structured dunning system, the app recovers 38% of those failures: 243 users. That's $5,850/month retained.

With pre-dunning expiry alerts, a tiered post-failure sequence, and a frictionless payment update flow, recovery climbs to 72%: 461 users. That's $11,064/month retained — a difference of $5,214/month from one cohort, in one month.

That math scales with every acquisition push you run.

Your Next Step

Pull your last 90 days of payment failure data from your billing provider. Calculate your current recovery rate — failed payments recovered divided by total failed payments. If that number is below 65%, you have a recoverable revenue problem that a structured dunning system will fix.

Start with Step 1 from the framework above. Map what you have before building what you need.

---

Frequently Asked Questions

How long should a dunning sequence run before marking a subscriber as churned?

Most fitness apps run sequences for 21–28 days. Beyond that, recovery rates drop below 5% and you're better served moving the user into a win-back campaign rather than a payment recovery flow. Annual subscribers are worth extending to 45 days given the higher revenue at stake.

Should I pause a member's access immediately when a payment fails?

Not immediately. A 3–7 day grace period before restricting access is standard practice and measurably improves recovery rates — users who can still use the product have a reason to update their payment. Hard-gating on Day 1 creates resentment and accelerates voluntary cancellation decisions.

What's the difference between a soft decline and a hard decline?

A soft decline means the payment failed due to a temporary issue — insufficient funds, bank hold, or processing error. These are worth retrying. A hard decline means the card was flagged as fraudulent, blocked, or invalid — retrying will not work, and you need the user to provide a new payment method. Your retry logic should branch on decline code.

Which tools handle dunning automation well for fitness apps?

For communication orchestration, Braze, Iterable, and Customer.io all handle multi-channel dunning sequences effectively. For retry logic and decline management at the billing layer, Stripe's built-in Smart Retries is a solid starting point, with Recurly and Chargebee offering more configurability for teams with complex subscription structures.

Related resources

Related guides

Get the Lifecycle Playbook

One framework per week. No fluff. Unsubscribe anytime.