iOS subscription winback campaigns: timing, promotional offers, and automation
A lapsed iOS subscriber is not a lost customer — if you reach them at the right moment with the right offer. This guide covers timing windows, offer mechanics (promotional offers vs. offer codes), and the App Store Server Notification events that power an automated winback pipeline.
Every cancelled iOS subscription is a data point. The subscriber found your app, decided it was worth paying for, and then — at some moment — stopped renewing. That gap between their last payment and today is an opportunity most developers leave entirely to chance.
Winback campaigns treat lapsed subscribers as a distinct, high-intent cohort: people who already understand your product's value proposition and cleared the payment barrier at least once. Reacquisition cost for this group is a fraction of cold new-user acquisition. Yet the mechanics of running a structured winback flow on iOS — using Apple's promotional offer system, timed via App Store Server Notifications — remain underused outside well-funded teams.
This guide walks through the why, the when, the what, and the how of iOS subscription winbacks, with enough implementation detail to ship a basic automated flow in a week.
Why lapsed subscribers are your highest-value re-engagement target
Cold acquisition through paid install channels has become progressively more expensive since iOS 14.5's AppTrackingTransparency changes reshaped attribution. RevenueCat's published research and practitioners at Phiture have both noted that organic and owned-channel re-engagement — including email, push, and in-app messaging — now carries substantially better unit economics for subscription apps than equivalent spend on new installs.
Lapsed subscribers sit at the very top of that owned channel. They have already cleared the first three barriers any new user faces:
- They discovered your app (organic or paid, that cost is sunk)
- They decided it was worth paying for — once
- They have an Apple ID associated with a prior purchase, which Apple's promotional offer system can target directly inside the payment sheet
None of that is true of a cold install. A lapsed subscriber who resubscribes also tends to activate faster on a second cycle because they know where the value lives. That means lower time-to-value and better 90-day retention than a typical new subscriber cohort — assuming the root cause of their original churn was price or circumstance rather than a genuine product failure.
The question is not whether to run winback campaigns. It is how to structure timing, offers, and measurement so the campaigns pay for themselves without cannibalising margin on subscribers who were going to resubscribe anyway.
Timing windows: when to fire a winback touch
Winback timing maps to the psychological distance between the subscriber and their last positive experience with your app. Fire too early and you look desperate; wait too long and the memory of value has faded entirely. Most subscription apps benefit from a sequence of three touch points rather than a single one-shot attempt.
App Store Server Notifications give you a reliable event stream to anchor your timing. The EXPIRED notification type — with subtype VOLUNTARY for deliberate cancellations and BILLING_RETRY for payment failures — fires the moment a subscription expires after the final grace period. That timestamp is your winback clock start. For involuntary churn you can begin even earlier, when DID_FAIL_TO_RENEW fires, giving you the grace window to recover the subscriber without any offer at all.
Industry practitioners broadly converge on three timing windows:
| Window | Days post-expiry | Suggested offer depth | Rationale |
|---|---|---|---|
| Early | 3–7 days | Shallow — 1 free month or 15–20% off | Still top-of-mind; cancellation may have been impulsive or a short-term cash-flow decision |
| Mid | 14–30 days | Medium — 2 free months or 30–40% off annual | Price sensitivity was likely a genuine driver; a meaningful discount re-opens the conversation |
| Late | 45–90 days | Deep — 3 free months or 50%+ off for one cycle | Significant inertia to overcome; only an aggressive offer justifies the re-engagement spend |
These windows are starting points, not rules. If you have the volume to test, shift the day-offsets by ±3–5 days per variant and track 30-day resubscription rate. Even small timing changes can meaningfully affect conversion for certain app categories. For a framework on structuring those experiments safely, see our guide on how to A/B test iOS app prices safely.
One critical segmentation call: separate voluntary churn (deliberate cancellation) from involuntary churn (billing failure) before you write a single message. A subscriber who actively cancelled needs a value reminder paired with a genuine offer. A subscriber who churned because their card declined needs a simpler nudge — often just a notification that their access lapsed — because the underlying intent to pay was present. Conflating these two groups in a single campaign dilutes messaging and inflates your offer spend unnecessarily.
Offer mechanics: promotional offers, offer codes, and price-point design
iOS gives you two lever types for subscriber winbacks: promotional offers (server-signed, attached to an App Store product and presented via StoreKit) and offer codes (human-readable codes distributed via owned channels like email or push).
Promotional offers are the cleaner choice for automated winbacks. They are configured in App Store Connect, signed with your private key server-side at redemption time, and presented inside StoreKit's native payment sheet — meaning the resubscription happens in two taps with no payment re-entry. Critically, Apple scopes promotional offer eligibility: a subscriber who has never purchased that product (or a product in the same subscription group) cannot redeem a winback promotional offer. This eliminates the "discount leakage" problem where active subscribers exploit winback pricing.
Always verify eligibility server-side before surfacing a winback paywall. Use the App Store Server API's get-subscription-statuses endpoint to confirm a subscriber's current state. Presenting a promotional offer to a user who is already active — or who has never subscribed — will result in a StoreKit error that breaks the flow. The check takes one API call and saves a confusing dead-end for the user.
Offer codes are better suited for manual, high-touch winbacks — for example, a customer support interaction where an agent extends a goodwill free month, or a promotional email campaign where the user may no longer have the app installed. Offer codes distribute as URLs and can be redeemed via the App Store without opening the app, making them uniquely useful for re-engagement before reinstall.
For full technical configuration of both types, our guides on iOS promotional offers and iOS offer codes cover the App Store Connect setup and server-side signing in detail.
On pricing depth: the principle widely cited by growth practitioners is to offer the minimum discount that materially shifts resubscription probability — not the maximum you are willing to lose. For most subscription apps, two structures tend to outperform simple percentage discounts:
- Monthly winback: "1 free month, then full price" outperforms "20% off" in many A/B tests because "free" is cognitively more compelling than a fractional price reduction. The subscriber mentally separates the free period from the ongoing commitment.
- Annual winback: "Pay for 9 months, get 12" is a common framing. It anchors the annual commitment while substantially reducing the upfront cash outlay, which research from Phiture suggests is often the primary friction point for annual plan resubscriptions.
Automating the flow with App Store Server Notifications
A manual winback campaign is better than nothing, but it does not scale and it cannot respond to the subscriber's actual lifecycle state in real time. The goal is an event-driven pipeline where Apple's own notification events trigger the right message at the right moment, with no manual scheduling required.
The four notification types that matter for a winback automation:
DID_FAIL_TO_RENEW— billing attempt failed; begin involuntary churn recovery messaging immediately, before the grace period expires, with no discount needed yetGRACE_PERIOD_EXPIRED— grace period ended; subscriber is now fully lapsed on involuntary churn; escalate to a recovery offerEXPIREDsubtypeVOLUNTARY— subscriber's intentional cancellation has reached its end date; start the voluntary churn winback sequence hereSUBSCRIBEDsubtypeRESUBSCRIBE— lapsed subscriber returned; cancel any queued messages and attribute the conversion to your campaign
A minimal automated pipeline built on these events looks like this:
- Receive
EXPIRED / VOLUNTARYorGRACE_PERIOD_EXPIREDat your App Store Server Notifications webhook endpoint - Enqueue delayed jobs for day 5, day 21, and day 60 with the subscriber's original transaction ID
- At each job execution, call
get-subscription-statusesto confirm the subscriber has not already returned — cancel the remaining jobs if they have - If still lapsed: generate a promotional offer signature server-side, then push a notification or send an email containing a deep link that pre-loads the offer paywall in-app
- On
SUBSCRIBED / RESUBSCRIBE: cancel all remaining queued jobs and write a conversion event with the timestamp delta from original expiry
For a complete guide to configuring the webhook endpoint and verifying the JWS payloads Apple sends, see our walkthrough of App Store Server Notifications v2.
Measuring winback success: the metrics that matter
Vanity metrics will mislead you here. Open rates and click-through rates on winback emails are directionally useful for diagnosing delivery problems, but they do not tell you whether the campaign is producing net-positive revenue. The two numbers that matter are winback conversion rate (the percentage of messaged lapsed subscribers who resubscribe within a defined attribution window) and net revenue per contacted subscriber (revenue from resubscriptions, minus the offer discount cost and any messaging overhead).
| Metric | Definition | Healthy signal | Warning signal |
|---|---|---|---|
| Winback conversion rate | Resubscribers ÷ lapsed subscribers messaged | 10–25% for early window; 5–12% for late window | Below 3% across all windows — offer depth or timing is off |
| Net revenue per contact | (Resubscription revenue − offer discount) ÷ contacts | Positive at 30-day horizon | Negative at 60-day horizon — discount too deep or volume too low |
| Post-winback 90-day retention | % of winback resubscribers still active at day 90 | Within 10 percentage points of organic new-subscriber cohort | More than 20 pp below organic — reacquired subscribers churn again quickly |
| Involuntary recovery rate | Billing-failure churners recovered before grace expiry ÷ total billing failures | 40–60% recovered in grace period with no offer required | Below 20% — grace period messaging may not be reaching the subscriber |
Post-winback 90-day retention deserves particular attention. A winback cohort that churns again at a substantially higher rate than your organic cohort within three months suggests you are renting subscribers back, not re-earning them. The fix is usually product-side — better second-cycle onboarding, feature discovery prompts, or surfacing value moments the subscriber missed the first time — rather than a deeper discount on the next winback attempt.
If your winback conversion rate varies dramatically by geography, price-to-income mismatches may be playing a larger role than campaign mechanics. Our analysis of why iOS subscription churn is higher in low-PPP markets covers the structural reasons subscribers in markets like India, Brazil, and Indonesia disengage at higher rates — and why a currency-adjusted price may solve what a free-month offer cannot.
Sources and further reading
- Apple Developer — App Store Subscriptions overview
- Apple Developer — App Store Server Notifications v2
- Apple Developer — App Store Server API reference
- RevenueCat Blog — subscription analytics, churn, and lifecycle data
- Phiture Mobile Growth Stack — lifecycle marketing for subscription apps
- AppFollow Blog — app store ratings, reviews, and subscription metrics
Share this post
Ready to put this into practice?
AppsOps is the first App Store ops dashboard — PPP-fair pricing for 175 App Store territories, AI metadata localization in 39 languages, AI screenshot localization for 14 Apple device classes, and one-click App Store Connect API push — all from one dashboard, all for $19/month.
Try AppsOps free — no card →