How to Build a Win-Back Campaign with RevenueCat Web Billing
Use RevenueCat Web Billing and Zapier to bring churned users backRevenueCat Web Billing win-back campaign

Summary
Set up an automated win-back flow for churned users with RevenueCat Web Billing, Zapier, and Redemption Links. Capture emails, trigger webhook events on expiration, and send discounted web paywall links to re-engage subscribers and recover lost revenue.
Losing a customer often feels like the end of the line but it rarely is that. It happens with every business, however what sets out the winner from the losers is being able to bring those users back. Winning back the customer is all about re-engaging the user to reconsider subscribing again. One very powerful win-back method is to give the user a discount, if they continue their subscription.
In this article, we’ll walk through how you can create a web-based win-back campaign for your mobile apps using RevenueCat’s Web Billing — without needing to create or manage your own backend for writing a line of code.
What is a win-back campaign?
A win-back campaign is a way to try to earn back the business of a churned customer. When a user cancels their subscription, you can attempt to re-engage them and bring them back to using the service. This could involve for example sending a push notification, or an email, that offers the user to resubscribe with a discount.
You can monitor unsubscribe events in RevenueCat’s dashboard, and by using the webhooks functionality automatically email the user when they unsubscribe, nudging them to come back with a discounted offer on the subscription.
Why use Web Billing for win-back campaigns?
RevenueCat’s Web Billing allows users to make purchases through the web instead of through the traditional in-app purchase flow. It integrates seamlessly with RevenueCat’s ecosystem, so a purchase made on the web still unlocks features inside your app. RevenueCat handles all the subscription management for you, including billing, status tracking, and more.
One of the major benefits that comes with RevenueCat Web Billing is that it can exist side-by-side with your iOS and Android in-app purchases. Additionally the commission on Web Billing is smaller than those of Apple and Google. Subscriptions made through Web Billing have an additional Stripe transaction fee of 2.9% + 30¢ per transaction, and an option Stripe Tax fee: 50¢ per transaction in tax-registered locations. Meanwhile the commission for in-app subscriptions for Apple and Google is 15-30% depending if you are in the small business program or not.
This means that every subscription made through Web billing can bring potentially 12.1-27.1% more revenue when a user subscribes. This difference in fees allows you to use for example to offer a discount on the win-back, while still keeping the same margin as for the existing subscription that a user churned out from.
How to build a win-back campaign with RevenueCat
In this tutorial we are going to build a win-back campaign that is similar to what we just described. First the user will subscribe, and later cancel which will lead to their subscription expiring, at that moment our win-back campaign will trigger and send an email to the user offering a discount. The email will contain a link to a web-based purchase page where they can subscribe again, outside of the mobile app.
We want to keep things simple, and although it would be possible to build all of this using by building your own backend solution, we can get by with much less. RevenueCat provides hosted payment pages and functionality for making services do things based on subscription events. Your app should have RevenueCat SDK installed, other than we don’t need to make changes to the app side of this but can instead configure everything through RevenueCat’s dashboard
We’ll use two main features: Redemption Links, which allow users to redeem offers and associate purchases with their existing accounts, and Webhooks, which allow RevenueCat to notify external services (like email marketing platforms) about subscription events such as expirations.

Use Zapier to Send Win-Back Emails
For this tutorial, we’ll use Zapier to send win-back emails because it’s fast and simple to demonstrate. However, you can also use more robust marketing platforms, and some — like OneSignal — have direct integrations with RevenueCat, eliminating even the need to manually configure webhooks.
The general flow is straightforward. When a user’s subscription expires, RevenueCat will send a webhook event. Zapier will catch that webhook and trigger an email to the user. The email might say something like, “We’re sad to see you go. Here’s a link for a discount,” and will include a link to a web-hosted paywall page where they can easily resubscribe at a discounted rate. We will get to the details in a minute.
Web Paywall Links
The link inside the email will point the user to a Web Paywall Link. This is a hosted page provided by RevenueCat where users can purchase a subscription plan without needing to download the app again or interact with the App Store or Play Store. RevenueCat handles all aspects of billing, sends email receipts, and provides users with a subscription management portal where they can update payment methods, cancel subscriptions, and more.
Once the user completes the purchase, we use Redemption Links to tie their new web subscription back to their existing user account inside the app. This ensures they immediately get access to the correct entitlements after the discounted subscription is complete.
One of the best parts of this flow is that it requires almost no new code. You won’t need to build a web page, write HTML, or write JavaScript. Nearly everything can be set up using the RevenueCat dashboard with a little bit of configuration on your mobile app.
Step 1: Prepare the app to use redemption links
Testing our win-back campaign will require using a real device instead of a simulator as we will need real subscription events to be triggered via the App Store Sandbox. RevenueCat relies on actual events from App Store Connect to power subscription status updates and webhook triggers.
You need to ensure that RevenueCat is capturing your user’s email. This can be achieved by setting attributes:
1Purchases.shared.attribution.setAttributes(["$email": "customer@email.com"])
The attribute has a dollar sign in front of it, as it is a reserved attribute, showing up differently than custom attributes in RevenueCat dashboard and the webhook payload. If your app is already registering a user’s email in RevenueCat you don’t have to make any changes to the app.
Step 2: Connect Stripe to RevenueCat
The first step to setting up Web Billing is to connect a Stripe account to RevenueCat. Importantly, Stripe is connected at the account level, not the project level. The owner of your RevenueCat account must complete this connection. Once Stripe is linked, anyone within the RevenueCat account can configure Web Billing settings.
Inside the RevenueCat dashboard, under the Account section, you can connect a Stripe account by launching the RevenueCat app within the Stripe app marketplace. After installing the app — and choosing test mode for this tutorial — you’ll see RevenueCat available within your Stripe dashboard. Once installed, returning to the RevenueCat dashboard should show Stripe successfully connected.
Step 3: Create a new Web Billing app
Now, open your RevenueCat project. You’ll see the existing app setup, including configured products and a paywall already associated with it. However, for web billing, you’ll create a new app inside your project, choosing the Web Billing type.
When creating the new Web Billing app:
- Link it to the Stripe account you just connected.
- Choose your default currency (e.g., USD).
- Fill out basic app information such as name and support email.
- Provide an App Store URL, even if it’s just a placeholder
Once the Web Billing app is created, you can optionally add an app icon for better branding during checkout and invoice displays.

