
iOS win-back offers: pairing App Store promotions with in-app flows
Apple win-back offers give you a promotional lever. Here is how to surface them inside Rheo win-back journeys for lapsed subscribers.
Apple's win-back offers give subscription apps a structured way to re-engage lapsed subscribers with discounted or extended promotions inside the App Store purchase flow. They are powerful when paired with the moment a user is most likely to return: opening your app after churn, responding to a lifecycle email, or tapping a deep link from a campaign.
Used alone, win-back offers are easy to miss. Users never see them unless you surface the right message at the right time. In-app win-back flows bridge that gap: you explain the offer, personalize the pitch, and route users into Apple's redemption experience with context intact.
What iOS win-back offers are
Win-back offers are App Store subscription promotions targeted at former subscribers who are eligible under Apple's rules. They differ from introductory offers (new subscribers) and promotional offers (active or paused subscribers in some cases).
At a high level:
- Configured in App Store Connect per subscription product.
- Presented through StoreKit when your app initiates the purchase flow with the correct offer signature.
- Discount types can include pay-up-front, pay-as-you-go, or free for a limited period, depending on product setup.
Apple documents eligibility, offer types, and API requirements in the Subscription Offer Codes and win-back offer guides. Treat those docs as the source of truth for policy details that change with iOS releases.
Eligibility and lifecycle timing
Not every churned user qualifies. Eligibility is determined by Apple based on subscription history, product configuration, and regional availability.
Practical implications for product teams:
| User state | Typical approach |
|---|---|
| Recently lapsed (7–30 days) | In-app win-back flow + offer |
| Long lapsed (90+ days) | Email or paid re-engagement + deep link into flow |
| Voluntary cancel vs billing failure | Different copy and urgency |
| Never subscribed | Use introductory offer, not win-back |
Trigger in-app win-back flows from:
- App open after subscription expiration detected via RevenueCat or App Store Server Notifications.
- Explicit entry points such as "Restore access" on a gated feature.
- Deep links from email or push that open a dedicated win-back channel in Rheo.
Avoid spamming daily active free users who never subscribed. Win-back offers are for lapsed paying relationships.
App Store Connect setup (overview)
Engineering and growth should collaborate on setup. This is not legal advice; verify against current Apple documentation.
- Create the win-back offer in App Store Connect for the subscription product.
- Generate keys and configure offer identifiers your app will reference.
- Implement StoreKit presentation in the native layer (or via RevenueCat if your stack supports promotional offer flows for win-back scenarios).
- Test in Sandbox with test accounts that simulate lapsed subscription states.
Rheo does not replace billing. It owns the in-app journey to the purchase moment: headlines, social proof, reason-based copy, and branching. RevenueCat or StoreKit still executes the transaction.
In-app presentation patterns
The App Store sheet alone does not sell the return. Users need context.
Pattern 1: Acknowledge the lapse
"We miss you" is weak. Stronger: reference what they used ("Your meal plans are waiting") or what changed ("New programs since you left").
Pattern 2: Match offer to cancel reason
If you collected cancellation survey data, branch copy:
- Price → emphasize discount or extended trial in the win-back offer.
- Missing feature → highlight shipping since they left, then softer offer.
- Temporary pause → remind them what they lose without heavy discounting.
Pattern 3: Single primary CTA
One clear button: "Claim your offer" that triggers the native purchase flow. Secondary action: "Not now" with respectful exit.
Pattern 4: Social proof and risk reversal
Re-subscription anxiety is real. Show star ratings, testimonial, or money-back framing where compliant.
Combine with cancellation survey data
Win-back flows work best as the second act of a retention story.
- At cancel: run an in-app cancellation survey (reason codes + optional text).
- Store reason in your analytics and CRM.
- On return: branch win-back copy and offer aggressiveness by reason.
| Cancel reason | Win-back emphasis |
|---|---|
| Too expensive | Discount / extended trial |
| Not using enough | Habit tips + lighter offer |
| Missing feature | Product update + waitlist if fixed |
| Switched competitor | Differentiation, not only price |
This closes the loop between cancellation surveys and reactivation.
Metrics that matter
Track win-back as a small funnel, not a single event.
| Metric | Definition |
|---|---|
| Win-back flow entry rate | Lapsed users who see the flow |
| Offer click-through | Users who start StoreKit flow |
| Redemption rate | Completed win-back purchases |
| Revenue per lapsed user | Total win-back revenue / eligible cohort |
| 30-day retention | Do win-back subscribers stick? |
Compare cohorts who saw win-back vs holdout who did not. Aggressive discounts inflate short-term revenue but can attract low-intent users. Watch renewal rate at the end of the promotional period.
Rheo win-back flow example
A typical Rheo win-back channel:
- Entry: User opens app; SDK resolves
win-backchannel for users flagged lapsed in customer traits. - Screen 1: Personalized headline based on cancel reason trait.
- Screen 2: Value recap (what is new or what they lose).
- Screen 3: Offer presentation with primary CTA wired to your billing layer.
- Branch: Success → thank you / resume product. Decline → lighter reminder or feedback ask.
Because the flow is remote, you can test headline, order, and branch logic without shipping an app update for each variant. Experiments on Grow plans read lift on entries, clicks, and revenue.
Trait targeting example (conceptual):
subscription_status = lapsedcancel_reason = pricedays_since_lapse < 30
Only matching users enter the flow. Everyone else gets the normal app experience.
Compliance and UX cautions
- Do not misrepresent offer terms. Show price, duration, and renewal clearly before purchase.
- Respect regional rules where win-back offers are unavailable.
- Coordinate with email so users are not hit with identical offer creative in inbox and in-app on the same day unless intentional.
- Test denial paths if StoreKit fails or user dismisses sheet.
Coordinating with email and push
Win-back offers in email often outperform generic "come back" copy when they reference the same promotion shown in-app. Align subject lines with in-app headlines for the week of launch. If email drives a deep link, open the Rheo win-back channel directly so analytics attribute the full path.
For push, respect iOS frequency limits and user intent. A single well-timed push after 7 days of lapse can outperform daily nudges that train users to ignore you.
Android and cross-platform notes
Google Play subscription offers differ from Apple win-back mechanics. The in-app journey pattern still applies: explain value, present offer, route to native billing. Keep platform-specific purchase wiring in your billing SDK while flows stay editable from the dashboard per platform channel.
Engineering handoff checklist
Before launching a win-back channel in production:
- Confirm RevenueCat or StoreKit can present the configured offer ID in Sandbox.
- Define customer trait for
subscription_statusupdates on lapse events (webhook-driven). - Set frequency cap rules in Rheo targeting.
- Align analytics events:
win_back_shown,win_back_cta_tap,win_back_purchase. - Run QA on dismiss path and airplane mode failure.
Growth owns copy and branch order; engineering owns purchase reliability. Splitting ownership prevents pretty flows that fail silently at checkout.
Measuring incrementality
Run a simple holdout when volume allows: 10% of lapsed users see no in-app win-back for 30 days. Compare return revenue to the 90% who see the flow. If lift is minimal, your offer or timing needs work, not more impressions.
Related lifecycle content
Win-back offers work best inside a full retention system. Read cancellation surveys that improve your product roadmap to capture reasons before users lapse, then personalize win-back copy when they return.
Apple continues to evolve subscription APIs. Validate offer configuration against the latest App Store Connect and StoreKit documentation before each major iOS release. Your in-app copy can iterate weekly in Rheo while native purchase wiring stays stable across OS updates.
FAQ
Do win-back offers work on Android?
This post focuses on Apple's win-back offers. Google Play has separate promotional tools. Rheo win-back flows can still run on Android with Play-appropriate offers wired in your billing layer.
Can I use win-back offers without Rheo?
Yes, with custom native UI and remote config. Rheo accelerates iteration on the journey and connects step analytics to experiments.
How often should I show the flow?
Cap frequency. Many teams use once per lapse event, then cooldown for 7–14 days if dismissed.
Pair Apple's lever with your journey
iOS win-back offers are the promotion. Your in-app flow is the salesperson. Together they turn churn data into a structured return path you can measure and improve.
Start for free and build a win-back channel on the Rheo canvas. Publish changes over the air and read which message brings lapsed subscribers back.