How to win back lapsed subscribers on Google Play
How to bring canceled and expired Google Play subscribers back: restore, Resubscribe, winback offers, promo codes, deep links and returning purchases.
On Google Play, a subscriber who leaves goes through two stages. First they cancel: renewal stops but access continues until the end of the period. Then the subscription expires. Google gives you different tools for each stage, some inside your app and some in the Play Store itself, and a returning subscriber can come back through any of them.
This guide maps those tools, shows how to target offers at lapsed users, and explains the backend work needed so a returning subscriber is linked to the right account. It sticks to Google’s documentation, mainly subscriptions: customer management, the subscription lifecycle, promo codes and the Google Play Developer API reference for subscription offers (all accessed November 2026).
The four ways back
Google’s subscriptions guide has a table of “winback” options by stage and place. Summarized:
| Before expiry, in app | Before expiry, in Play Store | After expiry, in app | After expiry, in Play Store | |
|---|---|---|---|---|
| Feature | New in-app purchase | Restore | New in-app purchase | Resubscribe |
| Checkout flow | Yes | No | Yes | Yes |
| New purchase token | Yes | No | Yes | Yes |
| Enabled by default | No | Yes, all developers must support it | No | Yes for apps on Billing Library 2.0+, can opt out |
| When the user pays | Same product: end of current period | End of current period | Immediately | Immediately |
Before expiry: restore
While a canceled subscription is still active, the user can tap Resubscribe in the Play Store’s subscriptions center. Google calls this a restore: the cancellation is undone, the subscription keeps its purchase token and renews as if nothing happened. Supporting it is required for all developers. Your backend receives SUBSCRIPTION_RESTARTED, and Google suggests you record that the subscription will renew and stop showing restoration messages.
From your app, you can do the same with a new purchase. For the same product, the new subscription replaces the old one and keeps the same renewal date. For a different product or a winback price, Google suggests an upgrade or downgrade with the WITHOUT_PRORATION replacement mode, so the user is charged the new price on the original expiry date.
After expiry: Resubscribe in the Play Store
If enabled for the base plan (the default for eligible apps), the user can buy the same subscription again from the Play Store. Google’s subscriptions guide says this works “for up to one year after expiration”; the lifecycle guide adds that the button may not appear for various reasons, for example when a subscription expired long ago.
This creates a new purchase with a new token, made outside your app. You must process it on your backend (see below), or the user is refunded automatically after three days.
After expiry: in your app
A user who still has your app can subscribe again through the normal purchase flow. Here you choose what to show: the regular plan, or a discounted one.
Making a winback offer
Google’s guide talks about a “winback SKU”: a product or offer with special pricing for returning users, shown in your app or sent “outside of the app, such as in email.”
With base plans and offers, a winback discount is an offer on a base plan. Each offer can have up to two phases (for example, three discounted months, then the base price) and per-region prices: a fixed price, an absolute discount, a relative discount, or free.
Who sees the offer
Offer targeting in the API reference supports two rule types:
- Acquisition: the user never had this subscription, or any subscription in the app.
- Upgrade: the user currently has this subscription or a specific one, optionally with a given billing period, and optionally only once per user.
Neither rule says “lapsed subscriber”. The reference adds that these are the requirements Play evaluates, and that “developers may further filter these offers themselves.” In practice, a winback offer is an offer you show only to users your backend knows have lapsed, filtered in your app using offer tags (up to 20 per offer).
Free trials for returning users
Two details from Google’s guide:
- A user who resubscribes to the same product is “no longer eligible for free trials or introductory price.” Your UI must not promise one.
- If you put a free trial or intro price on a winback product, make sure the Allow one free trial per app setting in the Play Console does not exclude returning users.
Promo codes
Promo codes give a free trial on a subscription. Google says users who previously subscribed but no longer are “are still eligible for a free trial through a promotion.” Limits to know:
- Promo codes give free trials, not free subscriptions.
- One promo code per subscription product.
- Up to 10,000 one-time use codes per quarter per subscription product; unused codes do not carry over.
- Custom (shared) codes can only be redeemed by users who have not subscribed before, so for win-back use one-time codes.
- A promotion can last up to one year.
Bringing users to the right place
Google recommends a link in your app’s settings to manage subscriptions, and documents two deep links:
- All subscriptions:
https://play.google.com/store/account/subscriptions - One subscription: the same URL with
?sku=your product ID and&package=your package name.
The first is the one Google suggests “to help a user restore a canceled subscription.” For users whose subscription has expired, send them to your app’s subscription screen instead, where you can show the winback offer.
Processing a returning purchase
This is where many winbacks quietly fail.
- Listen for
SUBSCRIPTION_PURCHASED. A Play Store resubscription is a new purchase with a new token, made outside your app. - Call
purchases.subscriptionsv2.get. For resubscriptions from the Play Store, the response includesoutOfAppPurchaseContext, with the expired subscription’s purchase token and the obfuscated account and profile IDs from that previous subscription, if you set them. Use either to find the user. - Acknowledge it from your backend within three days, even if the user never opens the app. Otherwise Google refunds and revokes it.
- For in-app re-signups before expiry, the new purchase carries a
linkedPurchaseTokenpointing to the old one. Google asks you to invalidate the old token.
A practical plan
- Track the stage. Canceled but active (
SUBSCRIPTION_CANCELED, future expiry), expired (SUBSCRIPTION_EXPIRED), or lost to billing after account hold. Each needs a different message. - Read why they left. The subscription resource’s
canceledStateContexttells you whether the user, the system or you canceled, and the user’s cancel survey answer if they gave one. See Google Play’s cancellation survey. - Before expiry, one message in the app with the end date and a restore link. No discount yet.
- After expiry, a sequence spaced over weeks, matched to the reason: cost gets the winback offer, “not enough usage” gets news and maybe a promo-code trial, technical issues get an honest update on the fix.
- Email only those who gave you their address. Play’s real-time notifications don’t include the user’s email address. You need your own account and the obfuscated account ID set at purchase to connect the two.
- Measure returns with
SUBSCRIPTION_PURCHASEDlinked to a previously expired user, and check whether they stay past the discounted phase.
Doing this with NoChurn
NoChurn reads your Google Play real-time developer notifications and the subscription state, so it knows who canceled, who expired, who was lost after account hold, and what they answered in the cancel survey. It sends win-back emails at day 30, 60 and 90 based on that reason, to users whose email you share from your app, pointing them to your app or to Google Play. Google keeps the checkout, the offer pricing and the payment. See NoChurn + Google Play.