Customize the appearance of web paywall
RevenueCat allows you to customize the appearance of the hosted web paywall and customer portal. Using the Appearance Editor, you can match the style to your mobile app by adjusting background colors, button styles, accent colors, and more. After making your customizations, save the changes.

Step 4: Set up products
Next, you’ll configure products inside the Web Billing app. For the win-back campaign, you’ll create a discounted monthly subscription product — offering 50% off compared to the regular app store price.
Define a new product in the Web Billing app:
- Name it clearly (e.g., “Paw Plus_149_Monthly”).
- Set it as an auto-renewing subscription.
- Set the price to $1.49 (or what matches your desired discount).
Attach this new product to the existing Pro entitlement, ensuring that when users subscribe via the web, they unlock the same premium content as they would through the iOS app.
Step 5: Create an offering and web paywall link
With the new product created, the next step is to build an Offering, a grouping of available products for purchase

Create a new offering (e.g., “Web Win-back Offering”) that contains only the discounted monthly subscription. Then, create a Web Purchase Link associated with this offering. The Web Paywall Link configuration defines what users see on the web page, including:
- A custom header and body text.
- Terms and conditions link.
- A success page after purchase.
- Instructions for redemption via a deep link if they’ve made a purchase.

Configure the Web Paywall Link to detect if a user already has an entitlement and redirect them accordingly.
Step 6: Configure redemption links
Because users might not log in on the web, Redemption Links allow the RevenueCat system to link a web purchase to a mobile user account without explicit authentication.
Inside your Web Billing app settings in RevenueCat:
- Enable Redemption Links (sandbox-only for testing).
- Set up a custom URL scheme inside your mobile app (e.g., pawplus://).

TK copy, In iOS, you need to define a custom URL schema. You can do this in Xcode, from your xcodeproj file, Info tab, URL Types section. Then add your custom scheme from Step 1 in the “URL Schemes” field. You can see a screenshot here, but remember to replace <YOUR_CUSTOM_SCHEME> with the one you configured.

This way, after completing a web purchase, users can redeem their subscription via a deep link, unlocking premium content in the app.
In your iOS app add a onWebPurchaseRedemptionAttempt
modifier to listen for the redemption link and update the user’s subscription status after a successful link, in SwiftUI this can be accomplished with a modifier
1YourContent()
2 .onWebPurchaseRedemptionAttempt { result in
3 switch result {
4 case .success(customerInfo):
5 // Redemption was successful and entitlements were granted to the user.
6 updateUI(customerInfo)
7 case let .error(error):
8 // Redemption failed due to an error.
9 displayError(error)
10 case .invalidToken:
11 // The redemption link is invalid.
12 displayInvalidLinkError()
13 case .purchaseBelongsToOtherUser:
14 // The purchase associated to the link belongs to a different user and it cannot be redeemed.
15 displayBelongsToOtherUserError()
16 case let .expired(obfuscatedEmail):
17 // The redemption link has expired. A new one has been sent to the user to the provided obfuscated email.
18 displayExpiredMessage(obfuscatedEmail)
19 }
20 }
Step 7: Build the Email Automation with Zapier
To send the win-back emails automatically, you’ll use RevenueCat webhooks combined with a Zapier automation (“Zap”).
In RevenueCat:
- Create a new Webhook integration.
- Target only the subscription expired event for your iOS app.
- Use the webhook URL provided by Zapier.

In Zapier:
- Set the trigger to catch incoming webhooks.
- Use the customer’s email attribute from the RevenueCat event as the recipient address.
- Compose an email encouraging users to resubscribe at a discount.
- Include the Web Paywall Link inside the email.

This will send users an automated email offering them a discounted subscription right after their original subscription expires.
Step 8: Final end-to-end test
After everything is set up you should test that your automation works through all the steps:
- A user starts a subscription in the mobile app.
- They cancel their subscription.
- After expiration, Zapier sends a discount email.
- The user clicks the link, subscribes via the Web Paywall Link.
- After purchase, they are given a redemption link that deep links into your app.
- The app links their new web subscription and unlocks premium features immediately.
Testing these steps should be done on a real device.
Conclusion
By using RevenueCat Web Billing, Webhooks, and Zapier, you have now built a powerful win-back campaign without needing to code or manage your own website. The setup allows for offering steep discounts, better attribution, and seamless integration between web purchases and mobile app experiences. Check the resources below to learn more
- Redemption links
- Webhooks in RevenueCat
- Another tutorial on using RevenueCat webhooks to build powerful automations, this time to power a Blinkist-style timeline paywall
You might also like
- Blog post
How to build a Blinkist-style paywall using RevenueCat webhooks and Zapier
Build a Blinkist-style paywall with RevenueCat and Zapier—no backend required.